From d7c7b07c5d146a500185ca64cccf5944b4d76850 Mon Sep 17 00:00:00 2001 From: Sergey Silkin Date: Mon, 22 May 2023 10:38:46 +0200 Subject: [PATCH] Account for codec type when accessing codec specific settings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: none Change-Id: Ic60414d7a8cd2e40f8c3855fd4ceed09ea4d7c07 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/305784 Reviewed-by: Erik Språng Commit-Queue: Sergey Silkin Cr-Commit-Position: refs/heads/main@{#40324} --- modules/video_coding/BUILD.gn | 1 + .../video_coding/utility/simulcast_utility.cc | 27 ++++++++++++++++--- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn index fba49e8fed..0a02d56cf9 100644 --- a/modules/video_coding/BUILD.gn +++ b/modules/video_coding/BUILD.gn @@ -446,6 +446,7 @@ rtc_library("video_coding_utility") { "../../rtc_base/task_utils:repeating_task", "../../system_wrappers:field_trial", "../rtp_rtcp:rtp_rtcp_format", + "svc:scalability_mode_util", ] absl_deps = [ "//third_party/abseil-cpp/absl/numeric:bits", diff --git a/modules/video_coding/utility/simulcast_utility.cc b/modules/video_coding/utility/simulcast_utility.cc index 65061ed32a..95e9488b01 100644 --- a/modules/video_coding/utility/simulcast_utility.cc +++ b/modules/video_coding/utility/simulcast_utility.cc @@ -13,6 +13,7 @@ #include #include +#include "modules/video_coding/svc/scalability_mode_util.h" #include "rtc_base/checks.h" namespace webrtc { @@ -79,15 +80,33 @@ bool SimulcastUtility::IsConferenceModeScreenshare(const VideoCodec& codec) { int SimulcastUtility::NumberOfTemporalLayers(const VideoCodec& codec, int spatial_id) { - uint8_t num_temporal_layers = - std::max(1, codec.VP8().numberOfTemporalLayers); + int num_temporal_layers = 0; + if (auto scalability_mode = codec.GetScalabilityMode(); scalability_mode) { + num_temporal_layers = ScalabilityModeToNumTemporalLayers(*scalability_mode); + } else { + switch (codec.codecType) { + case kVideoCodecVP8: + num_temporal_layers = codec.VP8().numberOfTemporalLayers; + break; + case kVideoCodecVP9: + num_temporal_layers = codec.VP9().numberOfTemporalLayers; + break; + case kVideoCodecH264: + num_temporal_layers = codec.H264().numberOfTemporalLayers; + break; + default: + break; + } + } + if (codec.numberOfSimulcastStreams > 0) { RTC_DCHECK_LT(spatial_id, codec.numberOfSimulcastStreams); num_temporal_layers = std::max(num_temporal_layers, - codec.simulcastStream[spatial_id].numberOfTemporalLayers); + static_cast( + codec.simulcastStream[spatial_id].numberOfTemporalLayers)); } - return num_temporal_layers; + return std::max(1, num_temporal_layers); } } // namespace webrtc