Embed FrameDependencyTemplate builder helpers directly into the struct
Bug: None Change-Id: I4c13bdabd08dd6a6011cb534c765c1dd09f218d1 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/176843 Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Björn Terelius <terelius@webrtc.org> Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org> Reviewed-by: Philip Eliasson <philipel@webrtc.org> Cr-Commit-Position: refs/heads/master@{#31500}
This commit is contained in:

committed by
Commit Bot

parent
f4a9991cce
commit
24263f4ffb
@ -43,16 +43,14 @@ ScalabilityStructureL1T2::StreamConfig() const {
|
||||
}
|
||||
|
||||
FrameDependencyStructure ScalabilityStructureL1T2::DependencyStructure() const {
|
||||
using Builder = GenericFrameInfo::Builder;
|
||||
FrameDependencyStructure structure;
|
||||
structure.num_decode_targets = 2;
|
||||
structure.num_chains = 1;
|
||||
structure.decode_target_protected_by_chain = {0, 0};
|
||||
structure.templates = {
|
||||
Builder().T(0).Dtis("SS").ChainDiffs({0}).Build(),
|
||||
Builder().T(0).Dtis("SS").ChainDiffs({2}).Fdiffs({2}).Build(),
|
||||
Builder().T(1).Dtis("-D").ChainDiffs({1}).Fdiffs({1}).Build(),
|
||||
};
|
||||
structure.templates.resize(3);
|
||||
structure.templates[0].T(0).Dtis("SS").ChainDiffs({0});
|
||||
structure.templates[1].T(0).Dtis("SS").ChainDiffs({2}).FrameDiffs({2});
|
||||
structure.templates[2].T(1).Dtis("-D").ChainDiffs({1}).FrameDiffs({1});
|
||||
return structure;
|
||||
}
|
||||
|
||||
|
@ -43,18 +43,16 @@ ScalabilityStructureL1T3::StreamConfig() const {
|
||||
}
|
||||
|
||||
FrameDependencyStructure ScalabilityStructureL1T3::DependencyStructure() const {
|
||||
using Builder = GenericFrameInfo::Builder;
|
||||
FrameDependencyStructure structure;
|
||||
structure.num_decode_targets = 3;
|
||||
structure.num_chains = 1;
|
||||
structure.decode_target_protected_by_chain = {0, 0, 0};
|
||||
structure.templates = {
|
||||
Builder().T(0).Dtis("SSS").ChainDiffs({0}).Build(),
|
||||
Builder().T(0).Dtis("SSS").ChainDiffs({4}).Fdiffs({4}).Build(),
|
||||
Builder().T(1).Dtis("-DS").ChainDiffs({2}).Fdiffs({2}).Build(),
|
||||
Builder().T(2).Dtis("--D").ChainDiffs({1}).Fdiffs({1}).Build(),
|
||||
Builder().T(2).Dtis("--D").ChainDiffs({3}).Fdiffs({1}).Build(),
|
||||
};
|
||||
structure.templates.resize(5);
|
||||
structure.templates[0].T(0).Dtis("SSS").ChainDiffs({0});
|
||||
structure.templates[1].T(0).Dtis("SSS").ChainDiffs({4}).FrameDiffs({4});
|
||||
structure.templates[2].T(1).Dtis("-DS").ChainDiffs({2}).FrameDiffs({2});
|
||||
structure.templates[3].T(2).Dtis("--D").ChainDiffs({1}).FrameDiffs({1});
|
||||
structure.templates[4].T(2).Dtis("--D").ChainDiffs({3}).FrameDiffs({1});
|
||||
return structure;
|
||||
}
|
||||
|
||||
|
@ -44,17 +44,15 @@ ScalabilityStructureL2T1::StreamConfig() const {
|
||||
}
|
||||
|
||||
FrameDependencyStructure ScalabilityStructureL2T1::DependencyStructure() const {
|
||||
using Builder = GenericFrameInfo::Builder;
|
||||
FrameDependencyStructure structure;
|
||||
structure.num_decode_targets = 2;
|
||||
structure.num_chains = 2;
|
||||
structure.decode_target_protected_by_chain = {0, 1};
|
||||
structure.templates = {
|
||||
Builder().S(0).Dtis("SR").Fdiffs({2}).ChainDiffs({2, 1}).Build(),
|
||||
Builder().S(0).Dtis("SS").ChainDiffs({0, 0}).Build(),
|
||||
Builder().S(1).Dtis("-R").Fdiffs({2, 1}).ChainDiffs({1, 1}).Build(),
|
||||
Builder().S(1).Dtis("-S").Fdiffs({1}).ChainDiffs({1, 1}).Build(),
|
||||
};
|
||||
structure.templates.resize(4);
|
||||
structure.templates[0].S(0).Dtis("SR").ChainDiffs({2, 1}).FrameDiffs({2});
|
||||
structure.templates[1].S(0).Dtis("SS").ChainDiffs({0, 0});
|
||||
structure.templates[2].S(1).Dtis("-R").ChainDiffs({1, 1}).FrameDiffs({2, 1});
|
||||
structure.templates[3].S(1).Dtis("-S").ChainDiffs({1, 1}).FrameDiffs({1});
|
||||
return structure;
|
||||
}
|
||||
|
||||
|
@ -43,17 +43,15 @@ ScalabilityStructureL2T1Key::StreamConfig() const {
|
||||
|
||||
FrameDependencyStructure ScalabilityStructureL2T1Key::DependencyStructure()
|
||||
const {
|
||||
using Builder = GenericFrameInfo::Builder;
|
||||
FrameDependencyStructure structure;
|
||||
structure.num_decode_targets = 2;
|
||||
structure.num_chains = 2;
|
||||
structure.decode_target_protected_by_chain = {0, 1};
|
||||
structure.templates = {
|
||||
Builder().S(0).Dtis("S-").Fdiffs({2}).ChainDiffs({2, 1}).Build(),
|
||||
Builder().S(0).Dtis("SS").ChainDiffs({0, 0}).Build(),
|
||||
Builder().S(1).Dtis("-S").Fdiffs({2}).ChainDiffs({1, 2}).Build(),
|
||||
Builder().S(1).Dtis("-S").Fdiffs({1}).ChainDiffs({1, 1}).Build(),
|
||||
};
|
||||
structure.templates.resize(4);
|
||||
structure.templates[0].S(0).Dtis("S-").ChainDiffs({2, 1}).FrameDiffs({2});
|
||||
structure.templates[1].S(0).Dtis("SS").ChainDiffs({0, 0});
|
||||
structure.templates[2].S(1).Dtis("-S").ChainDiffs({1, 2}).FrameDiffs({2});
|
||||
structure.templates[3].S(1).Dtis("-S").ChainDiffs({1, 1}).FrameDiffs({1});
|
||||
return structure;
|
||||
}
|
||||
|
||||
|
@ -48,31 +48,18 @@ ScalabilityStructureL2T2::StreamConfig() const {
|
||||
}
|
||||
|
||||
FrameDependencyStructure ScalabilityStructureL2T2::DependencyStructure() const {
|
||||
using Builder = GenericFrameInfo::Builder;
|
||||
FrameDependencyStructure structure;
|
||||
structure.num_decode_targets = 4;
|
||||
structure.num_chains = 2;
|
||||
structure.decode_target_protected_by_chain = {0, 0, 1, 1};
|
||||
structure.templates = {
|
||||
Builder().S(0).T(0).Dtis("SSSS").ChainDiffs({0, 0}).Build(),
|
||||
Builder().S(0).T(0).Dtis("SSRR").Fdiffs({4}).ChainDiffs({4, 3}).Build(),
|
||||
Builder().S(0).T(1).Dtis("-D-R").Fdiffs({2}).ChainDiffs({2, 1}).Build(),
|
||||
Builder().S(1).T(0).Dtis("--SS").Fdiffs({1}).ChainDiffs({1, 1}).Build(),
|
||||
Builder()
|
||||
.S(1)
|
||||
.T(0)
|
||||
.Dtis("--SS")
|
||||
.Fdiffs({4, 1})
|
||||
.ChainDiffs({1, 1})
|
||||
.Build(),
|
||||
Builder()
|
||||
.S(1)
|
||||
.T(1)
|
||||
.Dtis("---D")
|
||||
.Fdiffs({2, 1})
|
||||
.ChainDiffs({3, 2})
|
||||
.Build(),
|
||||
};
|
||||
structure.templates.resize(6);
|
||||
auto& templates = structure.templates;
|
||||
templates[0].S(0).T(0).Dtis("SSSS").ChainDiffs({0, 0});
|
||||
templates[1].S(0).T(0).Dtis("SSRR").ChainDiffs({4, 3}).FrameDiffs({4});
|
||||
templates[2].S(0).T(1).Dtis("-D-R").ChainDiffs({2, 1}).FrameDiffs({2});
|
||||
templates[3].S(1).T(0).Dtis("--SS").ChainDiffs({1, 1}).FrameDiffs({1});
|
||||
templates[4].S(1).T(0).Dtis("--SS").ChainDiffs({1, 1}).FrameDiffs({4, 1});
|
||||
templates[5].S(1).T(1).Dtis("---D").ChainDiffs({3, 2}).FrameDiffs({2, 1});
|
||||
return structure;
|
||||
}
|
||||
|
||||
|
@ -48,19 +48,18 @@ ScalabilityStructureL2T2Key::StreamConfig() const {
|
||||
|
||||
FrameDependencyStructure ScalabilityStructureL2T2Key::DependencyStructure()
|
||||
const {
|
||||
using Builder = GenericFrameInfo::Builder;
|
||||
FrameDependencyStructure structure;
|
||||
structure.num_decode_targets = 4;
|
||||
structure.num_chains = 2;
|
||||
structure.decode_target_protected_by_chain = {0, 0, 1, 1};
|
||||
structure.templates = {
|
||||
Builder().S(0).T(0).Dtis("SSSS").ChainDiffs({0, 0}).Build(),
|
||||
Builder().S(0).T(0).Dtis("SS--").Fdiffs({4}).ChainDiffs({4, 3}).Build(),
|
||||
Builder().S(0).T(1).Dtis("-D--").Fdiffs({2}).ChainDiffs({2, 1}).Build(),
|
||||
Builder().S(1).T(0).Dtis("--SS").Fdiffs({1}).ChainDiffs({1, 1}).Build(),
|
||||
Builder().S(1).T(0).Dtis("--SS").Fdiffs({4}).ChainDiffs({1, 4}).Build(),
|
||||
Builder().S(1).T(1).Dtis("---D").Fdiffs({2}).ChainDiffs({3, 2}).Build(),
|
||||
};
|
||||
structure.templates.resize(6);
|
||||
auto& templates = structure.templates;
|
||||
templates[0].S(0).T(0).Dtis("SSSS").ChainDiffs({0, 0});
|
||||
templates[1].S(0).T(0).Dtis("SS--").ChainDiffs({4, 3}).FrameDiffs({4});
|
||||
templates[2].S(0).T(1).Dtis("-D--").ChainDiffs({2, 1}).FrameDiffs({2});
|
||||
templates[3].S(1).T(0).Dtis("--SS").ChainDiffs({1, 1}).FrameDiffs({1});
|
||||
templates[4].S(1).T(0).Dtis("--SS").ChainDiffs({1, 4}).FrameDiffs({4});
|
||||
templates[5].S(1).T(1).Dtis("---D").ChainDiffs({3, 2}).FrameDiffs({2});
|
||||
return structure;
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,6 @@ constexpr auto kNotPresent = DecodeTargetIndication::kNotPresent;
|
||||
constexpr auto kDiscardable = DecodeTargetIndication::kDiscardable;
|
||||
constexpr auto kSwitch = DecodeTargetIndication::kSwitch;
|
||||
|
||||
// decode targets: S0T0, S0T1, S1T0, S1T1
|
||||
constexpr DecodeTargetIndication kDtis[6][4] = {
|
||||
{kSwitch, kSwitch, kSwitch, kSwitch}, // kKey, S0T0
|
||||
{kNotPresent, kNotPresent, kSwitch, kSwitch}, // kKey, S1T0
|
||||
@ -48,20 +47,19 @@ ScalabilityStructureL2T2KeyShift::StreamConfig() const {
|
||||
|
||||
FrameDependencyStructure ScalabilityStructureL2T2KeyShift::DependencyStructure()
|
||||
const {
|
||||
using Builder = GenericFrameInfo::Builder;
|
||||
FrameDependencyStructure structure;
|
||||
structure.num_decode_targets = 4;
|
||||
structure.num_chains = 2;
|
||||
structure.decode_target_protected_by_chain = {0, 0, 1, 1};
|
||||
structure.templates = {
|
||||
Builder().S(0).T(0).Dtis("SSSS").ChainDiffs({0, 0}).Build(),
|
||||
Builder().S(0).T(0).Dtis("SS--").Fdiffs({2}).ChainDiffs({2, 1}).Build(),
|
||||
Builder().S(0).T(0).Dtis("SS--").Fdiffs({4}).ChainDiffs({4, 1}).Build(),
|
||||
Builder().S(0).T(1).Dtis("-D--").Fdiffs({2}).ChainDiffs({2, 3}).Build(),
|
||||
Builder().S(1).T(0).Dtis("--SS").Fdiffs({1}).ChainDiffs({1, 1}).Build(),
|
||||
Builder().S(1).T(0).Dtis("--SS").Fdiffs({4}).ChainDiffs({3, 4}).Build(),
|
||||
Builder().S(1).T(1).Dtis("---D").Fdiffs({2}).ChainDiffs({1, 2}).Build(),
|
||||
};
|
||||
structure.templates.resize(7);
|
||||
auto& templates = structure.templates;
|
||||
templates[0].S(0).T(0).Dtis("SSSS").ChainDiffs({0, 0});
|
||||
templates[1].S(0).T(0).Dtis("SS--").ChainDiffs({2, 1}).FrameDiffs({2});
|
||||
templates[2].S(0).T(0).Dtis("SS--").ChainDiffs({4, 1}).FrameDiffs({4});
|
||||
templates[3].S(0).T(1).Dtis("-D--").ChainDiffs({2, 3}).FrameDiffs({2});
|
||||
templates[4].S(1).T(0).Dtis("--SS").ChainDiffs({1, 1}).FrameDiffs({1});
|
||||
templates[5].S(1).T(0).Dtis("--SS").ChainDiffs({3, 4}).FrameDiffs({4});
|
||||
templates[6].S(1).T(1).Dtis("---D").ChainDiffs({1, 2}).FrameDiffs({2});
|
||||
return structure;
|
||||
}
|
||||
|
||||
|
@ -45,19 +45,18 @@ ScalabilityStructureL3T1::StreamConfig() const {
|
||||
}
|
||||
|
||||
FrameDependencyStructure ScalabilityStructureL3T1::DependencyStructure() const {
|
||||
using Builder = GenericFrameInfo::Builder;
|
||||
FrameDependencyStructure structure;
|
||||
structure.num_decode_targets = 3;
|
||||
structure.num_chains = 3;
|
||||
structure.decode_target_protected_by_chain = {0, 1, 2};
|
||||
structure.templates = {
|
||||
Builder().S(0).Dtis("SRR").ChainDiffs({3, 2, 1}).Fdiffs({3}).Build(),
|
||||
Builder().S(0).Dtis("SSS").ChainDiffs({0, 0, 0}).Build(),
|
||||
Builder().S(1).Dtis("-SR").ChainDiffs({1, 1, 1}).Fdiffs({3, 1}).Build(),
|
||||
Builder().S(1).Dtis("-SS").ChainDiffs({1, 1, 1}).Fdiffs({1}).Build(),
|
||||
Builder().S(2).Dtis("--S").ChainDiffs({2, 1, 1}).Fdiffs({3, 1}).Build(),
|
||||
Builder().S(2).Dtis("--S").ChainDiffs({2, 1, 1}).Fdiffs({1}).Build(),
|
||||
};
|
||||
auto& templates = structure.templates;
|
||||
templates.resize(6);
|
||||
templates[0].S(0).Dtis("SRR").ChainDiffs({3, 2, 1}).FrameDiffs({3});
|
||||
templates[1].S(0).Dtis("SSS").ChainDiffs({0, 0, 0});
|
||||
templates[2].S(1).Dtis("-SR").ChainDiffs({1, 1, 1}).FrameDiffs({3, 1});
|
||||
templates[3].S(1).Dtis("-SS").ChainDiffs({1, 1, 1}).FrameDiffs({1});
|
||||
templates[4].S(2).Dtis("--S").ChainDiffs({2, 1, 1}).FrameDiffs({3, 1});
|
||||
templates[5].S(2).Dtis("--S").ChainDiffs({2, 1, 1}).FrameDiffs({1});
|
||||
return structure;
|
||||
}
|
||||
|
||||
|
@ -89,112 +89,31 @@ ScalabilityStructureL3T3::StreamConfig() const {
|
||||
}
|
||||
|
||||
FrameDependencyStructure ScalabilityStructureL3T3::DependencyStructure() const {
|
||||
using Builder = GenericFrameInfo::Builder;
|
||||
FrameDependencyStructure structure;
|
||||
structure.num_decode_targets = 9;
|
||||
structure.num_chains = 3;
|
||||
structure.decode_target_protected_by_chain = {0, 0, 0, 1, 1, 1, 2, 2, 2};
|
||||
structure.templates = {
|
||||
Builder().S(0).T(0).Dtis("SSSSSSSSS").ChainDiffs({0, 0, 0}).Build(),
|
||||
Builder()
|
||||
.S(0)
|
||||
.T(0)
|
||||
.Dtis("SSSRRRRRR")
|
||||
.Fdiffs({12})
|
||||
.ChainDiffs({12, 11, 10})
|
||||
.Build(),
|
||||
Builder()
|
||||
.S(0)
|
||||
.T(1)
|
||||
.Dtis("-DS-RR-RR")
|
||||
.Fdiffs({6})
|
||||
.ChainDiffs({6, 5, 4})
|
||||
.Build(),
|
||||
Builder()
|
||||
.S(0)
|
||||
.T(2)
|
||||
.Dtis("--D--R--R")
|
||||
.Fdiffs({3})
|
||||
.ChainDiffs({3, 2, 1})
|
||||
.Build(),
|
||||
Builder()
|
||||
.S(0)
|
||||
.T(2)
|
||||
.Dtis("--D--R--R")
|
||||
.Fdiffs({3})
|
||||
.ChainDiffs({9, 8, 7})
|
||||
.Build(),
|
||||
Builder()
|
||||
.S(1)
|
||||
.T(0)
|
||||
.Dtis("---SSSSSS")
|
||||
.Fdiffs({1})
|
||||
.ChainDiffs({1, 1, 1})
|
||||
.Build(),
|
||||
Builder()
|
||||
.S(1)
|
||||
.T(0)
|
||||
.Dtis("---SSSRRR")
|
||||
.Fdiffs({12, 1})
|
||||
.ChainDiffs({1, 1, 1})
|
||||
.Build(),
|
||||
Builder()
|
||||
.S(1)
|
||||
.T(1)
|
||||
.Dtis("----DS-RR")
|
||||
.Fdiffs({6, 1})
|
||||
.ChainDiffs({7, 6, 5})
|
||||
.Build(),
|
||||
Builder()
|
||||
.S(1)
|
||||
.T(2)
|
||||
.Dtis("-----D--R")
|
||||
.Fdiffs({3, 1})
|
||||
.ChainDiffs({4, 3, 2})
|
||||
.Build(),
|
||||
Builder()
|
||||
.S(1)
|
||||
.T(2)
|
||||
.Dtis("-----D--R")
|
||||
.Fdiffs({3, 1})
|
||||
.ChainDiffs({10, 9, 8})
|
||||
.Build(),
|
||||
Builder()
|
||||
.S(2)
|
||||
.T(0)
|
||||
.Dtis("------SSS")
|
||||
.Fdiffs({1})
|
||||
.ChainDiffs({2, 1, 1})
|
||||
.Build(),
|
||||
Builder()
|
||||
.S(2)
|
||||
.T(0)
|
||||
.Dtis("------SSS")
|
||||
.Fdiffs({12, 1})
|
||||
.ChainDiffs({2, 1, 1})
|
||||
.Build(),
|
||||
Builder()
|
||||
.S(2)
|
||||
.T(1)
|
||||
.Dtis("-------DS")
|
||||
.Fdiffs({6, 1})
|
||||
.ChainDiffs({8, 7, 6})
|
||||
.Build(),
|
||||
Builder()
|
||||
.S(2)
|
||||
.T(2)
|
||||
.Dtis("--------D")
|
||||
.Fdiffs({3, 1})
|
||||
.ChainDiffs({5, 4, 3})
|
||||
.Build(),
|
||||
Builder()
|
||||
.S(2)
|
||||
.T(2)
|
||||
.Dtis("--------D")
|
||||
.Fdiffs({3, 1})
|
||||
.ChainDiffs({11, 10, 9})
|
||||
.Build(),
|
||||
};
|
||||
auto& t = structure.templates;
|
||||
t.resize(15);
|
||||
// Templates are shown in the order frames following them appear in the
|
||||
// stream, but in `structure.templates` array templates are sorted by
|
||||
// (`spatial_id`, `temporal_id`) since that is a dependency descriptor
|
||||
// requirement. Indexes are written in hex for nicer alignment.
|
||||
t[0x1].S(0).T(0).Dtis("SSSSSSSSS").ChainDiffs({0, 0, 0});
|
||||
t[0x6].S(1).T(0).Dtis("---SSSSSS").ChainDiffs({1, 1, 1}).FrameDiffs({1});
|
||||
t[0xB].S(2).T(0).Dtis("------SSS").ChainDiffs({2, 1, 1}).FrameDiffs({1});
|
||||
t[0x3].S(0).T(2).Dtis("--D--R--R").ChainDiffs({3, 2, 1}).FrameDiffs({3});
|
||||
t[0x8].S(1).T(2).Dtis("-----D--R").ChainDiffs({4, 3, 2}).FrameDiffs({3, 1});
|
||||
t[0xD].S(2).T(2).Dtis("--------D").ChainDiffs({5, 4, 3}).FrameDiffs({3, 1});
|
||||
t[0x2].S(0).T(1).Dtis("-DS-RR-RR").ChainDiffs({6, 5, 4}).FrameDiffs({6});
|
||||
t[0x7].S(1).T(1).Dtis("----DS-RR").ChainDiffs({7, 6, 5}).FrameDiffs({6, 1});
|
||||
t[0xC].S(2).T(1).Dtis("-------DS").ChainDiffs({8, 7, 6}).FrameDiffs({6, 1});
|
||||
t[0x4].S(0).T(2).Dtis("--D--R--R").ChainDiffs({9, 8, 7}).FrameDiffs({3});
|
||||
t[0x9].S(1).T(2).Dtis("-----D--R").ChainDiffs({10, 9, 8}).FrameDiffs({3, 1});
|
||||
t[0xE].S(2).T(2).Dtis("--------D").ChainDiffs({11, 10, 9}).FrameDiffs({3, 1});
|
||||
t[0x0].S(0).T(0).Dtis("SSSRRRRRR").ChainDiffs({12, 11, 10}).FrameDiffs({12});
|
||||
t[0x5].S(1).T(0).Dtis("---SSSRRR").ChainDiffs({1, 1, 1}).FrameDiffs({12, 1});
|
||||
t[0xA].S(2).T(0).Dtis("------SSS").ChainDiffs({2, 1, 1}).FrameDiffs({12, 1});
|
||||
return structure;
|
||||
}
|
||||
|
||||
|
@ -41,17 +41,15 @@ ScalabilityStructureS2T1::StreamConfig() const {
|
||||
}
|
||||
|
||||
FrameDependencyStructure ScalabilityStructureS2T1::DependencyStructure() const {
|
||||
using Builder = GenericFrameInfo::Builder;
|
||||
FrameDependencyStructure structure;
|
||||
structure.num_decode_targets = 2;
|
||||
structure.num_chains = 2;
|
||||
structure.decode_target_protected_by_chain = {0, 1};
|
||||
structure.templates = {
|
||||
Builder().S(0).Dtis("S-").Fdiffs({2}).ChainDiffs({2, 1}).Build(),
|
||||
Builder().S(0).Dtis("S-").ChainDiffs({0, 0}).Build(),
|
||||
Builder().S(1).Dtis("-S").Fdiffs({2}).ChainDiffs({1, 2}).Build(),
|
||||
Builder().S(1).Dtis("-S").ChainDiffs({1, 0}).Build(),
|
||||
};
|
||||
structure.templates.resize(4);
|
||||
structure.templates[0].S(0).Dtis("S-").ChainDiffs({2, 1}).FrameDiffs({2});
|
||||
structure.templates[1].S(0).Dtis("S-").ChainDiffs({0, 0});
|
||||
structure.templates[2].S(1).Dtis("-S").ChainDiffs({1, 2}).FrameDiffs({2});
|
||||
structure.templates[3].S(1).Dtis("-S").ChainDiffs({1, 0});
|
||||
return structure;
|
||||
}
|
||||
|
||||
|
@ -608,58 +608,52 @@ FrameDependencyStructure DefaultTemporalLayers::GetTemplateStructure(
|
||||
FrameDependencyStructure template_structure;
|
||||
template_structure.num_decode_targets = num_layers;
|
||||
|
||||
using Builder = GenericFrameInfo::Builder;
|
||||
switch (num_layers) {
|
||||
case 1: {
|
||||
template_structure.templates = {
|
||||
Builder().T(0).Dtis("S").Build(),
|
||||
Builder().T(0).Dtis("S").Fdiffs({1}).Build(),
|
||||
};
|
||||
template_structure.templates.resize(2);
|
||||
template_structure.templates[0].T(0).Dtis("S");
|
||||
template_structure.templates[1].T(0).Dtis("S").FrameDiffs({1});
|
||||
return template_structure;
|
||||
}
|
||||
case 2: {
|
||||
template_structure.templates = {
|
||||
Builder().T(0).Dtis("SS").Build(),
|
||||
Builder().T(0).Dtis("SS").Fdiffs({2}).Build(),
|
||||
Builder().T(0).Dtis("SR").Fdiffs({2}).Build(),
|
||||
Builder().T(1).Dtis("-S").Fdiffs({1}).Build(),
|
||||
Builder().T(1).Dtis("-D").Fdiffs({1, 2}).Build(),
|
||||
};
|
||||
template_structure.templates.resize(5);
|
||||
template_structure.templates[0].T(0).Dtis("SS");
|
||||
template_structure.templates[1].T(0).Dtis("SS").FrameDiffs({2});
|
||||
template_structure.templates[2].T(0).Dtis("SR").FrameDiffs({2});
|
||||
template_structure.templates[3].T(1).Dtis("-S").FrameDiffs({1});
|
||||
template_structure.templates[4].T(1).Dtis("-D").FrameDiffs({2, 1});
|
||||
return template_structure;
|
||||
}
|
||||
case 3: {
|
||||
if (field_trial::IsEnabled("WebRTC-UseShortVP8TL3Pattern")) {
|
||||
template_structure.templates = {
|
||||
Builder().T(0).Dtis("SSS").Build(),
|
||||
Builder().T(0).Dtis("SSS").Fdiffs({4}).Build(),
|
||||
Builder().T(1).Dtis("-DR").Fdiffs({2}).Build(),
|
||||
Builder().T(2).Dtis("--S").Fdiffs({1}).Build(),
|
||||
Builder().T(2).Dtis("--D").Fdiffs({1, 2}).Build(),
|
||||
};
|
||||
template_structure.templates.resize(5);
|
||||
template_structure.templates[0].T(0).Dtis("SSS");
|
||||
template_structure.templates[1].T(0).Dtis("SSS").FrameDiffs({4});
|
||||
template_structure.templates[2].T(1).Dtis("-DR").FrameDiffs({2});
|
||||
template_structure.templates[3].T(2).Dtis("--S").FrameDiffs({1});
|
||||
template_structure.templates[4].T(2).Dtis("--D").FrameDiffs({2, 1});
|
||||
} else {
|
||||
template_structure.templates = {
|
||||
Builder().T(0).Dtis("SSS").Build(),
|
||||
Builder().T(0).Dtis("SSS").Fdiffs({4}).Build(),
|
||||
Builder().T(0).Dtis("SRR").Fdiffs({4}).Build(),
|
||||
Builder().T(1).Dtis("-SS").Fdiffs({2}).Build(),
|
||||
Builder().T(1).Dtis("-DS").Fdiffs({2, 4}).Build(),
|
||||
Builder().T(2).Dtis("--D").Fdiffs({1}).Build(),
|
||||
Builder().T(2).Dtis("--D").Fdiffs({1, 3}).Build(),
|
||||
};
|
||||
template_structure.templates.resize(7);
|
||||
template_structure.templates[0].T(0).Dtis("SSS");
|
||||
template_structure.templates[1].T(0).Dtis("SSS").FrameDiffs({4});
|
||||
template_structure.templates[2].T(0).Dtis("SRR").FrameDiffs({4});
|
||||
template_structure.templates[3].T(1).Dtis("-SS").FrameDiffs({2});
|
||||
template_structure.templates[4].T(1).Dtis("-DS").FrameDiffs({4, 2});
|
||||
template_structure.templates[5].T(2).Dtis("--D").FrameDiffs({1});
|
||||
template_structure.templates[6].T(2).Dtis("--D").FrameDiffs({3, 1});
|
||||
}
|
||||
return template_structure;
|
||||
}
|
||||
case 4: {
|
||||
template_structure.templates = {
|
||||
Builder().T(0).Dtis("SSSS").Build(),
|
||||
Builder().T(0).Dtis("SSSS").Fdiffs({8}).Build(),
|
||||
Builder().T(1).Dtis("-SRR").Fdiffs({4}).Build(),
|
||||
Builder().T(1).Dtis("-SRR").Fdiffs({4, 8}).Build(),
|
||||
Builder().T(2).Dtis("--SR").Fdiffs({2}).Build(),
|
||||
Builder().T(2).Dtis("--SR").Fdiffs({2, 4}).Build(),
|
||||
Builder().T(3).Dtis("---D").Fdiffs({1}).Build(),
|
||||
Builder().T(3).Dtis("---D").Fdiffs({1, 3}).Build(),
|
||||
};
|
||||
template_structure.templates.resize(8);
|
||||
template_structure.templates[0].T(0).Dtis("SSSS");
|
||||
template_structure.templates[1].T(0).Dtis("SSSS").FrameDiffs({8});
|
||||
template_structure.templates[2].T(1).Dtis("-SRR").FrameDiffs({4});
|
||||
template_structure.templates[3].T(1).Dtis("-SRR").FrameDiffs({4, 8});
|
||||
template_structure.templates[4].T(2).Dtis("--SR").FrameDiffs({2});
|
||||
template_structure.templates[5].T(2).Dtis("--SR").FrameDiffs({2, 4});
|
||||
template_structure.templates[6].T(3).Dtis("---D").FrameDiffs({1});
|
||||
template_structure.templates[7].T(3).Dtis("---D").FrameDiffs({1, 3});
|
||||
return template_structure;
|
||||
}
|
||||
default:
|
||||
|
@ -75,7 +75,7 @@ class DefaultTemporalLayers final : public Vp8FrameBufferController {
|
||||
DependencyInfo(absl::string_view indication_symbols,
|
||||
Vp8FrameConfig frame_config)
|
||||
: decode_target_indications(
|
||||
GenericFrameInfo::DecodeTargetInfo(indication_symbols)),
|
||||
webrtc_impl::StringToDecodeTargetIndications(indication_symbols)),
|
||||
frame_config(frame_config) {}
|
||||
|
||||
absl::InlinedVector<DecodeTargetIndication, 10> decode_target_indications;
|
||||
|
@ -36,6 +36,7 @@ constexpr int kMinTimeBetweenSyncs = kOneSecond90Khz * 2;
|
||||
constexpr int kMaxTimeBetweenSyncs = kOneSecond90Khz * 4;
|
||||
constexpr int kQpDeltaThresholdForSync = 8;
|
||||
constexpr int kMinBitrateKbpsForQpBoost = 500;
|
||||
constexpr auto kSwitch = DecodeTargetIndication::kSwitch;
|
||||
} // namespace
|
||||
|
||||
const double ScreenshareLayers::kMaxTL0FpsReduction = 2.5;
|
||||
@ -319,8 +320,7 @@ void ScreenshareLayers::OnEncodeDone(size_t stream_index,
|
||||
if (number_of_temporal_layers_ == 1) {
|
||||
vp8_info.temporalIdx = kNoTemporalIdx;
|
||||
vp8_info.layerSync = false;
|
||||
generic_frame_info.decode_target_indications =
|
||||
GenericFrameInfo::DecodeTargetInfo("S");
|
||||
generic_frame_info.decode_target_indications = {kSwitch};
|
||||
generic_frame_info.encoder_buffers.emplace_back(
|
||||
0, /*referenced=*/!is_keyframe, /*updated=*/true);
|
||||
} else {
|
||||
@ -344,8 +344,7 @@ void ScreenshareLayers::OnEncodeDone(size_t stream_index,
|
||||
active_layer_ = 1;
|
||||
info->template_structure =
|
||||
GetTemplateStructure(number_of_temporal_layers_);
|
||||
generic_frame_info.decode_target_indications =
|
||||
GenericFrameInfo::DecodeTargetInfo("SS");
|
||||
generic_frame_info.decode_target_indications = {kSwitch, kSwitch};
|
||||
} else if (active_layer_ >= 0 && layers_[active_layer_].state ==
|
||||
TemporalLayer::State::kKeyFrame) {
|
||||
layers_[active_layer_].state = TemporalLayer::State::kNormal;
|
||||
@ -429,21 +428,18 @@ FrameDependencyStructure ScreenshareLayers::GetTemplateStructure(
|
||||
FrameDependencyStructure template_structure;
|
||||
template_structure.num_decode_targets = num_layers;
|
||||
|
||||
using Builder = GenericFrameInfo::Builder;
|
||||
switch (num_layers) {
|
||||
case 1: {
|
||||
template_structure.templates = {
|
||||
Builder().T(0).Dtis("S").Build(),
|
||||
Builder().T(0).Dtis("S").Fdiffs({1}).Build(),
|
||||
};
|
||||
template_structure.templates.resize(2);
|
||||
template_structure.templates[0].T(0).Dtis("S");
|
||||
template_structure.templates[1].T(0).Dtis("S").FrameDiffs({1});
|
||||
return template_structure;
|
||||
}
|
||||
case 2: {
|
||||
template_structure.templates = {
|
||||
Builder().T(0).Dtis("SS").Build(),
|
||||
Builder().T(0).Dtis("SS").Fdiffs({1}).Build(),
|
||||
Builder().T(1).Dtis("-S").Fdiffs({1}).Build(),
|
||||
};
|
||||
template_structure.templates.resize(3);
|
||||
template_structure.templates[0].T(0).Dtis("SS");
|
||||
template_structure.templates[1].T(0).Dtis("SS").FrameDiffs({1});
|
||||
template_structure.templates[2].T(1).Dtis("-S").FrameDiffs({1});
|
||||
return template_structure;
|
||||
}
|
||||
default:
|
||||
|
@ -78,7 +78,7 @@ class ScreenshareLayers final : public Vp8FrameBufferController {
|
||||
DependencyInfo(absl::string_view indication_symbols,
|
||||
Vp8FrameConfig frame_config)
|
||||
: decode_target_indications(
|
||||
GenericFrameInfo::DecodeTargetInfo(indication_symbols)),
|
||||
webrtc_impl::StringToDecodeTargetIndications(indication_symbols)),
|
||||
frame_config(frame_config) {}
|
||||
|
||||
absl::InlinedVector<DecodeTargetIndication, 10> decode_target_indications;
|
||||
|
Reference in New Issue
Block a user