aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/flvdec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2016-10-28 12:18:35 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2016-10-28 12:31:01 +0200
commit077939626eeaa0c1364065414c18ab9b3a072281 (patch)
treea8eb105bf8e33f0f79f1d806d30bc2cefe2b1493 /libavformat/flvdec.c
parent940b8908b94404a65f9f55e33efb4ccc6c81383c (diff)
downloadffmpeg-077939626eeaa0c1364065414c18ab9b3a072281.tar.gz
avformat/flvdec: Fix regression loosing streams
Fixes: unknown_video.flv Found-by: Thierry Foucu <tfoucu@google.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavformat/flvdec.c')
-rw-r--r--libavformat/flvdec.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c
index 68ab6805d4..e53c3459ae 100644
--- a/libavformat/flvdec.c
+++ b/libavformat/flvdec.c
@@ -66,6 +66,7 @@ typedef struct FLVContext {
int keyframe_count;
int64_t *keyframe_times;
int64_t *keyframe_filepositions;
+ int missing_streams;
} FLVContext;
static int probe(AVProbeData *p, int live)
@@ -137,6 +138,11 @@ static AVStream *create_stream(AVFormatContext *s, int codec_type)
&& s->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_SUBTITLE
&& s->streams[1]->codecpar->codec_type != AVMEDIA_TYPE_SUBTITLE))
s->ctx_flags &= ~AVFMTCTX_NOHEADER;
+ if (codec_type == AVMEDIA_TYPE_AUDIO)
+ flv->missing_streams &= ~FLV_HEADER_FLAG_HASAUDIO;
+ if (codec_type == AVMEDIA_TYPE_VIDEO)
+ flv->missing_streams &= ~FLV_HEADER_FLAG_HASVIDEO;
+
avpriv_set_pts_info(st, 32, 1, 1000); /* 32 bit pts in ms */
flv->last_keyframe_stream_index = s->nb_streams - 1;
@@ -674,11 +680,14 @@ static int flv_read_metabody(AVFormatContext *s, int64_t next_pos)
static int flv_read_header(AVFormatContext *s)
{
+ int flags;
FLVContext *flv = s->priv_data;
int offset;
avio_skip(s->pb, 4);
- avio_r8(s->pb); // flags
+ flags = avio_r8(s->pb);
+
+ flv->missing_streams = flags & (FLV_HEADER_FLAG_HASVIDEO | FLV_HEADER_FLAG_HASAUDIO);
s->ctx_flags |= AVFMTCTX_NOHEADER;
@@ -1216,6 +1225,7 @@ static int flv_read_seek(AVFormatContext *s, int stream_index,
#define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM
static const AVOption options[] = {
{ "flv_metadata", "Allocate streams according to the onMetaData array", OFFSET(trust_metadata), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VD },
+ { "missing_streams", "", OFFSET(missing_streams), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 0xFF, VD | AV_OPT_FLAG_EXPORT | AV_OPT_FLAG_READONLY },
{ NULL }
};