Add support for more scalability modes (1.5:1 resolution ratio).

Added modes:
- S2T1h
- S2T2h
- S2T3h
- S3T1h
- S3T2h
- S3T3h

Bug: webrtc:13960
Change-Id: I618a30c68b0ce1609847ee33a2298fe8fa0720c9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/273664
Reviewed-by: Florent Castelli <orphis@webrtc.org>
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Commit-Queue: Åsa Persson <asapersson@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37968}
This commit is contained in:
Åsa Persson
2022-08-31 09:46:41 +02:00
committed by WebRTC LUCI CQ
parent 74195b2b44
commit ecfe8da46b
8 changed files with 148 additions and 12 deletions

View File

@ -23,8 +23,13 @@ namespace webrtc {
// same temporal layering.
class ScalabilityStructureSimulcast : public ScalableVideoController {
public:
struct ScalingFactor {
int num = 1;
int den = 2;
};
ScalabilityStructureSimulcast(int num_spatial_layers,
int num_temporal_layers);
int num_temporal_layers,
ScalingFactor resolution_factor);
~ScalabilityStructureSimulcast() override;
StreamLayersConfig StreamConfig() const override;
@ -58,6 +63,7 @@ class ScalabilityStructureSimulcast : public ScalableVideoController {
const int num_spatial_layers_;
const int num_temporal_layers_;
const ScalingFactor resolution_factor_;
FramePattern last_pattern_ = kNone;
std::bitset<kMaxNumSpatialLayers> can_reference_t0_frame_for_spatial_id_ = 0;
@ -70,7 +76,8 @@ class ScalabilityStructureSimulcast : public ScalableVideoController {
// S0 0--0--0-
class ScalabilityStructureS2T1 : public ScalabilityStructureSimulcast {
public:
ScalabilityStructureS2T1() : ScalabilityStructureSimulcast(2, 1) {}
explicit ScalabilityStructureS2T1(ScalingFactor resolution_factor = {})
: ScalabilityStructureSimulcast(2, 1, resolution_factor) {}
~ScalabilityStructureS2T1() override = default;
FrameDependencyStructure DependencyStructure() const override;
@ -78,7 +85,8 @@ class ScalabilityStructureS2T1 : public ScalabilityStructureSimulcast {
class ScalabilityStructureS2T2 : public ScalabilityStructureSimulcast {
public:
ScalabilityStructureS2T2() : ScalabilityStructureSimulcast(2, 2) {}
explicit ScalabilityStructureS2T2(ScalingFactor resolution_factor = {})
: ScalabilityStructureSimulcast(2, 2, resolution_factor) {}
~ScalabilityStructureS2T2() override = default;
FrameDependencyStructure DependencyStructure() const override;
@ -98,7 +106,8 @@ class ScalabilityStructureS2T2 : public ScalabilityStructureSimulcast {
// Time-> 0 1 2 3 4
class ScalabilityStructureS2T3 : public ScalabilityStructureSimulcast {
public:
ScalabilityStructureS2T3() : ScalabilityStructureSimulcast(2, 3) {}
explicit ScalabilityStructureS2T3(ScalingFactor resolution_factor = {})
: ScalabilityStructureSimulcast(2, 3, resolution_factor) {}
~ScalabilityStructureS2T3() override = default;
FrameDependencyStructure DependencyStructure() const override;
@ -106,7 +115,8 @@ class ScalabilityStructureS2T3 : public ScalabilityStructureSimulcast {
class ScalabilityStructureS3T1 : public ScalabilityStructureSimulcast {
public:
ScalabilityStructureS3T1() : ScalabilityStructureSimulcast(3, 1) {}
explicit ScalabilityStructureS3T1(ScalingFactor resolution_factor = {})
: ScalabilityStructureSimulcast(3, 1, resolution_factor) {}
~ScalabilityStructureS3T1() override = default;
FrameDependencyStructure DependencyStructure() const override;
@ -114,7 +124,8 @@ class ScalabilityStructureS3T1 : public ScalabilityStructureSimulcast {
class ScalabilityStructureS3T2 : public ScalabilityStructureSimulcast {
public:
ScalabilityStructureS3T2() : ScalabilityStructureSimulcast(3, 2) {}
explicit ScalabilityStructureS3T2(ScalingFactor resolution_factor = {})
: ScalabilityStructureSimulcast(3, 2, resolution_factor) {}
~ScalabilityStructureS3T2() override = default;
FrameDependencyStructure DependencyStructure() const override;
@ -122,7 +133,8 @@ class ScalabilityStructureS3T2 : public ScalabilityStructureSimulcast {
class ScalabilityStructureS3T3 : public ScalabilityStructureSimulcast {
public:
ScalabilityStructureS3T3() : ScalabilityStructureSimulcast(3, 3) {}
explicit ScalabilityStructureS3T3(ScalingFactor resolution_factor = {})
: ScalabilityStructureSimulcast(3, 3, resolution_factor) {}
~ScalabilityStructureS3T3() override = default;
FrameDependencyStructure DependencyStructure() const override;