]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/idctdsp.c
dca: Move data tables from a header to an object file
[ffmpeg] / libavcodec / idctdsp.c
index 9651c2cb69d1d0acae580ff3175fb7087cd8bbd3..a9b8727468ba31baad494f6edf780364c44ba8f9 100644 (file)
@@ -79,6 +79,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 *restrict pixels,
                                  int line_size)
 {
@@ -141,50 +144,41 @@ static void add_pixels_clamped_c(const int16_t *block, uint8_t *restrict pixels,
     }
 }
 
-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);
-}
-
 av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx)
 {
     const unsigned high_bit_depth = avctx->bits_per_raw_sample > 8;
 
     if (avctx->bits_per_raw_sample == 10) {
-        c->idct_put              = ff_simple_idct_put_10;
-        c->idct_add              = ff_simple_idct_add_10;
-        c->idct                  = ff_simple_idct_10;
-        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;
-        }
+        c->idct_put  = ff_simple_idct_put_10;
+        c->idct_add  = ff_simple_idct_add_10;
+        c->idct      = ff_simple_idct_10;
+        c->perm_type = FF_IDCT_PERM_NONE;
+    } else 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;
     }
 
     c->put_pixels_clamped        = put_pixels_clamped_c;
     c->put_signed_pixels_clamped = put_signed_pixels_clamped_c;
     c->add_pixels_clamped        = add_pixels_clamped_c;
 
+    ff_put_pixels_clamped = c->put_pixels_clamped;
+    ff_add_pixels_clamped = c->add_pixels_clamped;
+
     if (ARCH_ARM)
         ff_idctdsp_init_arm(c, avctx, high_bit_depth);
     if (ARCH_PPC)