mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 05:40:42 +01:00
Delete field trial WebRTC-UseShortVP8TL3Pattern as unused
Bug: webrtc:11503 Change-Id: I38cce7811fc2aa6db9d5bbd40a2c6b586fe30a77 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/347660 Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Cr-Commit-Position: refs/heads/main@{#42099}
This commit is contained in:
parent
44ab20021d
commit
93453f5b19
6 changed files with 29 additions and 457 deletions
|
@ -775,9 +775,6 @@ POLICY_EXEMPT_FIELD_TRIALS: FrozenSet[FieldTrial] = frozenset([
|
|||
FieldTrial('WebRTC-UseDifferentiatedCellularCosts',
|
||||
'webrtc:11473',
|
||||
date(2024, 4, 1)),
|
||||
FieldTrial('WebRTC-UseShortVP8TL3Pattern',
|
||||
'webrtc:8162',
|
||||
INDEFINITE),
|
||||
FieldTrial('WebRTC-UseStandardBytesStats',
|
||||
'webrtc:10525',
|
||||
date(2024, 4, 1)),
|
||||
|
@ -893,7 +890,7 @@ POLICY_EXEMPT_FIELD_TRIALS: FrozenSet[FieldTrial] = frozenset([
|
|||
]) # yapf: disable
|
||||
|
||||
POLICY_EXEMPT_FIELD_TRIALS_DIGEST: str = \
|
||||
'ac66aba5d08866be534a452b59c3de627bf38f3e'
|
||||
'5690e723f0ca378ceb708e02bf2334327c0f64b6'
|
||||
|
||||
REGISTERED_FIELD_TRIALS: FrozenSet[FieldTrial] = ACTIVE_FIELD_TRIALS.union(
|
||||
POLICY_EXEMPT_FIELD_TRIALS)
|
||||
|
|
|
@ -634,7 +634,6 @@ rtc_library("webrtc_vp8_temporal_layers") {
|
|||
"../../rtc_base:rate_statistics",
|
||||
"../../rtc_base:rtc_numerics",
|
||||
"../../rtc_base:timeutils",
|
||||
"../../system_wrappers:field_trial",
|
||||
"../../system_wrappers:metrics",
|
||||
]
|
||||
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
#include "rtc_base/arraysize.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/logging.h"
|
||||
#include "system_wrappers/include/field_trial.h"
|
||||
|
||||
namespace webrtc {
|
||||
DefaultTemporalLayers::PendingFrame::PendingFrame() = default;
|
||||
|
@ -149,34 +148,6 @@ DefaultTemporalLayers::GetDependencyInfo(size_t num_layers) {
|
|||
{"SR", {kReferenceAndUpdate, kNone, kNone}},
|
||||
{"-D", {kReference, kReference, kNone, kFreezeEntropy}}};
|
||||
case 3:
|
||||
if (field_trial::IsEnabled("WebRTC-UseShortVP8TL3Pattern")) {
|
||||
// This field trial is intended to check if it is worth using a shorter
|
||||
// temporal pattern, trading some coding efficiency for less risk of
|
||||
// dropped frames.
|
||||
// The coding efficiency will decrease somewhat since the higher layer
|
||||
// state is more volatile, but it will be offset slightly by updating
|
||||
// the altref buffer with TL2 frames, instead of just referencing lower
|
||||
// layers.
|
||||
// If a frame is dropped in a higher layer, the jitter
|
||||
// buffer on the receive side won't be able to decode any higher layer
|
||||
// frame until the next sync frame. So we expect a noticeable decrease
|
||||
// in frame drops on links with high packet loss.
|
||||
|
||||
// TL0 references and updates the 'last' buffer.
|
||||
// TL1 references 'last' and references and updates 'golden'.
|
||||
// TL2 references both 'last' & 'golden' and references and updates
|
||||
// 'arf'.
|
||||
// 2-------2 2-------2 2
|
||||
// / __/ / __/ /
|
||||
// / __1 / __1 /
|
||||
// /___/ /___/ /
|
||||
// 0---------------0---------------0-----
|
||||
// 0 1 2 3 4 5 6 7 8 9 ...
|
||||
return {{"SSS", {kReferenceAndUpdate, kNone, kNone}},
|
||||
{"--S", {kReference, kNone, kUpdate}},
|
||||
{"-DR", {kReference, kUpdate, kNone}},
|
||||
{"--D", {kReference, kReference, kReference, kFreezeEntropy}}};
|
||||
} else {
|
||||
// All layers can reference but not update the 'alt' buffer, this means
|
||||
// that the 'alt' buffer reference is effectively the last keyframe.
|
||||
// TL0 also references and updates the 'last' buffer.
|
||||
|
@ -196,7 +167,6 @@ DefaultTemporalLayers::GetDependencyInfo(size_t num_layers) {
|
|||
{"--D", {kReference, kReference, kNone, kFreezeEntropy}},
|
||||
{"-DS", {kReference, kReferenceAndUpdate, kNone}},
|
||||
{"--D", {kReference, kReference, kNone, kFreezeEntropy}}};
|
||||
}
|
||||
case 4:
|
||||
// TL0 references and updates only the 'last' buffer.
|
||||
// TL1 references 'last' and updates and references 'golden'.
|
||||
|
@ -646,14 +616,6 @@ FrameDependencyStructure DefaultTemporalLayers::GetTemplateStructure(
|
|||
return template_structure;
|
||||
}
|
||||
case 3: {
|
||||
if (field_trial::IsEnabled("WebRTC-UseShortVP8TL3Pattern")) {
|
||||
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.resize(7);
|
||||
template_structure.templates[0].T(0).Dtis("SSS");
|
||||
template_structure.templates[1].T(0).Dtis("SSS").FrameDiffs({4});
|
||||
|
@ -662,7 +624,6 @@ FrameDependencyStructure DefaultTemporalLayers::GetTemplateStructure(
|
|||
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: {
|
||||
|
@ -694,11 +655,7 @@ std::vector<std::set<uint8_t>> GetTemporalDependencies(
|
|||
case 2:
|
||||
return {{2}, {0}, {0}, {1, 2}};
|
||||
case 3:
|
||||
if (field_trial::IsEnabled("WebRTC-UseShortVP8TL3Pattern")) {
|
||||
return {{0}, {0}, {0}, {0, 1, 2}};
|
||||
} else {
|
||||
return {{4}, {0}, {0}, {0, 2}, {0}, {2, 4}, {2, 4}, {4, 6}};
|
||||
}
|
||||
case 4:
|
||||
return {{8}, {0}, {0}, {0, 2},
|
||||
{0}, {0, 2, 4}, {0, 2, 4}, {0, 4, 6},
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
#include "modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h"
|
||||
#include "modules/video_coding/include/video_codec_interface.h"
|
||||
#include "modules/video_coding/utility/simulcast_rate_allocator.h"
|
||||
#include "test/field_trial.h"
|
||||
#include "test/gmock.h"
|
||||
#include "test/gtest.h"
|
||||
#include "vpx/vp8cx.h"
|
||||
|
@ -226,221 +225,6 @@ TEST_F(TemporalLayersTest, 3Layers) {
|
|||
}
|
||||
}
|
||||
|
||||
TEST_F(TemporalLayersTest, Alternative3Layers) {
|
||||
constexpr int kNumLayers = 3;
|
||||
ScopedFieldTrials field_trial("WebRTC-UseShortVP8TL3Pattern/Enabled/");
|
||||
DefaultTemporalLayers tl(kNumLayers);
|
||||
DefaultTemporalLayersChecker checker(kNumLayers);
|
||||
tl.OnRatesUpdated(0,
|
||||
GetTemporalLayerRates(kDefaultBytesPerFrame,
|
||||
kDefaultFramerate, kNumLayers),
|
||||
kDefaultFramerate);
|
||||
tl.UpdateConfiguration(0);
|
||||
|
||||
int expected_flags[8] = {kTemporalUpdateLast,
|
||||
kTemporalUpdateAltrefWithoutDependency,
|
||||
kTemporalUpdateGoldenWithoutDependency,
|
||||
kTemporalUpdateNone,
|
||||
kTemporalUpdateLast,
|
||||
kTemporalUpdateAltrefWithoutDependency,
|
||||
kTemporalUpdateGoldenWithoutDependency,
|
||||
kTemporalUpdateNone};
|
||||
int expected_temporal_idx[8] = {0, 2, 1, 2, 0, 2, 1, 2};
|
||||
|
||||
bool expected_layer_sync[8] = {false, true, true, false,
|
||||
false, true, true, false};
|
||||
|
||||
unsigned int timestamp = 0;
|
||||
for (int i = 0; i < 8; ++i) {
|
||||
const bool is_keyframe = (i == 0);
|
||||
CodecSpecificInfo info;
|
||||
Vp8FrameConfig tl_config = tl.NextFrameConfig(0, timestamp);
|
||||
EXPECT_EQ(is_keyframe ? kKeyFrameFlags : expected_flags[i],
|
||||
LibvpxVp8Encoder::EncodeFlags(tl_config))
|
||||
<< i;
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, is_keyframe,
|
||||
kDefaultQp, &info);
|
||||
EXPECT_TRUE(checker.CheckTemporalConfig(is_keyframe, tl_config));
|
||||
EXPECT_EQ(expected_temporal_idx[i], info.codecSpecific.VP8.temporalIdx);
|
||||
EXPECT_EQ(expected_temporal_idx[i], tl_config.packetizer_temporal_idx);
|
||||
EXPECT_EQ(expected_temporal_idx[i], tl_config.encoder_layer_id);
|
||||
EXPECT_EQ(is_keyframe || expected_layer_sync[i],
|
||||
info.codecSpecific.VP8.layerSync);
|
||||
EXPECT_EQ(expected_layer_sync[i], tl_config.layer_sync);
|
||||
timestamp += 3000;
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(TemporalLayersTest, SearchOrder) {
|
||||
constexpr int kNumLayers = 3;
|
||||
ScopedFieldTrials field_trial("WebRTC-UseShortVP8TL3Pattern/Enabled/");
|
||||
DefaultTemporalLayers tl(kNumLayers);
|
||||
DefaultTemporalLayersChecker checker(kNumLayers);
|
||||
tl.OnRatesUpdated(0,
|
||||
GetTemporalLayerRates(kDefaultBytesPerFrame,
|
||||
kDefaultFramerate, kNumLayers),
|
||||
kDefaultFramerate);
|
||||
tl.UpdateConfiguration(0);
|
||||
|
||||
// Use a repeating pattern of tl 0, 2, 1, 2.
|
||||
// Tl 0, 1, 2 update last, golden, altref respectively.
|
||||
|
||||
// Start with a key-frame. tl_config flags can be ignored.
|
||||
uint32_t timestamp = 0;
|
||||
Vp8FrameConfig tl_config = tl.NextFrameConfig(0, timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, true, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
|
||||
// TL2 frame. First one only references TL0. Updates altref.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, false, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
EXPECT_EQ(tl_config.first_reference, Vp8BufferReference::kLast);
|
||||
EXPECT_EQ(tl_config.second_reference, Vp8BufferReference::kNone);
|
||||
|
||||
// TL1 frame. Can only reference TL0. Updated golden.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, false, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
EXPECT_EQ(tl_config.first_reference, Vp8BufferReference::kLast);
|
||||
EXPECT_EQ(tl_config.second_reference, Vp8BufferReference::kNone);
|
||||
|
||||
// TL2 frame. Can reference all three buffers. Golden was the last to be
|
||||
// updated, the next to last was altref.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, false, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
EXPECT_EQ(tl_config.first_reference, Vp8BufferReference::kGolden);
|
||||
EXPECT_EQ(tl_config.second_reference, Vp8BufferReference::kAltref);
|
||||
}
|
||||
|
||||
TEST_F(TemporalLayersTest, SearchOrderWithDrop) {
|
||||
constexpr int kNumLayers = 3;
|
||||
ScopedFieldTrials field_trial("WebRTC-UseShortVP8TL3Pattern/Enabled/");
|
||||
DefaultTemporalLayers tl(kNumLayers);
|
||||
DefaultTemporalLayersChecker checker(kNumLayers);
|
||||
tl.OnRatesUpdated(0,
|
||||
GetTemporalLayerRates(kDefaultBytesPerFrame,
|
||||
kDefaultFramerate, kNumLayers),
|
||||
kDefaultFramerate);
|
||||
tl.UpdateConfiguration(0);
|
||||
|
||||
// Use a repeating pattern of tl 0, 2, 1, 2.
|
||||
// Tl 0, 1, 2 update last, golden, altref respectively.
|
||||
|
||||
// Start with a key-frame. tl_config flags can be ignored.
|
||||
uint32_t timestamp = 0;
|
||||
Vp8FrameConfig tl_config = tl.NextFrameConfig(0, timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, true, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
|
||||
// TL2 frame. First one only references TL0. Updates altref.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, false, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
EXPECT_EQ(tl_config.first_reference, Vp8BufferReference::kLast);
|
||||
EXPECT_EQ(tl_config.second_reference, Vp8BufferReference::kNone);
|
||||
|
||||
// Dropped TL1 frame. Can only reference TL0. Should have updated golden.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, 0, false, 0, nullptr);
|
||||
|
||||
// TL2 frame. Can normally reference all three buffers, but golden has not
|
||||
// been populated this cycle. Altref was last to be updated, before that last.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, false, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
EXPECT_EQ(tl_config.first_reference, Vp8BufferReference::kAltref);
|
||||
EXPECT_EQ(tl_config.second_reference, Vp8BufferReference::kLast);
|
||||
}
|
||||
|
||||
TEST_F(TemporalLayersTest, DoesNotReferenceDroppedFrames) {
|
||||
constexpr int kNumLayers = 3;
|
||||
// Use a repeating pattern of tl 0, 2, 1, 2.
|
||||
// Tl 0, 1, 2 update last, golden, altref respectively.
|
||||
ScopedFieldTrials field_trial("WebRTC-UseShortVP8TL3Pattern/Enabled/");
|
||||
DefaultTemporalLayers tl(kNumLayers);
|
||||
DefaultTemporalLayersChecker checker(kNumLayers);
|
||||
tl.OnRatesUpdated(0,
|
||||
GetTemporalLayerRates(kDefaultBytesPerFrame,
|
||||
kDefaultFramerate, kNumLayers),
|
||||
kDefaultFramerate);
|
||||
tl.UpdateConfiguration(0);
|
||||
|
||||
// Start with a keyframe.
|
||||
uint32_t timestamp = 0;
|
||||
Vp8FrameConfig tl_config = tl.NextFrameConfig(0, timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, true, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
|
||||
// Dropped TL2 frame.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, 0, false, 0, nullptr);
|
||||
|
||||
// Dropped TL1 frame.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, 0, false, 0, nullptr);
|
||||
|
||||
// TL2 frame. Can reference all three buffers, valid since golden and altref
|
||||
// both contain the last keyframe.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, false, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
EXPECT_TRUE(tl_config.last_buffer_flags & BufferFlags::kReference);
|
||||
EXPECT_TRUE(tl_config.golden_buffer_flags & BufferFlags::kReference);
|
||||
EXPECT_TRUE(tl_config.arf_buffer_flags & BufferFlags::kReference);
|
||||
|
||||
// Restart of cycle!
|
||||
|
||||
// TL0 base layer frame, updating and referencing last.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, false, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
|
||||
// TL2 frame, updating altref.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, false, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
|
||||
// TL1 frame, updating golden.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, false, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
|
||||
// TL2 frame. Can still reference all buffer since they have been update this
|
||||
// cycle.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, false, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
EXPECT_TRUE(tl_config.last_buffer_flags & BufferFlags::kReference);
|
||||
EXPECT_TRUE(tl_config.golden_buffer_flags & BufferFlags::kReference);
|
||||
EXPECT_TRUE(tl_config.arf_buffer_flags & BufferFlags::kReference);
|
||||
|
||||
// Restart of cycle!
|
||||
|
||||
// TL0 base layer frame, updating and referencing last.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, false, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
|
||||
// Dropped TL2 frame.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, 0, false, 0, nullptr);
|
||||
|
||||
// Dropped TL1 frame.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, 0, false, 0, nullptr);
|
||||
|
||||
// TL2 frame. This time golden and altref contain data from the previous cycle
|
||||
// and cannot be referenced.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, false, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
EXPECT_TRUE(tl_config.last_buffer_flags & BufferFlags::kReference);
|
||||
EXPECT_FALSE(tl_config.golden_buffer_flags & BufferFlags::kReference);
|
||||
EXPECT_FALSE(tl_config.arf_buffer_flags & BufferFlags::kReference);
|
||||
}
|
||||
|
||||
TEST_F(TemporalLayersTest, DoesNotReferenceUnlessGuaranteedToExist) {
|
||||
constexpr int kNumLayers = 3;
|
||||
// Use a repeating pattern of tl 0, 2, 1, 2.
|
||||
|
@ -509,69 +293,6 @@ TEST_F(TemporalLayersTest, DoesNotReferenceUnlessGuaranteedToExist) {
|
|||
EXPECT_FALSE(tl_config.arf_buffer_flags & BufferFlags::kReference);
|
||||
}
|
||||
|
||||
TEST_F(TemporalLayersTest, DoesNotReferenceUnlessGuaranteedToExistLongDelay) {
|
||||
constexpr int kNumLayers = 3;
|
||||
// Use a repeating pattern of tl 0, 2, 1, 2.
|
||||
// Tl 0, 1 updates last, golden, altref respectively.
|
||||
ScopedFieldTrials field_trial("WebRTC-UseShortVP8TL3Pattern/Enabled/");
|
||||
DefaultTemporalLayers tl(kNumLayers);
|
||||
DefaultTemporalLayersChecker checker(kNumLayers);
|
||||
tl.OnRatesUpdated(0,
|
||||
GetTemporalLayerRates(kDefaultBytesPerFrame,
|
||||
kDefaultFramerate, kNumLayers),
|
||||
kDefaultFramerate);
|
||||
tl.UpdateConfiguration(0);
|
||||
|
||||
// Start with a keyframe.
|
||||
uint32_t timestamp = 0;
|
||||
Vp8FrameConfig tl_config = tl.NextFrameConfig(0, timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, true, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
|
||||
// Do a full cycle of the pattern.
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, false, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
}
|
||||
|
||||
// TL0 base layer frame, starting the cycle over.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, false, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
|
||||
// TL2 frame.
|
||||
tl_config = tl.NextFrameConfig(0, ++timestamp);
|
||||
tl.OnEncodeDone(0, timestamp, kDefaultBytesPerFrame, false, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
|
||||
// Encoder has a hiccup and builds a queue, so frame encoding is delayed.
|
||||
// Encoded, but delayed frames in TL 1, 2.
|
||||
tl_config = tl.NextFrameConfig(0, timestamp + 1);
|
||||
tl_config = tl.NextFrameConfig(0, timestamp + 2);
|
||||
|
||||
// Restart of the pattern!
|
||||
|
||||
// Encoded, but delayed frames in TL 2, 1.
|
||||
tl_config = tl.NextFrameConfig(0, timestamp + 3);
|
||||
tl_config = tl.NextFrameConfig(0, timestamp + 4);
|
||||
|
||||
// TL1 frame from last cycle is ready.
|
||||
tl.OnEncodeDone(0, timestamp + 1, kDefaultBytesPerFrame, false, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
// TL2 frame from last cycle is ready.
|
||||
tl.OnEncodeDone(0, timestamp + 2, kDefaultBytesPerFrame, false, kDefaultQp,
|
||||
IgnoredCodecSpecificInfo());
|
||||
|
||||
// TL2 frame, that should be referencing all buffers, but altref and golden
|
||||
// haven not been updated this cycle. (Don't be fooled by the late frames from
|
||||
// the last cycle!)
|
||||
tl_config = tl.NextFrameConfig(0, timestamp + 5);
|
||||
EXPECT_TRUE(tl_config.last_buffer_flags & BufferFlags::kReference);
|
||||
EXPECT_FALSE(tl_config.golden_buffer_flags & BufferFlags::kReference);
|
||||
EXPECT_FALSE(tl_config.arf_buffer_flags & BufferFlags::kReference);
|
||||
}
|
||||
|
||||
TEST_F(TemporalLayersTest, KeyFrame) {
|
||||
constexpr int kNumLayers = 3;
|
||||
DefaultTemporalLayers tl(kNumLayers);
|
||||
|
|
|
@ -649,56 +649,6 @@ TEST(FullStackTest, Conference_Motion_Hd_4tl_Moderate_Limits) {
|
|||
fixture->RunWithAnalyzer(conf_motion_hd);
|
||||
}
|
||||
|
||||
TEST(FullStackTest, Conference_Motion_Hd_3tl_Alt_Moderate_Limits) {
|
||||
test::ScopedFieldTrials field_trial(
|
||||
AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"));
|
||||
auto fixture = CreateVideoQualityTestFixture();
|
||||
ParamsWithLogging conf_motion_hd;
|
||||
conf_motion_hd.call.send_side_bwe = true;
|
||||
conf_motion_hd.video[0] = {
|
||||
true, 1280,
|
||||
720, 50,
|
||||
30000, 3000000,
|
||||
3000000, false,
|
||||
"VP8", 3,
|
||||
-1, 0,
|
||||
false, false,
|
||||
false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
|
||||
conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
|
||||
0.0, 0.0, kFullStackTestDurationSecs};
|
||||
conf_motion_hd.config->queue_length_packets = 50;
|
||||
conf_motion_hd.config->loss_percent = 3;
|
||||
conf_motion_hd.config->queue_delay_ms = 100;
|
||||
conf_motion_hd.config->link_capacity_kbps = 2000;
|
||||
fixture->RunWithAnalyzer(conf_motion_hd);
|
||||
}
|
||||
|
||||
TEST(FullStackTest, Conference_Motion_Hd_3tl_Alt_Heavy_Moderate_Limits) {
|
||||
auto fixture = CreateVideoQualityTestFixture();
|
||||
test::ScopedFieldTrials field_trial(
|
||||
AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"
|
||||
"WebRTC-UseBaseHeavyVP8TL3RateAllocation/Enabled/"));
|
||||
ParamsWithLogging conf_motion_hd;
|
||||
conf_motion_hd.call.send_side_bwe = true;
|
||||
conf_motion_hd.video[0] = {
|
||||
true, 1280,
|
||||
720, 50,
|
||||
30000, 3000000,
|
||||
3000000, false,
|
||||
"VP8", 3,
|
||||
-1, 0,
|
||||
false, false,
|
||||
false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
|
||||
conf_motion_hd.analyzer = {
|
||||
"conference_motion_hd_3tl_alt_heavy_moderate_limits", 0.0, 0.0,
|
||||
kFullStackTestDurationSecs};
|
||||
conf_motion_hd.config->queue_length_packets = 50;
|
||||
conf_motion_hd.config->loss_percent = 3;
|
||||
conf_motion_hd.config->queue_delay_ms = 100;
|
||||
conf_motion_hd.config->link_capacity_kbps = 2000;
|
||||
fixture->RunWithAnalyzer(conf_motion_hd);
|
||||
}
|
||||
|
||||
TEST(FullStackTest, Foreman_Cif_30kbps_AV1) {
|
||||
auto fixture = CreateVideoQualityTestFixture();
|
||||
ParamsWithLogging foreman_cif;
|
||||
|
|
|
@ -914,58 +914,6 @@ TEST(PCFullStackTest, ConferenceMotionHd4TLModerateLimits) {
|
|||
fixture->RunWithAnalyzer(conf_motion_hd);
|
||||
}
|
||||
|
||||
// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
|
||||
TEST(PCFullStackTest, ConferenceMotionHd3TLModerateLimitsAltTLPattern) {
|
||||
test::ScopedFieldTrials field_trial(
|
||||
AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"));
|
||||
auto fixture = CreateVideoQualityTestFixture();
|
||||
ParamsWithLogging conf_motion_hd;
|
||||
conf_motion_hd.call.send_side_bwe = true;
|
||||
conf_motion_hd.video[0] = {
|
||||
true, 1280,
|
||||
720, 50,
|
||||
30000, 3000000,
|
||||
3000000, false,
|
||||
"VP8", 3,
|
||||
-1, 0,
|
||||
false, false,
|
||||
false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
|
||||
conf_motion_hd.analyzer = {"conference_motion_hd_3tl_alt_moderate_limits",
|
||||
0.0, 0.0, kTestDurationSec};
|
||||
conf_motion_hd.config->queue_length_packets = 50;
|
||||
conf_motion_hd.config->loss_percent = 3;
|
||||
conf_motion_hd.config->queue_delay_ms = 100;
|
||||
conf_motion_hd.config->link_capacity_kbps = 2000;
|
||||
fixture->RunWithAnalyzer(conf_motion_hd);
|
||||
}
|
||||
|
||||
// TODO(bugs.webrtc.org/10639) requires simulcast/SVC support in PC framework
|
||||
TEST(PCFullStackTest,
|
||||
ConferenceMotionHd3TLModerateLimitsAltTLPatternAndBaseHeavyTLAllocation) {
|
||||
auto fixture = CreateVideoQualityTestFixture();
|
||||
test::ScopedFieldTrials field_trial(
|
||||
AppendFieldTrials("WebRTC-UseShortVP8TL3Pattern/Enabled/"
|
||||
"WebRTC-UseBaseHeavyVP8TL3RateAllocation/Enabled/"));
|
||||
ParamsWithLogging conf_motion_hd;
|
||||
conf_motion_hd.call.send_side_bwe = true;
|
||||
conf_motion_hd.video[0] = {
|
||||
true, 1280,
|
||||
720, 50,
|
||||
30000, 3000000,
|
||||
3000000, false,
|
||||
"VP8", 3,
|
||||
-1, 0,
|
||||
false, false,
|
||||
false, ClipNameToClipPath("ConferenceMotion_1280_720_50")};
|
||||
conf_motion_hd.analyzer = {
|
||||
"conference_motion_hd_3tl_alt_heavy_moderate_limits", 0.0, 0.0,
|
||||
kTestDurationSec};
|
||||
conf_motion_hd.config->queue_length_packets = 50;
|
||||
conf_motion_hd.config->loss_percent = 3;
|
||||
conf_motion_hd.config->queue_delay_ms = 100;
|
||||
conf_motion_hd.config->link_capacity_kbps = 2000;
|
||||
fixture->RunWithAnalyzer(conf_motion_hd);
|
||||
}
|
||||
*/
|
||||
|
||||
#if defined(RTC_ENABLE_VP9)
|
||||
|
|
Loading…
Reference in a new issue