mpegenc: use the CPB props side data

Do not access the encoder options, since it makes no sense when the
AVStream codec context is not the encoding context.
This commit is contained in:
Anton Khirnov 2015-10-04 12:27:10 +02:00
parent 5845a8273e
commit 8bcadaacc2
1 changed files with 10 additions and 5 deletions

View File

@ -341,6 +341,8 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx)
lpcm_id = LPCM_ID;
for (i = 0; i < ctx->nb_streams; i++) {
AVCPBProperties *props;
st = ctx->streams[i];
stream = av_mallocz(sizeof(StreamInfo));
if (!stream)
@ -383,8 +385,10 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx)
stream->id = h264_id++;
else
stream->id = mpv_id++;
if (st->codec->rc_buffer_size)
stream->max_buffer_size = 6 * 1024 + st->codec->rc_buffer_size / 8;
props = (AVCPBProperties*)av_stream_get_side_data(st, AV_PKT_DATA_CPB_PROPERTIES, NULL);
if (props && props->buffer_size)
stream->max_buffer_size = 6 * 1024 + props->buffer_size / 8;
else {
av_log(ctx, AV_LOG_WARNING,
"VBV buffer size not set, muxing may fail\n");
@ -408,13 +412,14 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx)
audio_bitrate = 0;
video_bitrate = 0;
for (i = 0; i < ctx->nb_streams; i++) {
AVCPBProperties *props;
int codec_rate;
st = ctx->streams[i];
stream = (StreamInfo *)st->priv_data;
if (st->codec->rc_max_rate ||
st->codec->codec_type == AVMEDIA_TYPE_VIDEO)
codec_rate = st->codec->rc_max_rate;
props = (AVCPBProperties*)av_stream_get_side_data(st, AV_PKT_DATA_CPB_PROPERTIES, NULL);
if (props)
codec_rate = props->max_bitrate;
else
codec_rate = st->codec->bit_rate;