From 2d7db71fdac8e570de24725b5a610cada2fab88a Mon Sep 17 00:00:00 2001 From: Byoungchan Lee Date: Tue, 30 Aug 2022 19:07:17 +0900 Subject: [PATCH] Add an API to query resolution ratio between spatial layers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: webrtc:13960 Change-Id: I349b08397e1cd1235bb15af1011aaac8383388b8 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/273122 Reviewed-by: Erik Språng Commit-Queue: Daniel.L (Byoungchan) Lee Cr-Commit-Position: refs/heads/main@{#37949} --- .../video_coding/svc/scalability_mode_util.cc | 40 +++++++++++++++++++ .../video_coding/svc/scalability_mode_util.h | 8 ++++ 2 files changed, 48 insertions(+) diff --git a/modules/video_coding/svc/scalability_mode_util.cc b/modules/video_coding/svc/scalability_mode_util.cc index 90df03a300..dc5cf317cc 100644 --- a/modules/video_coding/svc/scalability_mode_util.cc +++ b/modules/video_coding/svc/scalability_mode_util.cc @@ -228,4 +228,44 @@ int ScalabilityModeToNumTemporalLayers(ScalabilityMode scalability_mode) { RTC_CHECK_NOTREACHED(); } +absl::optional ScalabilityModeToResolutionRatio( + ScalabilityMode scalability_mode) { + switch (scalability_mode) { + case ScalabilityMode::kL1T1: + case ScalabilityMode::kL1T2: + case ScalabilityMode::kL1T2h: + case ScalabilityMode::kL1T3: + case ScalabilityMode::kL1T3h: + return absl::nullopt; + case ScalabilityMode::kL2T1: + case ScalabilityMode::kL2T1_KEY: + case ScalabilityMode::kL2T2: + case ScalabilityMode::kL2T2_KEY: + case ScalabilityMode::kL2T2_KEY_SHIFT: + case ScalabilityMode::kL2T3: + case ScalabilityMode::kL2T3_KEY: + case ScalabilityMode::kL3T1: + case ScalabilityMode::kL3T1_KEY: + case ScalabilityMode::kL3T2: + case ScalabilityMode::kL3T2_KEY: + case ScalabilityMode::kL3T3: + case ScalabilityMode::kL3T3_KEY: + case ScalabilityMode::kS2T1: + case ScalabilityMode::kS2T2: + case ScalabilityMode::kS2T3: + case ScalabilityMode::kS3T1: + case ScalabilityMode::kS3T2: + case ScalabilityMode::kS3T3: + return ScalabilityModeResolutionRatio::kTwoToOne; + case ScalabilityMode::kL2T1h: + case ScalabilityMode::kL2T2h: + case ScalabilityMode::kL2T3h: + case ScalabilityMode::kL3T1h: + case ScalabilityMode::kL3T2h: + case ScalabilityMode::kL3T3h: + return ScalabilityModeResolutionRatio::kThreeToTwo; + } + RTC_CHECK_NOTREACHED(); +} + } // namespace webrtc diff --git a/modules/video_coding/svc/scalability_mode_util.h b/modules/video_coding/svc/scalability_mode_util.h index e9308bde33..fa0b730e52 100644 --- a/modules/video_coding/svc/scalability_mode_util.h +++ b/modules/video_coding/svc/scalability_mode_util.h @@ -18,6 +18,11 @@ namespace webrtc { +enum class ScalabilityModeResolutionRatio { + kTwoToOne, // The resolution ratio between spatial layers is 2:1. + kThreeToTwo, // The resolution ratio between spatial layers is 1.5:1. +}; + absl::optional ScalabilityModeFromString( absl::string_view scalability_mode_string); @@ -28,6 +33,9 @@ int ScalabilityModeToNumSpatialLayers(ScalabilityMode scalability_mode); int ScalabilityModeToNumTemporalLayers(ScalabilityMode scalability_mode); +absl::optional ScalabilityModeToResolutionRatio( + ScalabilityMode scalability_mode); + } // namespace webrtc #endif // MODULES_VIDEO_CODING_SVC_SCALABILITY_MODE_UTIL_H_