From fe5a361c3a42b2698039b711f7f0ffb572c338a6 Mon Sep 17 00:00:00 2001 From: Baptiste Coudurier Date: Mon, 16 Feb 2009 01:51:52 +0000 Subject: [PATCH] fix mxf interleaving packet purge Originally committed as revision 17359 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/mxfenc.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c index fa52d3ff0..e08e952fe 100644 --- a/libavformat/mxfenc.c +++ b/libavformat/mxfenc.c @@ -1831,20 +1831,15 @@ static int mxf_interleave_get_packet(AVFormatContext *s, AVPacket *out, AVPacket if (stream_count && (s->nb_streams == stream_count || flush)) { pktl = s->packet_buffer; if (s->nb_streams != stream_count) { - AVPacketList *first = NULL; AVPacketList *last = NULL; - // find first packet in edit unit + // find last packet in edit unit while (pktl) { - AVStream *st = s->streams[pktl->pkt.stream_index]; - if (st->index == 0) + if (!stream_count || pktl->pkt.stream_index == 0) break; - else if (!first) - first = pktl; last = pktl; pktl = pktl->next; + stream_count--; } - if (last) - last->next = NULL; // purge packet queue while (pktl) { AVPacketList *next = pktl->next; @@ -1852,9 +1847,13 @@ static int mxf_interleave_get_packet(AVFormatContext *s, AVPacket *out, AVPacket av_freep(&pktl); pktl = next; } - if (!first) + if (last) + last->next = NULL; + else { + s->packet_buffer = NULL; goto out; - pktl = first; + } + pktl = s->packet_buffer; } *out = pktl->pkt; -- 2.11.0