]> git.sesse.net Git - ffmpeg/commitdiff
fix runtime-cpu-detect bug in swscale
authorDarren Horrocks <killallthehumans@gmail.com>
Tue, 5 Apr 2011 00:34:26 +0000 (02:34 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 5 Apr 2011 00:36:57 +0000 (02:36 +0200)
swscale doesnt ever actually do any runtime detection at all when
runtime cpu detection is enabled, it simply passes whatever is passed
to -sws_flags, which could be nothing at all making swscale default to
the C implementation.

libswscale/swscale.c

index b4107ac873385c24fca2ae7fe7c3b7bf7c62b796..e0e48088fcfae71db4b64acfc207587b1cff6d32 100644 (file)
@@ -62,6 +62,7 @@ untested special converters
 #include "rgb2rgb.h"
 #include "libavutil/intreadwrite.h"
 #include "libavutil/x86_cpu.h"
+#include "libavutil/cpu.h"
 #include "libavutil/avutil.h"
 #include "libavutil/mathematics.h"
 #include "libavutil/bswap.h"
@@ -1315,6 +1316,12 @@ SwsFunc ff_getSwsFunc(SwsContext *c)
 #if CONFIG_RUNTIME_CPUDETECT
     int flags = c->flags;
 
+    int cpuflags = av_get_cpu_flags();
+
+    flags |= (cpuflags & AV_CPU_FLAG_MMX ? SWS_CPU_CAPS_MMX : 0);
+    flags |= (cpuflags & AV_CPU_FLAG_MMX2 ? SWS_CPU_CAPS_MMX2 : 0);
+    flags |= (cpuflags & AV_CPU_FLAG_3DNOW ? SWS_CPU_CAPS_3DNOW : 0);
+
 #if ARCH_X86
     // ordered per speed fastest first
     if (flags & SWS_CPU_CAPS_MMX2) {