diff options
author | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2022-02-11 08:53:06 +0100 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2022-02-13 12:34:55 +0100 |
commit | ac9f8d7c02fe11629fe797de80b48d063eed937f (patch) | |
tree | 2c8323ea5d2d06cc22301a186da3695bc8c53b23 /libavcodec | |
parent | 3cbef22f8f14962f1b58284015892a62855f419d (diff) | |
download | ffmpeg-ac9f8d7c02fe11629fe797de80b48d063eed937f.tar.gz |
avcodec/vp6: Avoid code duplication when initializing VP56 contexts
Reviewed-by: Peter Ross <pross@xvid.org>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/vp6.c | 51 |
1 files changed, 27 insertions, 24 deletions
diff --git a/libavcodec/vp6.c b/libavcodec/vp6.c index 3acca16f3c..ae8e223349 100644 --- a/libavcodec/vp6.c +++ b/libavcodec/vp6.c @@ -637,57 +637,58 @@ static void vp6_filter(VP56Context *s, uint8_t *dst, uint8_t *src, } } -static av_cold void vp6_decode_init_context(VP56Context *s); +static av_cold int vp6_decode_init_context(AVCodecContext *avctx, + VP56Context *s, int flip, int has_alpha) +{ + int ret = ff_vp56_init_context(avctx, s, flip, has_alpha); + if (ret < 0) + return ret; + + ff_vp6dsp_init(&s->vp56dsp); + + s->deblock_filtering = 0; + s->vp56_coord_div = vp6_coord_div; + s->parse_vector_adjustment = vp6_parse_vector_adjustment; + s->filter = vp6_filter; + s->default_models_init = vp6_default_models_init; + s->parse_vector_models = vp6_parse_vector_models; + s->parse_coeff_models = vp6_parse_coeff_models; + s->parse_header = vp6_parse_header; + + return 0; +} static av_cold int vp6_decode_init(AVCodecContext *avctx) { VP56Context *s = avctx->priv_data; int ret; - if ((ret = ff_vp56_init(avctx, avctx->codec->id == AV_CODEC_ID_VP6, - avctx->codec->id == AV_CODEC_ID_VP6A)) < 0) + ret = vp6_decode_init_context(avctx, s, avctx->codec_id == AV_CODEC_ID_VP6, + avctx->codec_id == AV_CODEC_ID_VP6A); + if (ret < 0) return ret; - ff_vp6dsp_init(&s->vp56dsp); - - vp6_decode_init_context(s); if (s->has_alpha) { /* Can only happen for ff_vp6a_decoder */ s->alpha_context = &s[1]; - ret = ff_vp56_init_context(avctx, s->alpha_context, - s->flip == -1, s->has_alpha); + ret = vp6_decode_init_context(avctx, s->alpha_context, + s->flip == -1, s->has_alpha); if (ret < 0) return ret; - ff_vp6dsp_init(&s->alpha_context->vp56dsp); - vp6_decode_init_context(s->alpha_context); } return 0; } -static av_cold void vp6_decode_init_context(VP56Context *s) -{ - s->deblock_filtering = 0; - s->vp56_coord_div = vp6_coord_div; - s->parse_vector_adjustment = vp6_parse_vector_adjustment; - s->filter = vp6_filter; - s->default_models_init = vp6_default_models_init; - s->parse_vector_models = vp6_parse_vector_models; - s->parse_coeff_models = vp6_parse_coeff_models; - s->parse_header = vp6_parse_header; -} - static av_cold void vp6_decode_free_context(VP56Context *s); static av_cold int vp6_decode_free(AVCodecContext *avctx) { VP56Context *s = avctx->priv_data; - ff_vp56_free(avctx); vp6_decode_free_context(s); if (s->alpha_context) { - ff_vp56_free_context(s->alpha_context); vp6_decode_free_context(s->alpha_context); s->alpha_context = NULL; } @@ -699,6 +700,8 @@ static av_cold void vp6_decode_free_context(VP56Context *s) { int pt, ct, cg; + ff_vp56_free_context(s); + for (pt=0; pt<2; pt++) { ff_free_vlc(&s->dccv_vlc[pt]); ff_free_vlc(&s->runv_vlc[pt]); |