|
|
@ -58,6 +58,25 @@ typedef struct BlockInfo { |
|
|
|
|
|
|
|
|
|
|
|
static const int dv_iweight_bits = 14; |
|
|
|
static const int dv_iweight_bits = 14; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static av_cold int dvvideo_decode_init(AVCodecContext *avctx) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
DVVideoContext *s = avctx->priv_data; |
|
|
|
|
|
|
|
DSPContext dsp; |
|
|
|
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ff_dsputil_init(&dsp, avctx); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < 64; i++) |
|
|
|
|
|
|
|
s->dv_zigzag[0][i] = dsp.idct_permutation[ff_zigzag_direct[i]]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
memcpy(s->dv_zigzag[1], ff_dv_zigzag248_direct, sizeof(s->dv_zigzag[1])); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
s->idct_put[0] = dsp.idct_put; |
|
|
|
|
|
|
|
s->idct_put[1] = ff_simple_idct248_put; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return ff_dvvideo_init(avctx); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* decode AC coefficients */ |
|
|
|
/* decode AC coefficients */ |
|
|
|
static void dv_decode_ac(GetBitContext *gb, BlockInfo *mb, int16_t *block) |
|
|
|
static void dv_decode_ac(GetBitContext *gb, BlockInfo *mb, int16_t *block) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -381,7 +400,7 @@ AVCodec ff_dvvideo_decoder = { |
|
|
|
.type = AVMEDIA_TYPE_VIDEO, |
|
|
|
.type = AVMEDIA_TYPE_VIDEO, |
|
|
|
.id = AV_CODEC_ID_DVVIDEO, |
|
|
|
.id = AV_CODEC_ID_DVVIDEO, |
|
|
|
.priv_data_size = sizeof(DVVideoContext), |
|
|
|
.priv_data_size = sizeof(DVVideoContext), |
|
|
|
.init = ff_dvvideo_init, |
|
|
|
.init = dvvideo_decode_init, |
|
|
|
.decode = dvvideo_decode_frame, |
|
|
|
.decode = dvvideo_decode_frame, |
|
|
|
.capabilities = CODEC_CAP_DR1 | CODEC_CAP_SLICE_THREADS, |
|
|
|
.capabilities = CODEC_CAP_DR1 | CODEC_CAP_SLICE_THREADS, |
|
|
|
}; |
|
|
|
}; |
|
|
|