Browse Source

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.
tags/n3.0
Anton Khirnov 9 years ago
parent
commit
8bcadaacc2
1 changed files with 10 additions and 5 deletions
  1. +10
    -5
      libavformat/mpegenc.c

+ 10
- 5
libavformat/mpegenc.c 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;



Loading…
Cancel
Save