mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-02-20 05:46:57 +00:00
lavf/mlv: Only add streams that are supposed to contain frames.
Fixes ticket #4296. Reviewed-by: Peter Ross
This commit is contained in:
parent
ec8ec999f4
commit
ac923ed470
@ -242,6 +242,7 @@ static int read_header(AVFormatContext *avctx)
|
|||||||
AVIOContext *pb = avctx->pb;
|
AVIOContext *pb = avctx->pb;
|
||||||
AVStream *vst = NULL, *ast = NULL;
|
AVStream *vst = NULL, *ast = NULL;
|
||||||
int size, ret;
|
int size, ret;
|
||||||
|
unsigned nb_video_frames, nb_audio_frames;
|
||||||
uint64_t guid;
|
uint64_t guid;
|
||||||
char guidstr[32];
|
char guidstr[32];
|
||||||
|
|
||||||
@ -259,11 +260,17 @@ static int read_header(AVFormatContext *avctx)
|
|||||||
avio_skip(pb, 8); //fileNum, fileCount, fileFlags
|
avio_skip(pb, 8); //fileNum, fileCount, fileFlags
|
||||||
|
|
||||||
mlv->class[0] = avio_rl16(pb);
|
mlv->class[0] = avio_rl16(pb);
|
||||||
if (mlv->class[0]) {
|
mlv->class[1] = avio_rl16(pb);
|
||||||
|
|
||||||
|
nb_video_frames = avio_rl32(pb);
|
||||||
|
nb_audio_frames = avio_rl32(pb);
|
||||||
|
|
||||||
|
if (nb_video_frames && mlv->class[0]) {
|
||||||
vst = avformat_new_stream(avctx, NULL);
|
vst = avformat_new_stream(avctx, NULL);
|
||||||
if (!vst)
|
if (!vst)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
vst->id = 0;
|
vst->id = 0;
|
||||||
|
vst->nb_frames = nb_video_frames;
|
||||||
if ((mlv->class[0] & (MLV_CLASS_FLAG_DELTA|MLV_CLASS_FLAG_LZMA)))
|
if ((mlv->class[0] & (MLV_CLASS_FLAG_DELTA|MLV_CLASS_FLAG_LZMA)))
|
||||||
avpriv_request_sample(avctx, "compression");
|
avpriv_request_sample(avctx, "compression");
|
||||||
vst->codec->codec_type = AVMEDIA_TYPE_VIDEO;
|
vst->codec->codec_type = AVMEDIA_TYPE_VIDEO;
|
||||||
@ -289,12 +296,12 @@ static int read_header(AVFormatContext *avctx)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mlv->class[1] = avio_rl16(pb);
|
if (nb_audio_frames && mlv->class[1]) {
|
||||||
if (mlv->class[1]) {
|
|
||||||
ast = avformat_new_stream(avctx, NULL);
|
ast = avformat_new_stream(avctx, NULL);
|
||||||
if (!ast)
|
if (!ast)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
ast->id = 1;
|
ast->id = 1;
|
||||||
|
ast->nb_frames = nb_audio_frames;
|
||||||
if ((mlv->class[1] & MLV_CLASS_FLAG_LZMA))
|
if ((mlv->class[1] & MLV_CLASS_FLAG_LZMA))
|
||||||
avpriv_request_sample(avctx, "compression");
|
avpriv_request_sample(avctx, "compression");
|
||||||
if ((mlv->class[1] & ~MLV_CLASS_FLAG_LZMA) != MLV_AUDIO_CLASS_WAV)
|
if ((mlv->class[1] & ~MLV_CLASS_FLAG_LZMA) != MLV_AUDIO_CLASS_WAV)
|
||||||
@ -304,16 +311,6 @@ static int read_header(AVFormatContext *avctx)
|
|||||||
avpriv_set_pts_info(ast, 33, 1, ast->codec->sample_rate);
|
avpriv_set_pts_info(ast, 33, 1, ast->codec->sample_rate);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vst)
|
|
||||||
vst->nb_frames = avio_rl32(pb);
|
|
||||||
else
|
|
||||||
avio_skip(pb, 4);
|
|
||||||
|
|
||||||
if (ast)
|
|
||||||
ast->nb_frames = avio_rl32(pb);
|
|
||||||
else
|
|
||||||
avio_skip(pb, 4);
|
|
||||||
|
|
||||||
if (vst) {
|
if (vst) {
|
||||||
AVRational framerate;
|
AVRational framerate;
|
||||||
framerate.num = avio_rl32(pb);
|
framerate.num = avio_rl32(pb);
|
||||||
|
Loading…
Reference in New Issue
Block a user