From 79478ad675e7842b3a844bd1d3673988912e90a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Spr=C3=A5ng?= Date: Fri, 18 May 2018 09:39:55 +0200 Subject: [PATCH] Adjust base bitrate for experimental temporal layer count MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: webrtc:9260 Change-Id: I15eb24ddf94122d3b70cbf1ee25125a0adbf9f2d Reviewed-on: https://webrtc-review.googlesource.com/77363 Reviewed-by: Per Kjellander Reviewed-by: Rasmus Brandt Commit-Queue: Erik Språng Cr-Commit-Position: refs/heads/master@{#23322} --- media/BUILD.gn | 1 + media/engine/simulcast.cc | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/media/BUILD.gn b/media/BUILD.gn index 10ecd68e24..8d0a9911f8 100644 --- a/media/BUILD.gn +++ b/media/BUILD.gn @@ -344,6 +344,7 @@ rtc_static_library("rtc_audio_video") { "../modules/audio_mixer:audio_mixer_impl", "../modules/audio_processing:audio_processing", "../modules/video_capture:video_capture_module", + "../modules/video_coding:webrtc_vp8_helpers", "../pc:rtc_pc_base", "../rtc_base:rtc_base", "../rtc_base:rtc_task_queue", diff --git a/media/engine/simulcast.cc b/media/engine/simulcast.cc index f8cb083434..d55ab9f82a 100644 --- a/media/engine/simulcast.cc +++ b/media/engine/simulcast.cc @@ -15,6 +15,7 @@ #include "media/base/streamparams.h" #include "media/engine/constants.h" #include "media/engine/simulcast.h" +#include "modules/video_coding/codecs/vp8/include/vp8_common_types.h" #include "rtc_base/arraysize.h" #include "rtc_base/logging.h" #include "system_wrappers/include/field_trial.h" @@ -227,6 +228,21 @@ std::vector GetNormalSimulcastLayers( layers[s].num_temporal_layers = DefaultNumberOfTemporalLayers(s); layers[s].max_bitrate_bps = FindSimulcastMaxBitrateBps(width, height); layers[s].target_bitrate_bps = FindSimulcastTargetBitrateBps(width, height); + int num_temporal_layers = DefaultNumberOfTemporalLayers(s); + if (s == 0 && num_temporal_layers != 3) { + // If alternative number temporal layers is selected, adjust the + // bitrate of the lowest simulcast stream so that absolute bitrate for the + // base temporal layer matches the bitrate for the base temporal layer + // with the default 3 simulcast streams. Otherwise we risk a higher + // threshold for receiving a feed at all. + const float rate_factor = + webrtc::kVp8LayerRateAlloction[3][0] / + webrtc::kVp8LayerRateAlloction[num_temporal_layers][0]; + layers[s].max_bitrate_bps = + static_cast(layers[s].max_bitrate_bps * rate_factor); + layers[s].target_bitrate_bps = + static_cast(layers[s].target_bitrate_bps * rate_factor); + } layers[s].min_bitrate_bps = FindSimulcastMinBitrateBps(width, height); layers[s].max_framerate = max_framerate;