From 699c61d2f0b9eb2d8e2da0ebd971b4432e33d140 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reimar=20D=C3=B6ffinger?= Date: Sun, 25 Mar 2012 13:16:48 +0200 Subject: [PATCH] Handle 0-size sync packets when only parsing headers. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently, the duration of those packets is just discarded when enabling parsing, thus the output of the Metal Gear Solid demuxer breaks completely when just setting AVSTREAM_PARSE_HEADERS. The result will not be correct if a parser creates a delay even with PARSER_FLAG_COMPLETE_FRAMES and there might be other cases where it does not work correct, but just discarding them as it is done currently seems worse. Signed-off-by: Reimar Döffinger --- libavformat/utils.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libavformat/utils.c b/libavformat/utils.c index 77ac18059e..2989a08fc0 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -1133,6 +1133,9 @@ static int parse_packet(AVFormatContext *s, AVPacket *pkt, int stream_index) av_init_packet(&flush_pkt); pkt = &flush_pkt; got_output = 1; + } else if (!size && st->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) { + // preserve 0-size sync packets + compute_pkt_fields(s, st, st->parser, pkt); } while (size > 0 || (pkt == &flush_pkt && got_output)) {