From 31581603349e09ddf8a63691e3852d10e47f79a7 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Tue, 24 Apr 2012 23:27:47 +0200 Subject: [PATCH] ffv1: move the decoder side ac->vlc switch to decode_slice() Signed-off-by: Michael Niedermayer --- libavcodec/ffv1.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/libavcodec/ffv1.c b/libavcodec/ffv1.c index b9b36dcf94..2dc5bc23e6 100644 --- a/libavcodec/ffv1.c +++ b/libavcodec/ffv1.c @@ -1614,6 +1614,13 @@ static int decode_slice(AVCodecContext *c, void *arg){ x= fs->slice_x; y= fs->slice_y; + if(!fs->ac){ + fs->ac_byte_count = f->version > 2 || (!x&&!y) ? fs->c.bytestream - fs->c.bytestream_start - 1 : 0; + init_get_bits(&fs->gb, + fs->c.bytestream_start + fs->ac_byte_count, + (fs->c.bytestream_end - fs->c.bytestream_start - fs->ac_byte_count) * 8); + } + av_assert1(width && height); if(f->colorspace==0){ const int chroma_width = -((-width )>>f->chroma_h_shift); @@ -1999,17 +2006,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac } if(i){ - if(fs->ac){ - ff_init_range_decoder(&fs->c, buf_p, v); - }else{ - init_get_bits(&fs->gb, buf_p, v * 8); - } - }else{ - if(!f->ac){ - bytes_read = c->bytestream - c->bytestream_start - 1; - if(bytes_read ==0) av_log(avctx, AV_LOG_ERROR, "error at end of AC stream\n"); //FIXME - init_get_bits(&fs->gb, buf + bytes_read, (buf_size - bytes_read) * 8); - } + ff_init_range_decoder(&fs->c, buf_p, v); } }