[FFmpeg-cvslog] flvdec: do not create any streams in read_header()

Anton Khirnov git at videolan.org
Fri Jan 1 17:13:59 CET 2016


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sun Oct 11 11:08:24 2015 +0200| [09ae7b81ea2051eec2be9964296bd6ef492c6622] | committer: Anton Khirnov

flvdec: do not create any streams in read_header()

The current muxer behaviour is to create streams in read_header() based
on the audio/video presence flags, but fill in the stream parameters
later when we actually get some packets for them. This is rather shady,
since other demuxers set the stream parameters immediately when the
stream is created and do not touch the stream codec context after that.

Change the flv demuxer to behave in the same way as other similar
demuxers -- create the streams only when we get a packet for them.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=09ae7b81ea2051eec2be9964296bd6ef492c6622
---

 libavformat/flvdec.c |   11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c
index 2375eb1..96504e7 100644
--- a/libavformat/flvdec.c
+++ b/libavformat/flvdec.c
@@ -558,20 +558,13 @@ static int flv_read_metabody(AVFormatContext *s, int64_t next_pos)
 
 static int flv_read_header(AVFormatContext *s)
 {
-    int offset, flags;
+    int offset;
 
     avio_skip(s->pb, 4);
-    flags = avio_r8(s->pb);
+    avio_r8(s->pb); // flags
 
     s->ctx_flags |= AVFMTCTX_NOHEADER;
 
-    if (flags & FLV_HEADER_FLAG_HASVIDEO)
-        if (!create_stream(s, AVMEDIA_TYPE_VIDEO))
-            return AVERROR(ENOMEM);
-    if (flags & FLV_HEADER_FLAG_HASAUDIO)
-        if (!create_stream(s, AVMEDIA_TYPE_AUDIO))
-            return AVERROR(ENOMEM);
-
     offset = avio_rb32(s->pb);
     avio_seek(s->pb, offset, SEEK_SET);
     avio_skip(s->pb, 4);



More information about the ffmpeg-cvslog mailing list