Add kTransmissionMaxBitrateMultiplier logic to audio priority bitrate allocation strategy similarly to default bitrate allocation logic.
Bug: webrtc:8243 Change-Id: I128712ae96cc13ace0c6d2edf518eb59d30a4569 Reviewed-on: https://webrtc-review.googlesource.com/21983 Commit-Queue: Alex Narest <alexnarest@webrtc.org> Reviewed-by: Niels Moller <nisse@webrtc.org> Reviewed-by: Stefan Holmer <stefan@webrtc.org> Cr-Commit-Position: refs/heads/master@{#20722}
This commit is contained in:
@ -26,6 +26,9 @@ namespace webrtc {
|
|||||||
|
|
||||||
// Allow packets to be transmitted in up to 2 times max video bitrate if the
|
// Allow packets to be transmitted in up to 2 times max video bitrate if the
|
||||||
// bandwidth estimate allows it.
|
// bandwidth estimate allows it.
|
||||||
|
// TODO(bugs.webrtc.org/8541): May be worth to refactor to keep this logic in
|
||||||
|
// video send stream. Similar logic is implemented in
|
||||||
|
// AudioPriorityBitrateAllocationStrategy.
|
||||||
const int kTransmissionMaxBitrateMultiplier = 2;
|
const int kTransmissionMaxBitrateMultiplier = 2;
|
||||||
const int kDefaultBitrateBps = 300000;
|
const int kDefaultBitrateBps = 300000;
|
||||||
|
|
||||||
|
@ -14,6 +14,12 @@
|
|||||||
|
|
||||||
namespace rtc {
|
namespace rtc {
|
||||||
|
|
||||||
|
// The purpose of this is to allow video streams to use extra bandwidth for FEC.
|
||||||
|
// TODO(bugs.webrtc.org/8541): May be worth to refactor to keep this logic in
|
||||||
|
// video send stream. Similar logic is implemented in BitrateAllocator.
|
||||||
|
|
||||||
|
const int kTransmissionMaxBitrateMultiplier = 2;
|
||||||
|
|
||||||
std::vector<uint32_t> BitrateAllocationStrategy::SetAllBitratesToMinimum(
|
std::vector<uint32_t> BitrateAllocationStrategy::SetAllBitratesToMinimum(
|
||||||
const ArrayView<const TrackConfig*> track_configs) {
|
const ArrayView<const TrackConfig*> track_configs) {
|
||||||
std::vector<uint32_t> track_allocations;
|
std::vector<uint32_t> track_allocations;
|
||||||
@ -84,14 +90,35 @@ std::vector<uint32_t> AudioPriorityBitrateAllocationStrategy::AllocateBitrates(
|
|||||||
const TrackConfig* audio_track_config = NULL;
|
const TrackConfig* audio_track_config = NULL;
|
||||||
size_t audio_config_index = 0;
|
size_t audio_config_index = 0;
|
||||||
uint32_t sum_min_bitrates = 0;
|
uint32_t sum_min_bitrates = 0;
|
||||||
|
uint32_t sum_max_bitrates = 0;
|
||||||
|
|
||||||
for (const auto*& track_config : track_configs) {
|
for (const auto*& track_config : track_configs) {
|
||||||
sum_min_bitrates += track_config->min_bitrate_bps;
|
sum_min_bitrates += track_config->min_bitrate_bps;
|
||||||
|
sum_max_bitrates += track_config->max_bitrate_bps;
|
||||||
if (track_config->track_id == audio_track_id_) {
|
if (track_config->track_id == audio_track_id_) {
|
||||||
audio_track_config = track_config;
|
audio_track_config = track_config;
|
||||||
audio_config_index = &track_config - &track_configs[0];
|
audio_config_index = &track_config - &track_configs[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (sum_max_bitrates < available_bitrate) {
|
||||||
|
// Allow non audio streams to go above max upto
|
||||||
|
// kTransmissionMaxBitrateMultiplier * max_bitrate_bps
|
||||||
|
size_t track_configs_size = track_configs.size();
|
||||||
|
std::vector<TrackConfig> increased_track_configs(track_configs_size);
|
||||||
|
std::vector<const TrackConfig*> increased_track_configs_ptr(
|
||||||
|
track_configs_size);
|
||||||
|
for (unsigned long i = 0; i < track_configs_size; i++) {
|
||||||
|
increased_track_configs[i] = (*track_configs[i]);
|
||||||
|
increased_track_configs_ptr[i] = &increased_track_configs[i];
|
||||||
|
if (track_configs[i]->track_id != audio_track_id_) {
|
||||||
|
increased_track_configs[i].max_bitrate_bps =
|
||||||
|
track_configs[i]->max_bitrate_bps *
|
||||||
|
kTransmissionMaxBitrateMultiplier;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return DistributeBitratesEvenly(increased_track_configs_ptr,
|
||||||
|
available_bitrate);
|
||||||
|
}
|
||||||
if (audio_track_config == nullptr) {
|
if (audio_track_config == nullptr) {
|
||||||
return DistributeBitratesEvenly(track_configs, available_bitrate);
|
return DistributeBitratesEvenly(track_configs, available_bitrate);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user