diff --git a/libswscale/utils.c b/libswscale/utils.c index a2e3ce17239cdf54bd6559597d8a12f9082eddb8..3daa4f4fad0b068994c318212edcfa338409e4d4 100644 --- a/libswscale/utils.c +++ b/libswscale/utils.c @@ -1155,8 +1155,19 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter, SWS_SINC | SWS_SPLINE | SWS_BICUBLIN); - if (!i || (i & (i - 1))) { - av_log(c, AV_LOG_ERROR, "Exactly one scaler algorithm must be chosen, got %X\n", i); + + /* provide a default scaler if not set by caller */ + if (!i) { + if (dstW < srcW && dstH < srcH) + flags |= SWS_BICUBIC; + else if (dstW > srcW && dstH > srcH) + flags |= SWS_BICUBIC; + else + flags |= SWS_BICUBIC; + c->flags = flags; + } else if (i & (i - 1)) { + av_log(c, AV_LOG_ERROR, + "Exactly one scaler algorithm must be chosen, got %X\n", i); return AVERROR(EINVAL); } /* sanity check */