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>
This commit is contained in:
		
							parent
							
								
									3cbef22f8f
								
							
						
					
					
						commit
						ac9f8d7c02
					
				@ -637,36 +637,15 @@ 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(AVCodecContext *avctx)
 | 
			
		||||
static av_cold int vp6_decode_init_context(AVCodecContext *avctx,
 | 
			
		||||
                                           VP56Context *s, int flip, int has_alpha)
 | 
			
		||||
{
 | 
			
		||||
    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)
 | 
			
		||||
    int ret = ff_vp56_init_context(avctx, s, flip, has_alpha);
 | 
			
		||||
    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);
 | 
			
		||||
        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;
 | 
			
		||||
@ -675,6 +654,30 @@ static av_cold void vp6_decode_init_context(VP56Context *s)
 | 
			
		||||
    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;
 | 
			
		||||
 | 
			
		||||
    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;
 | 
			
		||||
 | 
			
		||||
    if (s->has_alpha) {
 | 
			
		||||
        /* Can only happen for ff_vp6a_decoder */
 | 
			
		||||
        s->alpha_context = &s[1];
 | 
			
		||||
        ret = vp6_decode_init_context(avctx, s->alpha_context,
 | 
			
		||||
                                      s->flip == -1, s->has_alpha);
 | 
			
		||||
        if (ret < 0)
 | 
			
		||||
            return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static av_cold void vp6_decode_free_context(VP56Context *s);
 | 
			
		||||
@ -683,11 +686,9 @@ 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]);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user