[FFmpeg-devel] [PATCH 09/15] lavf/brstm: add support for seeking

Paul B Mahol onemda at gmail.com
Sat Jun 20 19:16:23 CEST 2015


Dana 20. 6. 2015. 12:02 osoba "Rodger Combs" <rodger.combs at gmail.com>
napisala je:
>
> ---
>  libavformat/brstm.c | 23 +++++++++++++++++++++++
>  1 file changed, 23 insertions(+)
>
> diff --git a/libavformat/brstm.c b/libavformat/brstm.c
> index e3c6142..0014b48 100644
> --- a/libavformat/brstm.c
> +++ b/libavformat/brstm.c
> @@ -32,6 +32,7 @@ typedef struct BRSTMDemuxContext {
>      uint32_t    last_block_used_bytes;
>      uint32_t    last_block_size;
>      uint32_t    last_block_samples;
> +    uint32_t    data_start;
>      uint8_t     *table;
>      uint8_t     *adpc;
>      int         little_endian;
> @@ -312,6 +313,8 @@ static int read_header(AVFormatContext *s)
>                            codec == AV_CODEC_ID_ADPCM_THP_LE))
>                  avio_skip(s->pb, 24);
>
> +            b->data_start = avio_tell(s->pb);
> +
>              if ((major != 1 || minor) && !bfstm)
>                  avpriv_request_sample(s, "Version %d.%d", major, minor);
>
> @@ -391,6 +394,24 @@ 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;
> +    int64_t ret = 0;
> +
> +    timestamp /= b->samples_per_block;
> +    ret = avio_seek(s->pb, b->data_start + timestamp * b->block_size *
> +                           st->codec->channels, SEEK_SET);
> +    if (ret < 0)
> +        return ret;
> +
> +    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)"),
> @@ -399,6 +420,7 @@ AVInputFormat ff_brstm_demuxer = {
>      .read_header    = read_header,
>      .read_packet    = read_packet,
>      .read_close     = read_close,
> +    .read_seek      = read_seek,
>      .extensions     = "brstm",
>  };
>
> @@ -410,5 +432,6 @@ AVInputFormat ff_bfstm_demuxer = {
>      .read_header    = read_header,
>      .read_packet    = read_packet,
>      .read_close     = read_close,
> +    .read_seek      = read_seek,
>      .extensions     = "bfstm,bcstm",
>  };
> --
> 2.4.1
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

LGTM


More information about the ffmpeg-devel mailing list