Skip to content

Commit 105a32b

Browse files
authored
Merge pull request #328 from avTranscoder/fix/get_min_max_bit_rates_from_side_data
VideoProperties: extract min and max bitrate from side data
2 parents 69e9bda + e6b0d05 commit 105a32b

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

src/AvTranscoder/properties/StreamProperties.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,13 @@ StreamProperties::StreamProperties(const FileProperties& fileProperties, const s
2828
throw std::runtime_error(ss.str());
2929
}
3030

31-
_codec = avcodec_find_decoder(_formatContext->streams[_streamIndex]->codecpar->codec_id);
31+
AVStream* stream = _formatContext->streams[_streamIndex];
32+
_codec = avcodec_find_decoder(stream->codecpar->codec_id);
3233
_codecContext = avcodec_alloc_context3(_codec);
3334

34-
avcodec_parameters_to_context(_codecContext, _formatContext->streams[_streamIndex]->codecpar);
35+
avcodec_parameters_to_context(_codecContext, stream->codecpar);
36+
_codecContext->time_base = stream->time_base;
37+
_codecContext->coded_side_data = stream->side_data;
3538
}
3639

3740
// find the decoder

src/AvTranscoder/properties/VideoProperties.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,13 +371,29 @@ size_t VideoProperties::getMaxBitRate() const
371371
{
372372
if(!_codecContext)
373373
throw std::runtime_error("unknown codec context");
374+
375+
if (_codecContext->rc_max_rate == 0
376+
&& _codecContext->coded_side_data
377+
&& _codecContext->coded_side_data->type == AV_PKT_DATA_CPB_PROPERTIES) {
378+
const AVCPBProperties* prop = (AVCPBProperties*) _codecContext->coded_side_data->data;
379+
return prop->max_bitrate;
380+
}
381+
374382
return _codecContext->rc_max_rate;
375383
}
376384

377385
size_t VideoProperties::getMinBitRate() const
378386
{
379387
if(!_codecContext)
380388
throw std::runtime_error("unknown codec context");
389+
390+
if (_codecContext->rc_max_rate == 0
391+
&& _codecContext->coded_side_data
392+
&& _codecContext->coded_side_data->type == AV_PKT_DATA_CPB_PROPERTIES) {
393+
const AVCPBProperties* prop = (AVCPBProperties*) _codecContext->coded_side_data->data;
394+
return prop->min_bitrate;
395+
}
396+
381397
return _codecContext->rc_min_rate;
382398
}
383399

0 commit comments

Comments
 (0)