summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorRonald S. Bultje <rsbultje@gmail.com>2013-03-09 21:26:09 -0800
committerMichael Niedermayer <michaelni@gmx.at>2013-03-13 03:55:33 +0100
commitd1293512cfd5c99b992afb99b153e1c60ec21be6 (patch)
tree4052da33984dc27fa19440b3fb2fd7ae2886cfba /libavcodec
parent9628e5a4acb02467d6bcc07989527664bf2334e7 (diff)
vp3: use hpeldsp instead of dsputil for half-pel functions.
This makes vp3 independent of dsputil.
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/vp3.c9
-rw-r--r--libavcodec/x86/dsputil_mmx.c3
-rw-r--r--libavcodec/x86/dsputil_mmx.h3
-rw-r--r--libavcodec/x86/vp3dsp.asm7
4 files changed, 9 insertions, 13 deletions
diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c
index 5f5a3e3b22..f12b1b30bc 100644
--- a/libavcodec/vp3.c
+++ b/libavcodec/vp3.c
@@ -38,6 +38,7 @@
#include "internal.h"
#include "dsputil.h"
#include "get_bits.h"
+#include "hpeldsp.h"
#include "videodsp.h"
#include "vp3data.h"
#include "vp3dsp.h"
@@ -141,7 +142,7 @@ typedef struct Vp3DecodeContext {
int keyframe;
uint8_t idct_permutation[64];
uint8_t idct_scantable[64];
- DSPContext dsp;
+ HpelDSPContext hdsp;
VideoDSPContext vdsp;
VP3DSPContext vp3dsp;
DECLARE_ALIGNED(16, int16_t, block)[64];
@@ -1561,7 +1562,7 @@ static void render_slice(Vp3DecodeContext *s, int slice)
VP3 source but this would be slower as
put_no_rnd_pixels_tab is better optimzed */
if(motion_halfpel_index != 3){
- s->dsp.put_no_rnd_pixels_tab[1][motion_halfpel_index](
+ s->hdsp.put_no_rnd_pixels_tab[1][motion_halfpel_index](
output_plane + first_pixel,
motion_source, stride, 8);
}else{
@@ -1595,7 +1596,7 @@ static void render_slice(Vp3DecodeContext *s, int slice)
} else {
/* copy directly from the previous frame */
- s->dsp.put_pixels_tab[1][0](
+ s->hdsp.put_pixels_tab[1][0](
output_plane + first_pixel,
last_plane + first_pixel,
stride, 8);
@@ -1694,7 +1695,7 @@ static av_cold int vp3_decode_init(AVCodecContext *avctx)
if (avctx->codec_id != AV_CODEC_ID_THEORA)
avctx->pix_fmt = AV_PIX_FMT_YUV420P;
avctx->chroma_sample_location = AVCHROMA_LOC_CENTER;
- ff_dsputil_init(&s->dsp, avctx);
+ ff_hpeldsp_init(&s->hdsp, avctx->flags | CODEC_FLAG_BITEXACT);
ff_videodsp_init(&s->vdsp, 8);
ff_vp3dsp_init(&s->vp3dsp, avctx->flags);
diff --git a/libavcodec/x86/dsputil_mmx.c b/libavcodec/x86/dsputil_mmx.c
index aae9acd613..db4dc75f62 100644
--- a/libavcodec/x86/dsputil_mmx.c
+++ b/libavcodec/x86/dsputil_mmx.c
@@ -52,10 +52,7 @@ DECLARE_ALIGNED(8, const uint64_t, ff_pw_255) = 0x00ff00ff00ff00ffULL;
DECLARE_ALIGNED(16, const xmm_reg, ff_pw_512) = { 0x0200020002000200ULL, 0x0200020002000200ULL };
DECLARE_ALIGNED(16, const xmm_reg, ff_pw_1019) = { 0x03FB03FB03FB03FBULL, 0x03FB03FB03FB03FBULL };
-DECLARE_ALIGNED(8, const uint64_t, ff_pb_7) = 0x0707070707070707ULL;
-DECLARE_ALIGNED(8, const uint64_t, ff_pb_1F) = 0x1F1F1F1F1F1F1F1FULL;
DECLARE_ALIGNED(8, const uint64_t, ff_pb_3F) = 0x3F3F3F3F3F3F3F3FULL;
-DECLARE_ALIGNED(8, const uint64_t, ff_pb_81) = 0x8181818181818181ULL;
DECLARE_ALIGNED(8, const uint64_t, ff_pb_FC) = 0xFCFCFCFCFCFCFCFCULL;
DECLARE_ALIGNED(16, const double, ff_pd_1)[2] = { 1.0, 1.0 };
diff --git a/libavcodec/x86/dsputil_mmx.h b/libavcodec/x86/dsputil_mmx.h
index 4b7a1fd943..1e62c53e8b 100644
--- a/libavcodec/x86/dsputil_mmx.h
+++ b/libavcodec/x86/dsputil_mmx.h
@@ -49,10 +49,7 @@ extern const uint64_t ff_pw_255;
extern const xmm_reg ff_pb_1;
extern const xmm_reg ff_pb_3;
-extern const uint64_t ff_pb_7;
-extern const uint64_t ff_pb_1F;
extern const uint64_t ff_pb_3F;
-extern const uint64_t ff_pb_81;
extern const xmm_reg ff_pb_F8;
extern const uint64_t ff_pb_FC;
diff --git a/libavcodec/x86/vp3dsp.asm b/libavcodec/x86/vp3dsp.asm
index 423866cd2f..a47b8f2917 100644
--- a/libavcodec/x86/vp3dsp.asm
+++ b/libavcodec/x86/vp3dsp.asm
@@ -33,12 +33,13 @@ vp3_idct_data: times 8 dw 64277
times 8 dw 25080
times 8 dw 12785
+pb_7: times 8 db 7
+pb_1F: times 8 db 0x1f
+pb_81: times 8 db 0x81
+
cextern pb_1
cextern pb_3
-cextern pb_7
-cextern pb_1F
cextern pb_80
-cextern pb_81
cextern pw_8