[FFmpeg-devel] [PATCH] avcodec/idctdsp: make add/put_pixels_clamped_c internal functions

James Almer jamrial at gmail.com
Wed Aug 13 01:19:24 CEST 2014


This reduces code duplication and differences with the fork.

Signed-off-by: James Almer <jamrial at gmail.com>
---
Fix for the ARM hack untested.

 libavcodec/arm/idctdsp_init_arm.c | 16 ++++++-------
 libavcodec/idctdsp.c              | 49 +++++++++++++++++++++++++++++++++++----
 libavcodec/idctdsp.h              | 46 ++++--------------------------------
 libavcodec/xvididct.c             |  4 ++--
 4 files changed, 60 insertions(+), 55 deletions(-)

diff --git a/libavcodec/arm/idctdsp_init_arm.c b/libavcodec/arm/idctdsp_init_arm.c
index 578697e..0a983bf 100644
--- a/libavcodec/arm/idctdsp_init_arm.c
+++ b/libavcodec/arm/idctdsp_init_arm.c
@@ -30,8 +30,8 @@
 #include "idctdsp_arm.h"
 
 /* XXX: local hack */
-static void (*ff_put_pixels_clamped)(const int16_t *block, uint8_t *pixels, int line_size);
-static void (*ff_add_pixels_clamped)(const int16_t *block, uint8_t *pixels, int line_size);
+static void (*put_pixels_clamped)(const int16_t *block, uint8_t *pixels, int line_size);
+static void (*add_pixels_clamped)(const int16_t *block, uint8_t *pixels, int line_size);
 
 void ff_add_pixels_clamped_arm(const int16_t *block, uint8_t *dest,
                                int line_size);
@@ -41,25 +41,25 @@ void ff_add_pixels_clamped_arm(const int16_t *block, uint8_t *dest,
 static void j_rev_dct_arm_put(uint8_t *dest, int line_size, int16_t *block)
 {
     ff_j_rev_dct_arm(block);
-    ff_put_pixels_clamped(block, dest, line_size);
+    put_pixels_clamped(block, dest, line_size);
 }
 
 static void j_rev_dct_arm_add(uint8_t *dest, int line_size, int16_t *block)
 {
     ff_j_rev_dct_arm(block);
-    ff_add_pixels_clamped(block, dest, line_size);
+    add_pixels_clamped(block, dest, line_size);
 }
 
 static void simple_idct_arm_put(uint8_t *dest, int line_size, int16_t *block)
 {
     ff_simple_idct_arm(block);
-    ff_put_pixels_clamped(block, dest, line_size);
+    put_pixels_clamped(block, dest, line_size);
 }
 
 static void simple_idct_arm_add(uint8_t *dest, int line_size, int16_t *block)
 {
     ff_simple_idct_arm(block);
-    ff_add_pixels_clamped(block, dest, line_size);
+    add_pixels_clamped(block, dest, line_size);
 }
 
 av_cold void ff_idctdsp_init_arm(IDCTDSPContext *c, AVCodecContext *avctx,
@@ -67,8 +67,8 @@ av_cold void ff_idctdsp_init_arm(IDCTDSPContext *c, AVCodecContext *avctx,
 {
     int cpu_flags = av_get_cpu_flags();
 
-    ff_put_pixels_clamped = c->put_pixels_clamped;
-    ff_add_pixels_clamped = c->add_pixels_clamped;
+    put_pixels_clamped = c->put_pixels_clamped;
+    add_pixels_clamped = c->add_pixels_clamped;
 
     if (!avctx->lowres && !high_bit_depth) {
         if ((avctx->idct_algo == FF_IDCT_AUTO && !(avctx->flags & CODEC_FLAG_BITEXACT)) ||
diff --git a/libavcodec/idctdsp.c b/libavcodec/idctdsp.c
index 4ca0734..f139bac 100644
--- a/libavcodec/idctdsp.c
+++ b/libavcodec/idctdsp.c
@@ -80,6 +80,27 @@ av_cold void ff_init_scantable_permutation(uint8_t *idct_permutation,
     }
 }
 
+void ff_put_pixels_clamped(const int16_t *block, uint8_t *av_restrict pixels,
+                           int line_size)
+{
+    int i;
+
+    /* read the pixels */
+    for (i = 0; i < 8; i++) {
+        pixels[0] = av_clip_uint8(block[0]);
+        pixels[1] = av_clip_uint8(block[1]);
+        pixels[2] = av_clip_uint8(block[2]);
+        pixels[3] = av_clip_uint8(block[3]);
+        pixels[4] = av_clip_uint8(block[4]);
+        pixels[5] = av_clip_uint8(block[5]);
+        pixels[6] = av_clip_uint8(block[6]);
+        pixels[7] = av_clip_uint8(block[7]);
+
+        pixels += line_size;
+        block  += 8;
+    }
+}
+
 static void put_pixels_clamped4_c(const int16_t *block, uint8_t *av_restrict pixels,
                                  int line_size)
 {
@@ -133,6 +154,26 @@ static void put_signed_pixels_clamped_c(const int16_t *block,
     }
 }
 
+void ff_add_pixels_clamped(const int16_t *block, uint8_t *av_restrict pixels,
+                           int line_size)
+{
+    int i;
+
+    /* read the pixels */
+    for (i = 0; i < 8; i++) {
+        pixels[0] = av_clip_uint8(pixels[0] + block[0]);
+        pixels[1] = av_clip_uint8(pixels[1] + block[1]);
+        pixels[2] = av_clip_uint8(pixels[2] + block[2]);
+        pixels[3] = av_clip_uint8(pixels[3] + block[3]);
+        pixels[4] = av_clip_uint8(pixels[4] + block[4]);
+        pixels[5] = av_clip_uint8(pixels[5] + block[5]);
+        pixels[6] = av_clip_uint8(pixels[6] + block[6]);
+        pixels[7] = av_clip_uint8(pixels[7] + block[7]);
+        pixels   += line_size;
+        block    += 8;
+    }
+}
+
 static void add_pixels_clamped4_c(const int16_t *block, uint8_t *av_restrict pixels,
                           int line_size)
 {
@@ -166,13 +207,13 @@ 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);
+    ff_put_pixels_clamped(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);
+    ff_add_pixels_clamped(block, dest, line_size);
 }
 static void ff_jref_idct4_put(uint8_t *dest, int line_size, int16_t *block)
 {
@@ -255,9 +296,9 @@ av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx)
         }
     }
 
-    c->put_pixels_clamped        = put_pixels_clamped_c;
+    c->put_pixels_clamped        = ff_put_pixels_clamped;
     c->put_signed_pixels_clamped = put_signed_pixels_clamped_c;
-    c->add_pixels_clamped        = add_pixels_clamped_c;
+    c->add_pixels_clamped        = ff_add_pixels_clamped;
 
     if (CONFIG_MPEG4_DECODER && avctx->idct_algo == FF_IDCT_XVID)
         ff_xvididct_init(c, avctx);
diff --git a/libavcodec/idctdsp.h b/libavcodec/idctdsp.h
index bd5e875..9df13c5 100644
--- a/libavcodec/idctdsp.h
+++ b/libavcodec/idctdsp.h
@@ -48,6 +48,11 @@ void ff_init_scantable_permutation(uint8_t *idct_permutation,
 int ff_init_scantable_permutation_x86(uint8_t *idct_permutation,
                                       enum idct_permutation_type perm_type);
 
+void ff_put_pixels_clamped(const int16_t *block, uint8_t *av_restrict pixels,
+                           int line_size);
+void ff_add_pixels_clamped(const int16_t *block, uint8_t *av_restrict pixels,
+                           int line_size);
+
 typedef struct IDCTDSPContext {
     /* pixel ops : interface with DCT */
     void (*put_pixels_clamped)(const int16_t *block /* align 16 */,
@@ -106,45 +111,4 @@ void ff_idctdsp_init_ppc(IDCTDSPContext *c, AVCodecContext *avctx,
 void ff_idctdsp_init_x86(IDCTDSPContext *c, AVCodecContext *avctx,
                          unsigned high_bit_depth);
 
-static inline void put_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels,
-                                        int line_size)
-{
-    int i;
-
-    /* read the pixels */
-    for (i = 0; i < 8; i++) {
-        pixels[0] = av_clip_uint8(block[0]);
-        pixels[1] = av_clip_uint8(block[1]);
-        pixels[2] = av_clip_uint8(block[2]);
-        pixels[3] = av_clip_uint8(block[3]);
-        pixels[4] = av_clip_uint8(block[4]);
-        pixels[5] = av_clip_uint8(block[5]);
-        pixels[6] = av_clip_uint8(block[6]);
-        pixels[7] = av_clip_uint8(block[7]);
-
-        pixels += line_size;
-        block  += 8;
-    }
-}
-
-static inline void add_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels,
-                                        int line_size)
-{
-    int i;
-
-    /* read the pixels */
-    for (i = 0; i < 8; i++) {
-        pixels[0] = av_clip_uint8(pixels[0] + block[0]);
-        pixels[1] = av_clip_uint8(pixels[1] + block[1]);
-        pixels[2] = av_clip_uint8(pixels[2] + block[2]);
-        pixels[3] = av_clip_uint8(pixels[3] + block[3]);
-        pixels[4] = av_clip_uint8(pixels[4] + block[4]);
-        pixels[5] = av_clip_uint8(pixels[5] + block[5]);
-        pixels[6] = av_clip_uint8(pixels[6] + block[6]);
-        pixels[7] = av_clip_uint8(pixels[7] + block[7]);
-        pixels   += line_size;
-        block    += 8;
-    }
-}
-
 #endif /* AVCODEC_IDCTDSP_H */
diff --git a/libavcodec/xvididct.c b/libavcodec/xvididct.c
index ac10d2d..d781f79 100644
--- a/libavcodec/xvididct.c
+++ b/libavcodec/xvididct.c
@@ -25,13 +25,13 @@
 static void idct_xvid_put(uint8_t *dest, int line_size, int16_t *block)
 {
     ff_idct_xvid(block);
-    put_pixels_clamped_c(block, dest, line_size);
+    ff_put_pixels_clamped(block, dest, line_size);
 }
 
 static void idct_xvid_add(uint8_t *dest, int line_size, int16_t *block)
 {
     ff_idct_xvid(block);
-    add_pixels_clamped_c(block, dest, line_size);
+    ff_add_pixels_clamped(block, dest, line_size);
 }
 
 av_cold void ff_xvididct_init(IDCTDSPContext *c, AVCodecContext *avctx)
-- 
1.8.5.5



More information about the ffmpeg-devel mailing list