avformat/rsd: implement seeking
authorPaul B Mahol <onemda@gmail.com>
Fri, 20 Nov 2015 19:51:22 +0000 (20:51 +0100)
committerPaul B Mahol <onemda@gmail.com>
Fri, 20 Nov 2015 19:52:37 +0000 (20:52 +0100)
Signed-off-by: Paul B Mahol <onemda@gmail.com>
libavformat/rsd.c

index a0bc8fc..dd1f372 100644 (file)
@@ -171,10 +171,12 @@ static int rsd_read_packet(AVFormatContext *s, AVPacket *pkt)
 {
     AVCodecContext *codec = s->streams[0]->codec;
     int ret, size = 1024;
+    int64_t pos;
 
     if (avio_feof(s->pb))
         return AVERROR_EOF;
 
+    pos = avio_tell(s->pb);
     if (codec->codec_id == AV_CODEC_ID_ADPCM_IMA_RAD ||
         codec->codec_id == AV_CODEC_ID_ADPCM_PSX     ||
         codec->codec_id == AV_CODEC_ID_ADPCM_IMA_WAV ||
@@ -198,6 +200,10 @@ static int rsd_read_packet(AVFormatContext *s, AVPacket *pkt)
         ret = av_get_packet(s->pb, pkt, size);
     }
 
+    if (codec->codec_id == AV_CODEC_ID_XMA2 && pkt->size >= 1)
+        pkt->duration = (pkt->data[0] >> 2) * 512;
+
+    pkt->pos = pos;
     pkt->stream_index = 0;
 
     return ret;
@@ -211,4 +217,5 @@ AVInputFormat ff_rsd_demuxer = {
     .read_packet    =   rsd_read_packet,
     .extensions     =   "rsd",
     .codec_tag      =   (const AVCodecTag* const []){rsd_tags, 0},
+    .flags          =   AVFMT_GENERIC_INDEX,
 };