This reduces code duplication and differences with the fork. Signed-off-by: James Almer <jamr...@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 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel