New enum ScalabilityMode.

Used instead of string representation in lower-levels of encoder configuration, to avoid string comparisons (with risk of misspelling) in lots of places.

Bug: webrtc:11607
Change-Id: I4d51c2265aac297c29976d2aa601d8ffb33b7326
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/259870
Commit-Queue: Niels Moller <nisse@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Florent Castelli <orphis@webrtc.org>
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#36706}
This commit is contained in:
Niels Möller
2022-04-29 11:03:13 +02:00
committed by WebRTC LUCI CQ
parent cbf07f70e2
commit 79d566b0cf
33 changed files with 397 additions and 112 deletions

View File

@ -11,7 +11,7 @@
#include <memory>
#include "absl/strings/string_view.h"
#include "api/video_codecs/scalability_mode.h"
#include "modules/video_coding/svc/scalability_structure_full_svc.h"
#include "modules/video_coding/svc/scalability_structure_key_svc.h"
#include "modules/video_coding/svc/scalability_structure_l2t2_key_shift.h"
@ -24,7 +24,7 @@ namespace webrtc {
namespace {
struct NamedStructureFactory {
absl::string_view name;
ScalabilityMode name;
// Use function pointer to make NamedStructureFactory trivally destructable.
std::unique_ptr<ScalableVideoController> (*factory)();
ScalableVideoController::StreamLayersConfig config;
@ -114,28 +114,33 @@ constexpr ScalableVideoController::StreamLayersConfig kConfigS3T3 = {
{4, 2, 1}};
constexpr NamedStructureFactory kFactories[] = {
{"L1T1", Create<ScalableVideoControllerNoLayering>, kConfigL1T1},
{"L1T2", Create<ScalabilityStructureL1T2>, kConfigL1T2},
{"L1T3", Create<ScalabilityStructureL1T3>, kConfigL1T3},
{"L2T1", Create<ScalabilityStructureL2T1>, kConfigL2T1},
{"L2T1h", CreateH<ScalabilityStructureL2T1>, kConfigL2T1h},
{"L2T1_KEY", Create<ScalabilityStructureL2T1Key>, kConfigL2T1},
{"L2T2", Create<ScalabilityStructureL2T2>, kConfigL2T2},
{"L2T2_KEY", Create<ScalabilityStructureL2T2Key>, kConfigL2T2},
{"L2T2_KEY_SHIFT", Create<ScalabilityStructureL2T2KeyShift>, kConfigL2T2},
{"L2T3_KEY", Create<ScalabilityStructureL2T3Key>, kConfigL2T3},
{"L3T1", Create<ScalabilityStructureL3T1>, kConfigL3T1},
{"L3T3", Create<ScalabilityStructureL3T3>, kConfigL3T3},
{"L3T3_KEY", Create<ScalabilityStructureL3T3Key>, kConfigL3T3},
{"S2T1", Create<ScalabilityStructureS2T1>, kConfigS2T1},
{"S3T3", Create<ScalabilityStructureS3T3>, kConfigS3T3},
{ScalabilityMode::kL1T1, Create<ScalableVideoControllerNoLayering>,
kConfigL1T1},
{ScalabilityMode::kL1T2, Create<ScalabilityStructureL1T2>, kConfigL1T2},
{ScalabilityMode::kL1T3, Create<ScalabilityStructureL1T3>, kConfigL1T3},
{ScalabilityMode::kL2T1, Create<ScalabilityStructureL2T1>, kConfigL2T1},
{ScalabilityMode::kL2T1h, CreateH<ScalabilityStructureL2T1>, kConfigL2T1h},
{ScalabilityMode::kL2T1_KEY, Create<ScalabilityStructureL2T1Key>,
kConfigL2T1},
{ScalabilityMode::kL2T2, Create<ScalabilityStructureL2T2>, kConfigL2T2},
{ScalabilityMode::kL2T2_KEY, Create<ScalabilityStructureL2T2Key>,
kConfigL2T2},
{ScalabilityMode::kL2T2_KEY_SHIFT, Create<ScalabilityStructureL2T2KeyShift>,
kConfigL2T2},
{ScalabilityMode::kL2T3_KEY, Create<ScalabilityStructureL2T3Key>,
kConfigL2T3},
{ScalabilityMode::kL3T1, Create<ScalabilityStructureL3T1>, kConfigL3T1},
{ScalabilityMode::kL3T3, Create<ScalabilityStructureL3T3>, kConfigL3T3},
{ScalabilityMode::kL3T3_KEY, Create<ScalabilityStructureL3T3Key>,
kConfigL3T3},
{ScalabilityMode::kS2T1, Create<ScalabilityStructureS2T1>, kConfigS2T1},
{ScalabilityMode::kS3T3, Create<ScalabilityStructureS3T3>, kConfigS3T3},
};
} // namespace
std::unique_ptr<ScalableVideoController> CreateScalabilityStructure(
absl::string_view name) {
RTC_DCHECK(!name.empty());
ScalabilityMode name) {
for (const auto& entry : kFactories) {
if (entry.name == name) {
return entry.factory();
@ -145,8 +150,7 @@ std::unique_ptr<ScalableVideoController> CreateScalabilityStructure(
}
absl::optional<ScalableVideoController::StreamLayersConfig>
ScalabilityStructureConfig(absl::string_view name) {
RTC_DCHECK(!name.empty());
ScalabilityStructureConfig(ScalabilityMode name) {
for (const auto& entry : kFactories) {
if (entry.name == name) {
return entry.config;