avformat/dhav: fix demuxer since recent breakage
authorPaul B Mahol <onemda@gmail.com>
Fri, 27 Sep 2019 12:25:18 +0000 (14:25 +0200)
committerPaul B Mahol <onemda@gmail.com>
Fri, 27 Sep 2019 12:25:18 +0000 (14:25 +0200)
libavformat/dhav.c

index 6a67f98..120b8e4 100644 (file)
@@ -289,8 +289,9 @@ static int read_chunk(AVFormatContext *s)
 static int dhav_read_packet(AVFormatContext *s, AVPacket *pkt)
 {
     DHAVContext *dhav = s->priv_data;
-    int ret;
+    int ret, stream_index;
 
+retry:
     while ((ret = read_chunk(s)) == 0)
         ;
 
@@ -357,10 +358,18 @@ static int dhav_read_packet(AVFormatContext *s, AVPacket *pkt)
         avpriv_set_pts_info(st, 64, 1, 1000);
     }
 
+    stream_index = dhav->type == 0xf0 ? dhav->audio_stream_index : dhav->video_stream_index;
+    if (stream_index < 0) {
+        avio_skip(s->pb, ret);
+        if (avio_rl32(s->pb) == MKTAG('d','h','a','v'))
+            avio_skip(s->pb, 4);
+        goto retry;
+    }
+
     ret = av_get_packet(s->pb, pkt, ret);
     if (ret < 0)
         return ret;
-    pkt->stream_index = dhav->type == 0xf0 ? dhav->audio_stream_index : dhav->video_stream_index;
+    pkt->stream_index = stream_index;
     if (dhav->type != 0xfc)
         pkt->flags   |= AV_PKT_FLAG_KEY;
     if (pkt->stream_index >= 0)