Commit 5db23c07 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit '95c0cec0'

* commit '95c0cec0':
  idctdsp: Add global function pointers for {add|put}_pixels_clamped functions

Conflicts:
	libavcodec/arm/idctdsp_init_arm.c
	libavcodec/dct.h
	libavcodec/idctdsp.c
	libavcodec/jrevdct.c
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 9e59a7be 95c0cec0
...@@ -29,10 +29,6 @@ ...@@ -29,10 +29,6 @@
#include "idct.h" #include "idct.h"
#include "idctdsp_arm.h" #include "idctdsp_arm.h"
/* XXX: local hack */
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 +37,25 @@ void ff_add_pixels_clamped_arm(const int16_t *block, uint8_t *dest, ...@@ -41,25 +37,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);
put_pixels_clamped(block, dest, line_size); ff_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);
add_pixels_clamped(block, dest, line_size); ff_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);
put_pixels_clamped(block, dest, line_size); ff_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);
add_pixels_clamped(block, dest, line_size); ff_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,9 +63,6 @@ av_cold void ff_idctdsp_init_arm(IDCTDSPContext *c, AVCodecContext *avctx, ...@@ -67,9 +63,6 @@ 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();
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)) ||
avctx->idct_algo == FF_IDCT_ARM) { avctx->idct_algo == FF_IDCT_ARM) {
......
...@@ -62,5 +62,7 @@ void ff_j_rev_dct(int16_t *data); ...@@ -62,5 +62,7 @@ void ff_j_rev_dct(int16_t *data);
void ff_j_rev_dct4(int16_t *data); void ff_j_rev_dct4(int16_t *data);
void ff_j_rev_dct2(int16_t *data); void ff_j_rev_dct2(int16_t *data);
void ff_j_rev_dct1(int16_t *data); void ff_j_rev_dct1(int16_t *data);
void ff_jref_idct_put(uint8_t *dest, int line_size, int16_t *block);
void ff_jref_idct_add(uint8_t *dest, int line_size, int16_t *block);
#endif /* AVCODEC_DCT_H */ #endif /* AVCODEC_DCT_H */
...@@ -80,8 +80,11 @@ av_cold void ff_init_scantable_permutation(uint8_t *idct_permutation, ...@@ -80,8 +80,11 @@ 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, void (*ff_put_pixels_clamped)(const int16_t *block, uint8_t *pixels, int line_size);
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 *av_restrict pixels,
int line_size)
{ {
int i; int i;
...@@ -154,8 +157,8 @@ static void put_signed_pixels_clamped_c(const int16_t *block, ...@@ -154,8 +157,8 @@ 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, static void add_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels,
int line_size) int line_size)
{ {
int i; int i;
...@@ -204,17 +207,6 @@ static void add_pixels_clamped2_c(const int16_t *block, uint8_t *av_restrict pix ...@@ -204,17 +207,6 @@ 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);
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);
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)
{ {
ff_j_rev_dct4 (block); ff_j_rev_dct4 (block);
...@@ -278,8 +270,8 @@ av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx) ...@@ -278,8 +270,8 @@ av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx)
c->perm_type = FF_IDCT_PERM_NONE; c->perm_type = FF_IDCT_PERM_NONE;
} else { } else {
if (avctx->idct_algo == FF_IDCT_INT) { if (avctx->idct_algo == FF_IDCT_INT) {
c->idct_put = jref_idct_put; c->idct_put = ff_jref_idct_put;
c->idct_add = jref_idct_add; c->idct_add = ff_jref_idct_add;
c->idct = ff_j_rev_dct; c->idct = ff_j_rev_dct;
c->perm_type = FF_IDCT_PERM_LIBMPEG2; c->perm_type = FF_IDCT_PERM_LIBMPEG2;
} else if (avctx->idct_algo == FF_IDCT_FAAN) { } else if (avctx->idct_algo == FF_IDCT_FAAN) {
...@@ -296,9 +288,12 @@ av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx) ...@@ -296,9 +288,12 @@ av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx)
} }
} }
c->put_pixels_clamped = ff_put_pixels_clamped; c->put_pixels_clamped = put_pixels_clamped_c;
c->put_signed_pixels_clamped = put_signed_pixels_clamped_c; c->put_signed_pixels_clamped = put_signed_pixels_clamped_c;
c->add_pixels_clamped = ff_add_pixels_clamped; 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 (CONFIG_MPEG4_DECODER && avctx->idct_algo == FF_IDCT_XVID) if (CONFIG_MPEG4_DECODER && avctx->idct_algo == FF_IDCT_XVID)
ff_xvid_idct_init(c, avctx); ff_xvid_idct_init(c, avctx);
......
...@@ -48,11 +48,6 @@ void ff_init_scantable_permutation(uint8_t *idct_permutation, ...@@ -48,11 +48,6 @@ 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 */,
...@@ -100,6 +95,9 @@ typedef struct IDCTDSPContext { ...@@ -100,6 +95,9 @@ typedef struct IDCTDSPContext {
enum idct_permutation_type perm_type; enum idct_permutation_type perm_type;
} IDCTDSPContext; } IDCTDSPContext;
extern void (*ff_put_pixels_clamped)(const int16_t *block, uint8_t *pixels, int line_size);
extern void (*ff_add_pixels_clamped)(const int16_t *block, uint8_t *pixels, int line_size);
void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx); void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx);
void ff_idctdsp_init_alpha(IDCTDSPContext *c, AVCodecContext *avctx, void ff_idctdsp_init_alpha(IDCTDSPContext *c, AVCodecContext *avctx,
......
...@@ -63,7 +63,9 @@ ...@@ -63,7 +63,9 @@
*/ */
#include "libavutil/common.h" #include "libavutil/common.h"
#include "dct.h" #include "dct.h"
#include "idctdsp.h"
#define EIGHT_BIT_SAMPLES #define EIGHT_BIT_SAMPLES
...@@ -1153,3 +1155,15 @@ void ff_j_rev_dct1(DCTBLOCK data){ ...@@ -1153,3 +1155,15 @@ void ff_j_rev_dct1(DCTBLOCK data){
#undef FIX #undef FIX
#undef CONST_BITS #undef CONST_BITS
void ff_jref_idct_put(uint8_t *dest, int line_size, int16_t *block)
{
ff_j_rev_dct(block);
ff_put_pixels_clamped(block, dest, line_size);
}
void ff_jref_idct_add(uint8_t *dest, int line_size, int16_t *block)
{
ff_j_rev_dct(block);
ff_add_pixels_clamped(block, dest, line_size);
}
...@@ -22,6 +22,9 @@ ...@@ -22,6 +22,9 @@
#include "libavutil/mem.h" #include "libavutil/mem.h"
#include "libavutil/x86/asm.h" #include "libavutil/x86/asm.h"
#include "libavcodec/idctdsp.h"
#include "idctdsp.h" #include "idctdsp.h"
#include "simple_idct.h" #include "simple_idct.h"
...@@ -1159,12 +1162,12 @@ void ff_simple_idct_mmx(int16_t *block) ...@@ -1159,12 +1162,12 @@ void ff_simple_idct_mmx(int16_t *block)
void ff_simple_idct_put_mmx(uint8_t *dest, int line_size, int16_t *block) void ff_simple_idct_put_mmx(uint8_t *dest, int line_size, int16_t *block)
{ {
idct(block); idct(block);
ff_put_pixels_clamped_mmx(block, dest, line_size); ff_put_pixels_clamped(block, dest, line_size);
} }
void ff_simple_idct_add_mmx(uint8_t *dest, int line_size, int16_t *block) void ff_simple_idct_add_mmx(uint8_t *dest, int line_size, int16_t *block)
{ {
idct(block); idct(block);
ff_add_pixels_clamped_mmx(block, dest, line_size); ff_add_pixels_clamped(block, dest, line_size);
} }
#endif /* HAVE_INLINE_ASM */ #endif /* HAVE_INLINE_ASM */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment