From dc3685e12999f106dd8e576e5b7d5543d4f70fa1 Mon Sep 17 00:00:00 2001
From: "Ronald S. Bultje" <rsbultje@gmail.com>
Date: Mon, 9 Mar 2009 12:42:53 +0000
Subject: [PATCH] Move frame discarding out of the ff_rm_parse_packet() loop,
 and respect rm->audio_pkt_cnt in case multiple packets should be read before
 the next syncpoint in the file, so that ffplay -an on a file containing AAC
 audio works. See "[PATCH] Make RM demuxer behave better with -an option"
 thread on mailinglist.

Originally committed as revision 17908 to svn://svn.ffmpeg.org/ffmpeg/trunk
---
 libavformat/rmdec.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/libavformat/rmdec.c b/libavformat/rmdec.c
index 5e3b3c760c7..3bd0f0dd9ae 100644
--- a/libavformat/rmdec.c
+++ b/libavformat/rmdec.c
@@ -643,12 +643,6 @@ ff_rm_parse_packet (AVFormatContext *s, ByteIOContext *pb,
     } else
         av_get_packet(pb, pkt, len);
 
-    if(  (st->discard >= AVDISCARD_NONKEY && !(*flags&2))
-       || st->discard >= AVDISCARD_ALL){
-        av_free_packet(pkt);
-        return -1;
-    }
-
     pkt->stream_index = st->index;
 
 #if 0
@@ -749,6 +743,16 @@ resync:
                                 &seq, &flags, &timestamp) < 0)
             goto resync;
 
+        if(  (st->discard >= AVDISCARD_NONKEY && !(flags&2))
+           || st->discard >= AVDISCARD_ALL){
+            av_free_packet(pkt);
+            while (rm->audio_pkt_cnt > 0) {
+                ff_rm_retrieve_cache(s, s->pb, st, st->priv_data, pkt);
+                av_free_packet(pkt);
+            }
+            goto resync;
+        }
+
         if((flags&2) && (seq&0x7F) == 1)
             av_add_index_entry(st, pos, timestamp, 0, 0, AVINDEX_KEYFRAME);
     }
-- 
GitLab