Skip to content

Commit e6b0d05

Browse files
committed
VideoProperties: extract min and max bitrate from CPB side data if necessary
1 parent 69e9bda commit e6b0d05

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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy