X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fflvdec.c;h=3959a3665a39c5ed30290c746c8fce1910f84b62;hb=8b13492c9ecf85f1f674f99df370a19992b3910a;hp=18645b042e07b899f2befc8a71b7ceba890cb3fb;hpb=e0791c5aaf1c12601322e410119ca46c6d09981d;p=ffmpeg diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c index 18645b042e0..3959a3665a3 100644 --- a/libavformat/flvdec.c +++ b/libavformat/flvdec.c @@ -64,6 +64,8 @@ typedef struct FLVContext { int last_keyframe_stream_index; int keyframe_count; + int64_t video_bit_rate; + int64_t audio_bit_rate; int64_t *keyframe_times; int64_t *keyframe_filepositions; int missing_streams; @@ -141,9 +143,12 @@ 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) + if (codec_type == AVMEDIA_TYPE_AUDIO) { + st->codecpar->bit_rate = flv->audio_bit_rate; flv->missing_streams &= ~FLV_HEADER_FLAG_HASAUDIO; + } if (codec_type == AVMEDIA_TYPE_VIDEO) { + st->codecpar->bit_rate = flv->video_bit_rate; flv->missing_streams &= ~FLV_HEADER_FLAG_HASVIDEO; st->avg_frame_rate = flv->framerate; } @@ -547,12 +552,12 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream, amf_type == AMF_DATA_TYPE_BOOL) { if (!strcmp(key, "duration")) s->duration = num_val * AV_TIME_BASE; - else if (!strcmp(key, "videodatarate") && vpar && + else if (!strcmp(key, "videodatarate") && 0 <= (int)(num_val * 1024.0)) - vpar->bit_rate = num_val * 1024.0; - else if (!strcmp(key, "audiodatarate") && apar && + flv->video_bit_rate = num_val * 1024.0; + else if (!strcmp(key, "audiodatarate") && 0 <= (int)(num_val * 1024.0)) - apar->bit_rate = num_val * 1024.0; + flv->audio_bit_rate = num_val * 1024.0; else if (!strcmp(key, "datastream")) { AVStream *st = create_stream(s, AVMEDIA_TYPE_SUBTITLE); if (!st) @@ -1028,7 +1033,6 @@ skip: } if (i == s->nb_streams) { static const enum AVMediaType stream_types[] = {AVMEDIA_TYPE_VIDEO, AVMEDIA_TYPE_AUDIO, AVMEDIA_TYPE_SUBTITLE}; - av_log(s, AV_LOG_WARNING, "%s stream discovered after head already parsed\n", av_get_media_type_string(stream_types[stream_type])); st = create_stream(s, stream_types[stream_type]); if (!st) return AVERROR(ENOMEM);