--- libavformat/brstm.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
diff --git a/libavformat/brstm.c b/libavformat/brstm.c index 1eba943..8adffb8 100644 --- a/libavformat/brstm.c +++ b/libavformat/brstm.c @@ -30,6 +30,7 @@ typedef struct BRSTMDemuxContext { uint32_t current_block; uint32_t samples_per_block; uint32_t last_block_used_bytes; + uint32_t data_start; uint8_t *table; uint8_t *adpc; int bfstm; @@ -298,6 +299,8 @@ static int read_header(AVFormatContext *s) } avio_skip(s->pb, start - avio_tell(s->pb)); + b->data_start = avio_tell(s->pb); + if ((major != 1 || minor) && !b->bfstm) avpriv_request_sample(s, "Version %d.%d", major, minor); @@ -363,6 +366,18 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) return ret; } +static int read_seek(AVFormatContext *s, int stream_index, + int64_t timestamp, int flags) +{ + AVStream *st = s->streams[stream_index]; + BRSTMDemuxContext *b = s->priv_data; + timestamp /= b->samples_per_block; + avio_seek(s->pb, b->data_start + timestamp * b->block_size, SEEK_SET); + b->current_block = timestamp; + ff_update_cur_dts(s, st, timestamp * b->samples_per_block); + return 0; +} + AVInputFormat ff_brstm_demuxer = { .name = "brstm", .long_name = NULL_IF_CONFIG_SMALL("BRSTM (Binary Revolution Stream)"), @@ -371,6 +386,7 @@ AVInputFormat ff_brstm_demuxer = { .read_header = read_header, .read_packet = read_packet, .read_close = read_close, + .read_seek = read_seek, .extensions = "brstm", }; @@ -382,5 +398,6 @@ AVInputFormat ff_bfstm_demuxer = { .read_header = read_header, .read_packet = read_packet, .read_close = read_close, + .read_seek = read_seek, .extensions = "bfstm", }; -- 2.4.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel