[FFmpeg-cvslog] swscale: provide a default scaler if none is set

Vittorio Giovara git at videolan.org
Sun Oct 6 11:49:05 CEST 2013


ffmpeg | branch: master | Vittorio Giovara <vittorio.giovara at gmail.com> | Tue Oct  1 19:11:00 2013 +0200| [6b3ff6f91a535d6383f41ca7bdf760165dcb6015] | committer: Luca Barbato

swscale: provide a default scaler if none is set

Lanczos for general case, sinc for upscaling, Gaussian for
downscaling. According to current literature these scalers
should be the best quality-wise algorithms for each case.

Inspired from a patch by wm4 <nfxjfg at googlemail.com>

Signed-off-by: Luca Barbato <lu_zero at gentoo.org>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6b3ff6f91a535d6383f41ca7bdf760165dcb6015
---

 libswscale/utils.c |   12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/libswscale/utils.c b/libswscale/utils.c
index 2781985..2111fc2 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -914,7 +914,17 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
                  SWS_SINC          |
                  SWS_SPLINE        |
                  SWS_BICUBLIN);
-    if (!i || (i & (i - 1))) {
+
+    /* provide a default scaler if not set by caller */
+    if (!i) {
+        if (dstW < srcW && dstH < srcH)
+            flags |= SWS_GAUSS;
+        else if (dstW > srcW && dstH > srcH)
+            flags |= SWS_SINC;
+        else
+            flags |= SWS_LANCZOS;
+        c->flags = flags;
+    } else if (i & (i - 1)) {
         av_log(c, AV_LOG_ERROR,
                "Exactly one scaler algorithm must be chosen\n");
         return AVERROR(EINVAL);



More information about the ffmpeg-cvslog mailing list