From 298d88f6c24383eb66a05505f7c80cae1f5378cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Ekstr=C3=B6m?= Date: Mon, 14 Dec 2015 14:13:41 +0200 Subject: [PATCH] movenc: use similar logic to DASH when writing bit rate to ISML This way, in case of bit rate not being set, max_rate will be used instead. This enables, for example, remuxing of MPEG-TS to ISMV+ISML without losing general bit rate information. --- libavformat/movenc.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index b82bfea2b6e..006de1bec7a 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -3581,6 +3581,8 @@ static int mov_write_isml_manifest(AVIOContext *pb, MOVMuxContext *mov, AVFormat { int64_t pos = avio_tell(pb); int i; + int64_t manifest_bit_rate = 0; + static const uint8_t uuid[] = { 0xa5, 0xd4, 0x0b, 0x30, 0xe8, 0x14, 0x11, 0xdd, 0xba, 0x2f, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66 @@ -3615,9 +3617,13 @@ static int mov_write_isml_manifest(AVIOContext *pb, MOVMuxContext *mov, AVFormat } else { continue; } + + AVCPBProperties *props = (AVCPBProperties*)av_stream_get_side_data(track->st, AV_PKT_DATA_CPB_PROPERTIES, NULL); + + manifest_bit_rate = track->par->bit_rate ? track->par->bit_rate : props ? props->max_bitrate : 0; avio_printf(pb, "<%s systemBitrate=\"%"PRId64"\">\n", type, - (int64_t)track->par->bit_rate); - param_write_int(pb, "systemBitrate", track->par->bit_rate); + (int64_t)manifest_bit_rate); + param_write_int(pb, "systemBitrate", manifest_bit_rate); param_write_int(pb, "trackID", track_id); if (track->par->codec_type == AVMEDIA_TYPE_VIDEO) { if (track->par->codec_id == AV_CODEC_ID_H264) {