Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / ffmpeg / libavcodec / idctdsp.c
index 1c7a2aa..75695ef 100644 (file)
@@ -80,6 +80,9 @@ av_cold void ff_init_scantable_permutation(uint8_t *idct_permutation,
     }
 }
 
+void (*ff_put_pixels_clamped)(const int16_t *block, uint8_t *pixels, int line_size);
+void (*ff_add_pixels_clamped)(const int16_t *block, uint8_t *pixels, int line_size);
+
 static void put_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels,
                                  int line_size)
 {
@@ -204,17 +207,6 @@ static void add_pixels_clamped2_c(const int16_t *block, uint8_t *av_restrict pix
     }
 }
 
-static void jref_idct_put(uint8_t *dest, int line_size, int16_t *block)
-{
-    ff_j_rev_dct(block);
-    put_pixels_clamped_c(block, dest, line_size);
-}
-
-static void jref_idct_add(uint8_t *dest, int line_size, int16_t *block)
-{
-    ff_j_rev_dct(block);
-    add_pixels_clamped_c(block, dest, line_size);
-}
 static void ff_jref_idct4_put(uint8_t *dest, int line_size, int16_t *block)
 {
     ff_j_rev_dct4 (block);
@@ -277,22 +269,24 @@ av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx)
             c->idct                  = ff_simple_idct_12;
             c->perm_type             = FF_IDCT_PERM_NONE;
         } else {
-        if (avctx->idct_algo == FF_IDCT_INT) {
-            c->idct_put  = jref_idct_put;
-            c->idct_add  = jref_idct_add;
-            c->idct      = ff_j_rev_dct;
-            c->perm_type = FF_IDCT_PERM_LIBMPEG2;
-        } else if (avctx->idct_algo == FF_IDCT_FAAN) {
-            c->idct_put  = ff_faanidct_put;
-            c->idct_add  = ff_faanidct_add;
-            c->idct      = ff_faanidct;
-            c->perm_type = FF_IDCT_PERM_NONE;
-        } else { // accurate/default
-            c->idct_put  = ff_simple_idct_put_8;
-            c->idct_add  = ff_simple_idct_add_8;
-            c->idct      = ff_simple_idct_8;
-            c->perm_type = FF_IDCT_PERM_NONE;
-        }
+            if (avctx->idct_algo == FF_IDCT_INT) {
+                c->idct_put  = ff_jref_idct_put;
+                c->idct_add  = ff_jref_idct_add;
+                c->idct      = ff_j_rev_dct;
+                c->perm_type = FF_IDCT_PERM_LIBMPEG2;
+#if CONFIG_FAANIDCT
+            } else if (avctx->idct_algo == FF_IDCT_FAAN) {
+                c->idct_put  = ff_faanidct_put;
+                c->idct_add  = ff_faanidct_add;
+                c->idct      = ff_faanidct;
+                c->perm_type = FF_IDCT_PERM_NONE;
+#endif /* CONFIG_FAANIDCT */
+            } else { // accurate/default
+                c->idct_put  = ff_simple_idct_put_8;
+                c->idct_add  = ff_simple_idct_add_8;
+                c->idct      = ff_simple_idct_8;
+                c->perm_type = FF_IDCT_PERM_NONE;
+            }
         }
     }
 
@@ -300,8 +294,8 @@ av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx)
     c->put_signed_pixels_clamped = put_signed_pixels_clamped_c;
     c->add_pixels_clamped        = add_pixels_clamped_c;
 
-    if (CONFIG_MPEG4_DECODER && avctx->idct_algo == FF_IDCT_XVIDMMX)
-        ff_xvididct_init(c, avctx);
+    if (CONFIG_MPEG4_DECODER && avctx->idct_algo == FF_IDCT_XVID)
+        ff_xvid_idct_init(c, avctx);
 
     if (ARCH_ALPHA)
         ff_idctdsp_init_alpha(c, avctx, high_bit_depth);
@@ -312,6 +306,9 @@ av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx)
     if (ARCH_X86)
         ff_idctdsp_init_x86(c, avctx, high_bit_depth);
 
+    ff_put_pixels_clamped = c->put_pixels_clamped;
+    ff_add_pixels_clamped = c->add_pixels_clamped;
+
     ff_init_scantable_permutation(c->idct_permutation,
                                   c->perm_type);
 }