Browse Source

avcodec/idctdsp: make add/put_pixels_clamped_c internal functions

This reduces code duplication and differences with the fork.

Signed-off-by: James Almer <jamrial@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
tags/n2.4
James Almer Michael Niedermayer 11 years ago
parent
commit
a8592db9bb
4 changed files with 60 additions and 55 deletions
  1. +8
    -8
      libavcodec/arm/idctdsp_init_arm.c
  2. +45
    -4
      libavcodec/idctdsp.c
  3. +5
    -41
      libavcodec/idctdsp.h
  4. +2
    -2
      libavcodec/xvididct.c

+ 8
- 8
libavcodec/arm/idctdsp_init_arm.c View File

@@ -30,8 +30,8 @@
#include "idctdsp_arm.h" #include "idctdsp_arm.h"


/* XXX: local hack */ /* 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, void ff_add_pixels_clamped_arm(const int16_t *block, uint8_t *dest,
int line_size); 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) static void j_rev_dct_arm_put(uint8_t *dest, int line_size, int16_t *block)
{ {
ff_j_rev_dct_arm(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) static void j_rev_dct_arm_add(uint8_t *dest, int line_size, int16_t *block)
{ {
ff_j_rev_dct_arm(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) static void simple_idct_arm_put(uint8_t *dest, int line_size, int16_t *block)
{ {
ff_simple_idct_arm(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) static void simple_idct_arm_add(uint8_t *dest, int line_size, int16_t *block)
{ {
ff_simple_idct_arm(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, 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(); 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->lowres && !high_bit_depth) {
if ((avctx->idct_algo == FF_IDCT_AUTO && !(avctx->flags & CODEC_FLAG_BITEXACT)) || if ((avctx->idct_algo == FF_IDCT_AUTO && !(avctx->flags & CODEC_FLAG_BITEXACT)) ||


+ 45
- 4
libavcodec/idctdsp.c View File

@@ -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, static void put_pixels_clamped4_c(const int16_t *block, uint8_t *av_restrict pixels,
int line_size) 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, static void add_pixels_clamped4_c(const int16_t *block, uint8_t *av_restrict pixels,
int line_size) 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) static void jref_idct_put(uint8_t *dest, int line_size, int16_t *block)
{ {
ff_j_rev_dct(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) static void jref_idct_add(uint8_t *dest, int line_size, int16_t *block)
{ {
ff_j_rev_dct(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) 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->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) if (CONFIG_MPEG4_DECODER && avctx->idct_algo == FF_IDCT_XVID)
ff_xvididct_init(c, avctx); ff_xvididct_init(c, avctx);


+ 5
- 41
libavcodec/idctdsp.h View File

@@ -48,6 +48,11 @@ void ff_init_scantable_permutation(uint8_t *idct_permutation,
int ff_init_scantable_permutation_x86(uint8_t *idct_permutation, int ff_init_scantable_permutation_x86(uint8_t *idct_permutation,
enum idct_permutation_type perm_type); 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 { typedef struct IDCTDSPContext {
/* pixel ops : interface with DCT */ /* pixel ops : interface with DCT */
void (*put_pixels_clamped)(const int16_t *block /* align 16 */, 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, void ff_idctdsp_init_x86(IDCTDSPContext *c, AVCodecContext *avctx,
unsigned high_bit_depth); 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 */ #endif /* AVCODEC_IDCTDSP_H */

+ 2
- 2
libavcodec/xvididct.c View File

@@ -25,13 +25,13 @@
static void idct_xvid_put(uint8_t *dest, int line_size, int16_t *block) static void idct_xvid_put(uint8_t *dest, int line_size, int16_t *block)
{ {
ff_idct_xvid(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) static void idct_xvid_add(uint8_t *dest, int line_size, int16_t *block)
{ {
ff_idct_xvid(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) av_cold void ff_xvididct_init(IDCTDSPContext *c, AVCodecContext *avctx)


Loading…
Cancel
Save