summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libavcodec/arm/idctdsp_init_arm.c15
-rw-r--r--libavcodec/dct.h2
-rw-r--r--libavcodec/idctdsp.c33
-rw-r--r--libavcodec/idctdsp.h8
-rw-r--r--libavcodec/jrevdct.c14
-rw-r--r--libavcodec/x86/simple_idct.c7
6 files changed, 42 insertions, 37 deletions
diff --git a/libavcodec/arm/idctdsp_init_arm.c b/libavcodec/arm/idctdsp_init_arm.c
index 0a983bf..2d846dc 100644
--- a/libavcodec/arm/idctdsp_init_arm.c
+++ b/libavcodec/arm/idctdsp_init_arm.c
@@ -29,10 +29,6 @@
#include "idct.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,
int line_size);
@@ -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)
{
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)
{
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)
{
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)
{
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,
@@ -67,9 +63,6 @@ av_cold void ff_idctdsp_init_arm(IDCTDSPContext *c, AVCodecContext *avctx,
{
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->idct_algo == FF_IDCT_AUTO && !(avctx->flags & CODEC_FLAG_BITEXACT)) ||
avctx->idct_algo == FF_IDCT_ARM) {
diff --git a/libavcodec/dct.h b/libavcodec/dct.h
index 717f21b..05297ba 100644
--- a/libavcodec/dct.h
+++ b/libavcodec/dct.h
@@ -62,5 +62,7 @@ void ff_j_rev_dct(int16_t *data);
void ff_j_rev_dct4(int16_t *data);
void ff_j_rev_dct2(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 */
diff --git a/libavcodec/idctdsp.c b/libavcodec/idctdsp.c
index 8311fab..cf12f16 100644
--- a/libavcodec/idctdsp.c
+++ b/libavcodec/idctdsp.c
@@ -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,
- int line_size)
+void (*ff_put_pixels_clamped)(const int16_t *block, uint8_t *pixels, 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;
@@ -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,
- int line_size)
+static void add_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels,
+ int line_size)
{
int i;
@@ -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)
{
ff_j_rev_dct4 (block);
@@ -278,8 +270,8 @@ av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx)
c->perm_type = FF_IDCT_PERM_NONE;
} else {
if (avctx->idct_algo == FF_IDCT_INT) {
- c->idct_put = jref_idct_put;
- c->idct_add = jref_idct_add;
+ c->idct_put = ff_jref_idct_put;
+ c->idct_add = ff_jref_idct_add;
c->idct = ff_j_rev_dct;
c->perm_type = FF_IDCT_PERM_LIBMPEG2;
} else if (avctx->idct_algo == FF_IDCT_FAAN) {
@@ -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->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)
ff_xvid_idct_init(c, avctx);
diff --git a/libavcodec/idctdsp.h b/libavcodec/idctdsp.h
index 9df13c5..8d60656 100644
--- a/libavcodec/idctdsp.h
+++ b/libavcodec/idctdsp.h
@@ -48,11 +48,6 @@ 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 */,
@@ -100,6 +95,9 @@ typedef struct IDCTDSPContext {
enum idct_permutation_type perm_type;
} 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_alpha(IDCTDSPContext *c, AVCodecContext *avctx,
diff --git a/libavcodec/jrevdct.c b/libavcodec/jrevdct.c
index d4e6571..55a7392 100644
--- a/libavcodec/jrevdct.c
+++ b/libavcodec/jrevdct.c
@@ -63,7 +63,9 @@
*/
#include "libavutil/common.h"
+
#include "dct.h"
+#include "idctdsp.h"
#define EIGHT_BIT_SAMPLES
@@ -1153,3 +1155,15 @@ void ff_j_rev_dct1(DCTBLOCK data){
#undef FIX
#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);
+}
diff --git a/libavcodec/x86/simple_idct.c b/libavcodec/x86/simple_idct.c
index 6b4bd18..1d46212 100644
--- a/libavcodec/x86/simple_idct.c
+++ b/libavcodec/x86/simple_idct.c
@@ -22,6 +22,9 @@
#include "libavutil/mem.h"
#include "libavutil/x86/asm.h"
+
+#include "libavcodec/idctdsp.h"
+
#include "idctdsp.h"
#include "simple_idct.h"
@@ -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)
{
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)
{
idct(block);
- ff_add_pixels_clamped_mmx(block, dest, line_size);
+ ff_add_pixels_clamped(block, dest, line_size);
}
#endif /* HAVE_INLINE_ASM */
OpenPOWER on IntegriCloud