+ if (ret == RETCODE_USE_CASCADE) {
+ int tmpW = sqrt(srcW * (int64_t)dstW);
+ int tmpH = sqrt(srcH * (int64_t)dstH);
+ enum AVPixelFormat tmpFormat = AV_PIX_FMT_YUV420P;
+
+ if (srcW*(int64_t)srcH <= 4LL*dstW*dstH)
+ return AVERROR(EINVAL);
+
+ ret = av_image_alloc(c->cascaded_tmp, c->cascaded_tmpStride,
+ tmpW, tmpH, tmpFormat, 64);
+ if (ret < 0)
+ return ret;
+
+ c->cascaded_context[0] = sws_getContext(srcW, srcH, srcFormat,
+ tmpW, tmpH, tmpFormat,
+ flags, srcFilter, NULL, c->param);
+ if (!c->cascaded_context[0])
+ return -1;
+
+ c->cascaded_context[1] = sws_getContext(tmpW, tmpH, tmpFormat,
+ dstW, dstH, dstFormat,
+ flags, NULL, dstFilter, c->param);
+ if (!c->cascaded_context[1])
+ return -1;
+ return 0;
+ }