diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-10-30 23:56:52 +0100 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2013-10-31 01:01:52 +0100 |
commit | fd8af75109913d09fb6673f4aa189b4bf49bede9 (patch) | |
tree | 366447c582bf18a45d0c81203fabc4257990daaa | |
parent | 93d720b040bf62afac6e63277eedb58b949d1209 (diff) | |
download | ffmpeg-fd8af75109913d09fb6673f4aa189b4bf49bede9.tar.gz |
avcodec/bink: fix seeking to frame 0
Fixes Ticket3088
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit cb52d6da0a9c88c584a38a9a7a94825565854b7e)
Conflicts:
libavcodec/bink.c
-rw-r--r-- | libavcodec/bink.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/libavcodec/bink.c b/libavcodec/bink.c index 5d000a86b4..fcaa863cfe 100644 --- a/libavcodec/bink.c +++ b/libavcodec/bink.c @@ -117,6 +117,7 @@ typedef struct BinkContext { int version; ///< internal Bink file version int has_alpha; int swap_planes; + unsigned frame_num; Bundle bundle[BINKB_NB_SRC]; ///< bundles for decoding all data types Tree col_high[16]; ///< trees for decoding high nibble in "colours" data type @@ -1207,6 +1208,8 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPac if (c->version >= 'i') skip_bits_long(&gb, 32); + c->frame_num++; + for (plane = 0; plane < 3; plane++) { plane_idx = (!plane || !c->swap_planes) ? plane : (plane ^ 3); @@ -1215,7 +1218,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPac return ret; } else { if ((ret = binkb_decode_plane(c, &gb, plane_idx, - !avctx->frame_number, !!plane)) < 0) + c->frame_num == 1, !!plane)) < 0) return ret; } if (get_bits_count(&gb) >= bits_count) @@ -1339,6 +1342,13 @@ static av_cold int decode_end(AVCodecContext *avctx) return 0; } +static void flush(AVCodecContext *avctx) +{ + BinkContext * const c = avctx->priv_data; + + c->frame_num = 0; +} + AVCodec ff_bink_decoder = { .name = "binkvideo", .type = AVMEDIA_TYPE_VIDEO, @@ -1348,5 +1358,6 @@ AVCodec ff_bink_decoder = { .close = decode_end, .decode = decode_frame, .long_name = NULL_IF_CONFIG_SMALL("Bink video"), + .flush = flush, .capabilities = CODEC_CAP_DR1, }; |