mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-24 03:59:43 +00:00
svq1: Use hpeldsp instead of dsputil for half-pel functions
This makes svq1 independent of dsputil. Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
c10470035e
commit
6caa44aa7d
2
configure
vendored
2
configure
vendored
@ -1640,7 +1640,7 @@ rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvi
|
||||
shorten_decoder_select="golomb"
|
||||
sipr_decoder_select="lsp"
|
||||
sp5x_decoder_select="dsputil"
|
||||
svq1_decoder_select="dsputil"
|
||||
svq1_decoder_select="hpeldsp"
|
||||
svq1_encoder_select="aandcttables dsputil mpegvideoenc"
|
||||
svq3_decoder_select="golomb h264chroma h264dsp h264pred h264qpel mpegvideo videodsp"
|
||||
svq3_decoder_suggest="error_resilience zlib"
|
||||
|
@ -33,8 +33,8 @@
|
||||
*/
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "dsputil.h"
|
||||
#include "get_bits.h"
|
||||
#include "hpeldsp.h"
|
||||
#include "internal.h"
|
||||
#include "mathops.h"
|
||||
#include "svq1.h"
|
||||
@ -58,7 +58,7 @@ typedef struct svq1_pmv_s {
|
||||
} svq1_pmv;
|
||||
|
||||
typedef struct SVQ1Context {
|
||||
DSPContext dsp;
|
||||
HpelDSPContext hdsp;
|
||||
GetBitContext gb;
|
||||
AVFrame *prev;
|
||||
int width;
|
||||
@ -320,7 +320,7 @@ static void svq1_skip_block(uint8_t *current, uint8_t *previous,
|
||||
}
|
||||
}
|
||||
|
||||
static int svq1_motion_inter_block(DSPContext *dsp, GetBitContext *bitbuf,
|
||||
static int svq1_motion_inter_block(HpelDSPContext *hdsp, GetBitContext *bitbuf,
|
||||
uint8_t *current, uint8_t *previous,
|
||||
int pitch, svq1_pmv *motion, int x, int y,
|
||||
int width, int height)
|
||||
@ -359,12 +359,12 @@ static int svq1_motion_inter_block(DSPContext *dsp, GetBitContext *bitbuf,
|
||||
src = &previous[(x + (mv.x >> 1)) + (y + (mv.y >> 1)) * pitch];
|
||||
dst = current;
|
||||
|
||||
dsp->put_pixels_tab[0][(mv.y & 1) << 1 | (mv.x & 1)](dst, src, pitch, 16);
|
||||
hdsp->put_pixels_tab[0][(mv.y & 1) << 1 | (mv.x & 1)](dst, src, pitch, 16);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int svq1_motion_inter_4v_block(DSPContext *dsp, GetBitContext *bitbuf,
|
||||
static int svq1_motion_inter_4v_block(HpelDSPContext *hdsp, GetBitContext *bitbuf,
|
||||
uint8_t *current, uint8_t *previous,
|
||||
int pitch, svq1_pmv *motion, int x, int y,
|
||||
int width, int height)
|
||||
@ -433,7 +433,7 @@ static int svq1_motion_inter_4v_block(DSPContext *dsp, GetBitContext *bitbuf,
|
||||
src = &previous[(x + (mvx >> 1)) + (y + (mvy >> 1)) * pitch];
|
||||
dst = current;
|
||||
|
||||
dsp->put_pixels_tab[1][((mvy & 1) << 1) | (mvx & 1)](dst, src, pitch, 8);
|
||||
hdsp->put_pixels_tab[1][((mvy & 1) << 1) | (mvx & 1)](dst, src, pitch, 8);
|
||||
|
||||
/* select next block */
|
||||
if (i & 1)
|
||||
@ -445,7 +445,7 @@ static int svq1_motion_inter_4v_block(DSPContext *dsp, GetBitContext *bitbuf,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int svq1_decode_delta_block(AVCodecContext *avctx, DSPContext *dsp,
|
||||
static int svq1_decode_delta_block(AVCodecContext *avctx, HpelDSPContext *hdsp,
|
||||
GetBitContext *bitbuf,
|
||||
uint8_t *current, uint8_t *previous,
|
||||
int pitch, svq1_pmv *motion, int x, int y,
|
||||
@ -473,7 +473,7 @@ static int svq1_decode_delta_block(AVCodecContext *avctx, DSPContext *dsp,
|
||||
break;
|
||||
|
||||
case SVQ1_BLOCK_INTER:
|
||||
result = svq1_motion_inter_block(dsp, bitbuf, current, previous,
|
||||
result = svq1_motion_inter_block(hdsp, bitbuf, current, previous,
|
||||
pitch, motion, x, y, width, height);
|
||||
|
||||
if (result != 0) {
|
||||
@ -484,7 +484,7 @@ static int svq1_decode_delta_block(AVCodecContext *avctx, DSPContext *dsp,
|
||||
break;
|
||||
|
||||
case SVQ1_BLOCK_INTER_4V:
|
||||
result = svq1_motion_inter_4v_block(dsp, bitbuf, current, previous,
|
||||
result = svq1_motion_inter_4v_block(hdsp, bitbuf, current, previous,
|
||||
pitch, motion, x, y, width, height);
|
||||
|
||||
if (result != 0) {
|
||||
@ -699,7 +699,7 @@ static int svq1_decode_frame(AVCodecContext *avctx, void *data,
|
||||
|
||||
for (y = 0; y < height; y += 16) {
|
||||
for (x = 0; x < width; x += 16) {
|
||||
result = svq1_decode_delta_block(avctx, &s->dsp,
|
||||
result = svq1_decode_delta_block(avctx, &s->hdsp,
|
||||
&s->gb, ¤t[x],
|
||||
previous, linesize,
|
||||
pmv, x, y, width, height);
|
||||
@ -748,7 +748,7 @@ static av_cold int svq1_decode_init(AVCodecContext *avctx)
|
||||
s->height = avctx->height + 3 & ~3;
|
||||
avctx->pix_fmt = AV_PIX_FMT_YUV410P;
|
||||
|
||||
ff_dsputil_init(&s->dsp, avctx);
|
||||
ff_hpeldsp_init(&s->hdsp, avctx->flags);
|
||||
|
||||
INIT_VLC_STATIC(&svq1_block_type, 2, 4,
|
||||
&ff_svq1_block_type_vlc[0][1], 2, 1,
|
||||
|
Loading…
Reference in New Issue
Block a user