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>
This commit is contained in:
parent
0081a14e7d
commit
a8592db9bb
libavcodec
@ -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 (*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 (*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;
|
put_pixels_clamped = c->put_pixels_clamped;
|
||||||
ff_add_pixels_clamped = c->add_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)) ||
|
||||||
|
@ -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);
|
||||||
|
@ -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 */
|
||||||
|
@ -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…
x
Reference in New Issue
Block a user