diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-06-27 19:13:34 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-06-27 19:13:34 +0200 |
commit | 3ac51145304f9996152a80f5a191ced7b857a252 (patch) | |
tree | 4dfcddd2c641e53647a105fab3f32eede7173557 /libavcodec | |
parent | 6d2df3c00a7899e9c06e3a460d64e4d0ccde0fae (diff) | |
parent | e63b818dbe6060b606ae10eb184859f8b97d2353 (diff) |
Merge commit 'e63b818dbe6060b606ae10eb184859f8b97d2353'
* commit 'e63b818dbe6060b606ae10eb184859f8b97d2353':
dv: Properly split decoder and encoder initialization
Conflicts:
libavcodec/dv.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/dv.c | 25 | ||||
-rw-r--r-- | libavcodec/dvdec.c | 28 | ||||
-rw-r--r-- | libavcodec/dvenc.c | 12 |
3 files changed, 39 insertions, 26 deletions
diff --git a/libavcodec/dv.c b/libavcodec/dv.c index c3c32864c5..745ebfe7c9 100644 --- a/libavcodec/dv.c +++ b/libavcodec/dv.c @@ -235,7 +235,6 @@ int ff_dv_init_dynamic_tables(DVVideoContext *ctx, const DVprofile *d) av_cold int ff_dvvideo_init(AVCodecContext *avctx) { DVVideoContext *s = avctx->priv_data; - DSPContext dsp; static int done = 0; int i, j; @@ -292,30 +291,6 @@ av_cold int ff_dvvideo_init(AVCodecContext *avctx) ff_free_vlc(&dv_vlc); } - /* Generic DSP setup */ - memset(&dsp,0, sizeof(dsp)); - ff_dsputil_init(&dsp, avctx); - ff_set_cmp(&dsp, dsp.ildct_cmp, avctx->ildct_cmp); - s->get_pixels = dsp.get_pixels; - s->ildct_cmp = dsp.ildct_cmp[5]; - - /* 88DCT setup */ - s->fdct[0] = dsp.fdct; - s->idct_put[0] = dsp.idct_put; - for (i = 0; i < 64; i++) - s->dv_zigzag[0][i] = dsp.idct_permutation[ff_zigzag_direct[i]]; - - /* 248DCT setup */ - s->fdct[1] = dsp.fdct248; - s->idct_put[1] = ff_simple_idct248_put; // FIXME: need to add it to DSP - if (avctx->lowres){ - for (i = 0; i < 64; i++){ - int j = ff_dv_zigzag248_direct[i]; - s->dv_zigzag[1][i] = dsp.idct_permutation[(j & 7) + (j & 8) * 4 + (j & 48) / 2]; - } - }else - memcpy(s->dv_zigzag[1], ff_dv_zigzag248_direct, sizeof(s->dv_zigzag[1])); - s->avctx = avctx; avctx->chroma_sample_location = AVCHROMA_LOC_TOPLEFT; diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c index d7aaa5f0f2..bf8b5b57e2 100644 --- a/libavcodec/dvdec.c +++ b/libavcodec/dvdec.c @@ -59,6 +59,32 @@ typedef struct BlockInfo { 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; + + memset(&dsp,0, sizeof(dsp)); + ff_dsputil_init(&dsp, avctx); + + for (i = 0; i < 64; i++) + s->dv_zigzag[0][i] = dsp.idct_permutation[ff_zigzag_direct[i]]; + + if (avctx->lowres){ + for (i = 0; i < 64; i++){ + int j = ff_dv_zigzag248_direct[i]; + s->dv_zigzag[1][i] = dsp.idct_permutation[(j & 7) + (j & 8) * 4 + (j & 48) / 2]; + } + }else + 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 */ static void dv_decode_ac(GetBitContext *gb, BlockInfo *mb, int16_t *block) { @@ -385,7 +411,7 @@ AVCodec ff_dvvideo_decoder = { .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_DVVIDEO, .priv_data_size = sizeof(DVVideoContext), - .init = ff_dvvideo_init, + .init = dvvideo_decode_init, .decode = dvvideo_decode_frame, .capabilities = CODEC_CAP_DR1 | CODEC_CAP_SLICE_THREADS, .max_lowres = 3, diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c index 4a1103860d..d1e7707b02 100644 --- a/libavcodec/dvenc.c +++ b/libavcodec/dvenc.c @@ -28,6 +28,7 @@ #include "libavutil/pixdesc.h" #include "config.h" #include "avcodec.h" +#include "dsputil.h" #include "internal.h" #include "put_bits.h" #include "dv.h" @@ -36,6 +37,7 @@ static av_cold int dvvideo_encode_init(AVCodecContext *avctx) { DVVideoContext *s = avctx->priv_data; + DSPContext dsp; int ret; s->sys = avpriv_dv_codec_profile(avctx); @@ -62,6 +64,16 @@ static av_cold int dvvideo_encode_init(AVCodecContext *avctx) dv_vlc_map_tableinit(); + memset(&dsp,0, sizeof(dsp)); + ff_dsputil_init(&dsp, avctx); + ff_set_cmp(&dsp, dsp.ildct_cmp, avctx->ildct_cmp); + + s->get_pixels = dsp.get_pixels; + s->ildct_cmp = dsp.ildct_cmp[5]; + + s->fdct[0] = dsp.fdct; + s->fdct[1] = dsp.fdct248; + return ff_dvvideo_init(avctx); } |