x86: fdct: Initialize optimized fdct implementations in the standard way
authorDiego Biurrun <diego@biurrun.de>
Mon, 30 Sep 2013 13:25:47 +0000 (15:25 +0200)
committerDiego Biurrun <diego@biurrun.de>
Sat, 5 Oct 2013 16:20:52 +0000 (18:20 +0200)
libavcodec/x86/dsputilenc_mmx.c

index a1852e6..33c8d51 100644 (file)
@@ -946,6 +946,7 @@ hadamard_func(ssse3)
 av_cold void ff_dsputilenc_init_mmx(DSPContext *c, AVCodecContext *avctx)
 {
     int cpu_flags = av_get_cpu_flags();
+    const int dct_algo = avctx->dct_algo;
 
 #if HAVE_YASM
     int bit_depth = avctx->bits_per_raw_sample;
@@ -965,18 +966,9 @@ av_cold void ff_dsputilenc_init_mmx(DSPContext *c, AVCodecContext *avctx)
 
 #if HAVE_INLINE_ASM
     if (INLINE_MMX(cpu_flags)) {
-        const int dct_algo = avctx->dct_algo;
         if (avctx->bits_per_raw_sample <= 8 &&
-            (dct_algo==FF_DCT_AUTO || dct_algo==FF_DCT_MMX)) {
-            if (cpu_flags & AV_CPU_FLAG_SSE2) {
-                c->fdct = ff_fdct_sse2;
-            } else if (cpu_flags & AV_CPU_FLAG_MMXEXT) {
-                c->fdct = ff_fdct_mmxext;
-            }else{
-                c->fdct = ff_fdct_mmx;
-            }
-        }
-
+            (dct_algo == FF_DCT_AUTO || dct_algo == FF_DCT_MMX))
+            c->fdct = ff_fdct_mmx;
 
         c->diff_bytes= diff_bytes_mmx;
         c->sum_abs_dctelem= sum_abs_dctelem_mmx;
@@ -1000,6 +992,10 @@ av_cold void ff_dsputilenc_init_mmx(DSPContext *c, AVCodecContext *avctx)
     }
 
     if (INLINE_MMXEXT(cpu_flags)) {
+        if (avctx->bits_per_raw_sample <= 8 &&
+            (dct_algo == FF_DCT_AUTO || dct_algo == FF_DCT_MMX))
+            c->fdct = ff_fdct_mmxext;
+
         c->sum_abs_dctelem = sum_abs_dctelem_mmxext;
         c->vsad[4]         = vsad_intra16_mmxext;
 
@@ -1011,6 +1007,10 @@ av_cold void ff_dsputilenc_init_mmx(DSPContext *c, AVCodecContext *avctx)
     }
 
     if (INLINE_SSE2(cpu_flags)) {
+        if (avctx->bits_per_raw_sample <= 8 &&
+            (dct_algo == FF_DCT_AUTO || dct_algo == FF_DCT_MMX))
+            c->fdct = ff_fdct_sse2;
+
         c->sum_abs_dctelem= sum_abs_dctelem_sse2;
     }