Add test::FakeEncodedFrame for testing
Change-Id: I1c8fabe5caf2c723487ec1cd71a379e922026a9d Bug: webrtc:13996 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/260001 Reviewed-by: Erik Språng <sprang@webrtc.org> Commit-Queue: Evan Shrubsole <eshr@webrtc.org> Cr-Commit-Position: refs/heads/main@{#36654}
This commit is contained in:
committed by
WebRTC LUCI CQ
parent
65dcc47b8b
commit
a0ee64c57e
@ -1279,6 +1279,7 @@ if (rtc_include_tests) {
|
||||
"../../system_wrappers",
|
||||
"../../system_wrappers:field_trial",
|
||||
"../../system_wrappers:metrics",
|
||||
"../../test:fake_encoded_frame",
|
||||
"../../test:fake_video_codecs",
|
||||
"../../test:field_trial",
|
||||
"../../test:fileutils",
|
||||
|
||||
@ -12,6 +12,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "api/video/encoded_frame.h"
|
||||
#include "test/fake_encoded_frame.h"
|
||||
#include "test/field_trial.h"
|
||||
#include "test/gmock.h"
|
||||
#include "test/gtest.h"
|
||||
@ -29,67 +30,19 @@ MATCHER_P(FrameWithId, id, "") {
|
||||
return Matches(Eq(id))(arg->Id());
|
||||
}
|
||||
|
||||
class FakeEncodedFrame : public EncodedFrame {
|
||||
public:
|
||||
int64_t ReceivedTime() const override { return 0; }
|
||||
int64_t RenderTime() const override { return 0; }
|
||||
};
|
||||
|
||||
class Builder {
|
||||
public:
|
||||
Builder& Time(uint32_t rtp_timestamp) {
|
||||
rtp_timestamp_ = rtp_timestamp;
|
||||
return *this;
|
||||
}
|
||||
Builder& Id(int64_t frame_id) {
|
||||
frame_id_ = frame_id;
|
||||
return *this;
|
||||
}
|
||||
Builder& AsLast() {
|
||||
last_spatial_layer_ = true;
|
||||
return *this;
|
||||
}
|
||||
Builder& Refs(const std::vector<int64_t>& references) {
|
||||
references_ = references;
|
||||
return *this;
|
||||
}
|
||||
|
||||
std::unique_ptr<FakeEncodedFrame> Build() {
|
||||
RTC_CHECK_LE(references_.size(), EncodedFrame::kMaxFrameReferences);
|
||||
RTC_CHECK(rtp_timestamp_.has_value());
|
||||
RTC_CHECK(frame_id_.has_value());
|
||||
|
||||
auto frame = std::make_unique<FakeEncodedFrame>();
|
||||
frame->SetTimestamp(*rtp_timestamp_);
|
||||
frame->SetId(*frame_id_);
|
||||
frame->is_last_spatial_layer = last_spatial_layer_;
|
||||
|
||||
for (int64_t ref : references_) {
|
||||
frame->references[frame->num_references] = ref;
|
||||
frame->num_references++;
|
||||
}
|
||||
|
||||
return frame;
|
||||
}
|
||||
|
||||
private:
|
||||
absl::optional<uint32_t> rtp_timestamp_;
|
||||
absl::optional<int64_t> frame_id_;
|
||||
bool last_spatial_layer_ = false;
|
||||
std::vector<int64_t> references_;
|
||||
};
|
||||
|
||||
TEST(FrameBuffer3Test, RejectInvalidRefs) {
|
||||
test::ScopedKeyValueConfig field_trials;
|
||||
FrameBuffer buffer(/*max_frame_slots=*/10, /*max_decode_history=*/100,
|
||||
field_trials);
|
||||
// Ref must be less than the id of this frame.
|
||||
buffer.InsertFrame(Builder().Time(0).Id(0).Refs({0}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(0).Id(0).Refs({0}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.LastContinuousFrameId(), Eq(absl::nullopt));
|
||||
|
||||
// Duplicate ids are also invalid.
|
||||
buffer.InsertFrame(Builder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(20).Id(2).Refs({1, 1}).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(20).Id(2).Refs({1, 1}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.LastContinuousFrameId(), Eq(1));
|
||||
}
|
||||
|
||||
@ -100,11 +53,12 @@ TEST(FrameBuffer3Test, LastContinuousUpdatesOnInsertedFrames) {
|
||||
EXPECT_THAT(buffer.LastContinuousFrameId(), Eq(absl::nullopt));
|
||||
EXPECT_THAT(buffer.LastContinuousTemporalUnitFrameId(), Eq(absl::nullopt));
|
||||
|
||||
buffer.InsertFrame(Builder().Time(10).Id(1).Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(10).Id(1).Build());
|
||||
EXPECT_THAT(buffer.LastContinuousFrameId(), Eq(1));
|
||||
EXPECT_THAT(buffer.LastContinuousTemporalUnitFrameId(), Eq(absl::nullopt));
|
||||
|
||||
buffer.InsertFrame(Builder().Time(10).Id(2).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(10).Id(2).Refs({1}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.LastContinuousFrameId(), Eq(2));
|
||||
EXPECT_THAT(buffer.LastContinuousTemporalUnitFrameId(), Eq(2));
|
||||
}
|
||||
@ -114,11 +68,13 @@ TEST(FrameBuffer3Test, LastContinuousFrameReordering) {
|
||||
FrameBuffer buffer(/*max_frame_slots=*/10, /*max_decode_history=*/100,
|
||||
field_trials);
|
||||
|
||||
buffer.InsertFrame(Builder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(30).Id(3).Refs({2}).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(30).Id(3).Refs({2}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.LastContinuousFrameId(), Eq(1));
|
||||
|
||||
buffer.InsertFrame(Builder().Time(20).Id(2).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(20).Id(2).Refs({1}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.LastContinuousFrameId(), Eq(3));
|
||||
}
|
||||
|
||||
@ -127,9 +83,10 @@ TEST(FrameBuffer3Test, LastContinuousTemporalUnit) {
|
||||
FrameBuffer buffer(/*max_frame_slots=*/10, /*max_decode_history=*/100,
|
||||
field_trials);
|
||||
|
||||
buffer.InsertFrame(Builder().Time(10).Id(1).Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(10).Id(1).Build());
|
||||
EXPECT_THAT(buffer.LastContinuousTemporalUnitFrameId(), Eq(absl::nullopt));
|
||||
buffer.InsertFrame(Builder().Time(10).Id(2).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(10).Id(2).Refs({1}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.LastContinuousTemporalUnitFrameId(), Eq(2));
|
||||
}
|
||||
|
||||
@ -138,12 +95,14 @@ TEST(FrameBuffer3Test, LastContinuousTemporalUnitReordering) {
|
||||
FrameBuffer buffer(/*max_frame_slots=*/10, /*max_decode_history=*/100,
|
||||
field_trials);
|
||||
|
||||
buffer.InsertFrame(Builder().Time(10).Id(1).Build());
|
||||
buffer.InsertFrame(Builder().Time(20).Id(3).Refs({1}).Build());
|
||||
buffer.InsertFrame(Builder().Time(20).Id(4).Refs({2, 3}).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(10).Id(1).Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(20).Id(3).Refs({1}).Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(20).Id(4).Refs({2, 3}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.LastContinuousTemporalUnitFrameId(), Eq(absl::nullopt));
|
||||
|
||||
buffer.InsertFrame(Builder().Time(10).Id(2).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(10).Id(2).Refs({1}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.LastContinuousTemporalUnitFrameId(), Eq(4));
|
||||
}
|
||||
|
||||
@ -154,7 +113,7 @@ TEST(FrameBuffer3Test, NextDecodable) {
|
||||
|
||||
EXPECT_THAT(buffer.NextDecodableTemporalUnitRtpTimestamp(),
|
||||
Eq(absl::nullopt));
|
||||
buffer.InsertFrame(Builder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(10).Id(1).AsLast().Build());
|
||||
EXPECT_THAT(buffer.NextDecodableTemporalUnitRtpTimestamp(), Eq(10U));
|
||||
}
|
||||
|
||||
@ -163,9 +122,10 @@ TEST(FrameBuffer3Test, AdvanceNextDecodableOnExtraction) {
|
||||
FrameBuffer buffer(/*max_frame_slots=*/10, /*max_decode_history=*/100,
|
||||
field_trials);
|
||||
|
||||
buffer.InsertFrame(Builder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(20).Id(2).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(30).Id(3).Refs({2}).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(20).Id(2).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(30).Id(3).Refs({2}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.NextDecodableTemporalUnitRtpTimestamp(), Eq(10U));
|
||||
|
||||
EXPECT_THAT(buffer.ExtractNextDecodableTemporalUnit(),
|
||||
@ -183,9 +143,11 @@ TEST(FrameBuffer3Test, AdvanceLastDecodableOnExtraction) {
|
||||
FrameBuffer buffer(/*max_frame_slots=*/10, /*max_decode_history=*/100,
|
||||
field_trials);
|
||||
|
||||
buffer.InsertFrame(Builder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(20).Id(2).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(30).Id(3).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(20).Id(2).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(30).Id(3).Refs({1}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.LastDecodableTemporalUnitRtpTimestamp(), Eq(10U));
|
||||
|
||||
EXPECT_THAT(buffer.ExtractNextDecodableTemporalUnit(),
|
||||
@ -198,10 +160,10 @@ TEST(FrameBuffer3Test, FrameUpdatesNextDecodable) {
|
||||
FrameBuffer buffer(/*max_frame_slots=*/10, /*max_decode_history=*/100,
|
||||
field_trials);
|
||||
|
||||
buffer.InsertFrame(Builder().Time(20).Id(2).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(20).Id(2).AsLast().Build());
|
||||
EXPECT_THAT(buffer.NextDecodableTemporalUnitRtpTimestamp(), Eq(20U));
|
||||
|
||||
buffer.InsertFrame(Builder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(10).Id(1).AsLast().Build());
|
||||
EXPECT_THAT(buffer.NextDecodableTemporalUnitRtpTimestamp(), Eq(10U));
|
||||
}
|
||||
|
||||
@ -209,18 +171,23 @@ TEST(FrameBuffer3Test, KeyframeClearsFullBuffer) {
|
||||
test::ScopedKeyValueConfig field_trials;
|
||||
FrameBuffer buffer(/*max_frame_slots=*/5, /*max_decode_history=*/10,
|
||||
field_trials);
|
||||
buffer.InsertFrame(Builder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(20).Id(2).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(30).Id(3).Refs({2}).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(40).Id(4).Refs({3}).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(50).Id(5).Refs({4}).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(20).Id(2).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(30).Id(3).Refs({2}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(40).Id(4).Refs({3}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(50).Id(5).Refs({4}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.LastContinuousFrameId(), Eq(5));
|
||||
|
||||
// Frame buffer is full
|
||||
buffer.InsertFrame(Builder().Time(60).Id(6).Refs({5}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(60).Id(6).Refs({5}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.LastContinuousFrameId(), Eq(5));
|
||||
|
||||
buffer.InsertFrame(Builder().Time(70).Id(7).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(70).Id(7).AsLast().Build());
|
||||
EXPECT_THAT(buffer.LastContinuousFrameId(), Eq(7));
|
||||
}
|
||||
|
||||
@ -228,9 +195,11 @@ TEST(FrameBuffer3Test, DropNextDecodableTemporalUnit) {
|
||||
test::ScopedKeyValueConfig field_trials;
|
||||
FrameBuffer buffer(/*max_frame_slots=*/10, /*max_decode_history=*/100,
|
||||
field_trials);
|
||||
buffer.InsertFrame(Builder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(20).Id(2).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(30).Id(3).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(20).Id(2).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(30).Id(3).Refs({1}).AsLast().Build());
|
||||
|
||||
buffer.ExtractNextDecodableTemporalUnit();
|
||||
buffer.DropNextDecodableTemporalUnit();
|
||||
@ -242,15 +211,18 @@ TEST(FrameBuffer3Test, OldFramesAreIgnored) {
|
||||
test::ScopedKeyValueConfig field_trials;
|
||||
FrameBuffer buffer(/*max_frame_slots=*/10, /*max_decode_history=*/100,
|
||||
field_trials);
|
||||
buffer.InsertFrame(Builder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(20).Id(2).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(20).Id(2).Refs({1}).AsLast().Build());
|
||||
|
||||
buffer.ExtractNextDecodableTemporalUnit();
|
||||
buffer.ExtractNextDecodableTemporalUnit();
|
||||
|
||||
buffer.InsertFrame(Builder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(20).Id(2).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(30).Id(3).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(20).Id(2).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(30).Id(3).Refs({1}).AsLast().Build());
|
||||
|
||||
EXPECT_THAT(buffer.ExtractNextDecodableTemporalUnit(),
|
||||
ElementsAre(FrameWithId(3)));
|
||||
@ -260,13 +232,15 @@ TEST(FrameBuffer3Test, ReturnFullTemporalUnitKSVC) {
|
||||
test::ScopedKeyValueConfig field_trials;
|
||||
FrameBuffer buffer(/*max_frame_slots=*/10, /*max_decode_history=*/100,
|
||||
field_trials);
|
||||
buffer.InsertFrame(Builder().Time(10).Id(1).Build());
|
||||
buffer.InsertFrame(Builder().Time(10).Id(2).Refs({1}).Build());
|
||||
buffer.InsertFrame(Builder().Time(10).Id(3).Refs({2}).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(10).Id(1).Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(10).Id(2).Refs({1}).Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(10).Id(3).Refs({2}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.ExtractNextDecodableTemporalUnit(),
|
||||
ElementsAre(FrameWithId(1), FrameWithId(2), FrameWithId(3)));
|
||||
|
||||
buffer.InsertFrame(Builder().Time(20).Id(4).Refs({3}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(20).Id(4).Refs({3}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.ExtractNextDecodableTemporalUnit(),
|
||||
ElementsAre(FrameWithId(4)));
|
||||
}
|
||||
@ -275,11 +249,15 @@ TEST(FrameBuffer3Test, InterleavedStream) {
|
||||
test::ScopedKeyValueConfig field_trials;
|
||||
FrameBuffer buffer(/*max_frame_slots=*/10, /*max_decode_history=*/100,
|
||||
field_trials);
|
||||
buffer.InsertFrame(Builder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(20).Id(2).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(30).Id(3).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(40).Id(4).Refs({2}).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(50).Id(5).Refs({3}).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(20).Id(2).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(30).Id(3).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(40).Id(4).Refs({2}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(50).Id(5).Refs({3}).AsLast().Build());
|
||||
|
||||
EXPECT_THAT(buffer.ExtractNextDecodableTemporalUnit(),
|
||||
ElementsAre(FrameWithId(1)));
|
||||
@ -292,12 +270,15 @@ TEST(FrameBuffer3Test, InterleavedStream) {
|
||||
EXPECT_THAT(buffer.ExtractNextDecodableTemporalUnit(),
|
||||
ElementsAre(FrameWithId(5)));
|
||||
|
||||
buffer.InsertFrame(Builder().Time(70).Id(7).Refs({5}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(70).Id(7).Refs({5}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.ExtractNextDecodableTemporalUnit(),
|
||||
ElementsAre(FrameWithId(7)));
|
||||
buffer.InsertFrame(Builder().Time(60).Id(6).Refs({4}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(60).Id(6).Refs({4}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.ExtractNextDecodableTemporalUnit(), IsEmpty());
|
||||
buffer.InsertFrame(Builder().Time(90).Id(9).Refs({7}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(90).Id(9).Refs({7}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.ExtractNextDecodableTemporalUnit(),
|
||||
ElementsAre(FrameWithId(9)));
|
||||
}
|
||||
@ -309,10 +290,12 @@ TEST(FrameBuffer3Test, LegacyFrameIdJumpBehavior) {
|
||||
FrameBuffer buffer(/*max_frame_slots=*/10, /*max_decode_history=*/100,
|
||||
field_trials);
|
||||
|
||||
buffer.InsertFrame(Builder().Time(20).Id(3).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(20).Id(3).AsLast().Build());
|
||||
EXPECT_THAT(buffer.ExtractNextDecodableTemporalUnit(),
|
||||
ElementsAre(FrameWithId(3)));
|
||||
buffer.InsertFrame(Builder().Time(30).Id(2).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(30).Id(2).AsLast().Build());
|
||||
EXPECT_THAT(buffer.ExtractNextDecodableTemporalUnit(), IsEmpty());
|
||||
}
|
||||
|
||||
@ -322,12 +305,15 @@ TEST(FrameBuffer3Test, LegacyFrameIdJumpBehavior) {
|
||||
FrameBuffer buffer(/*max_frame_slots=*/10, /*max_decode_history=*/100,
|
||||
field_trials);
|
||||
|
||||
buffer.InsertFrame(Builder().Time(20).Id(3).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(20).Id(3).AsLast().Build());
|
||||
EXPECT_THAT(buffer.ExtractNextDecodableTemporalUnit(),
|
||||
ElementsAre(FrameWithId(3)));
|
||||
buffer.InsertFrame(Builder().Time(30).Id(2).Refs({1}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(30).Id(2).Refs({1}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.ExtractNextDecodableTemporalUnit(), IsEmpty());
|
||||
buffer.InsertFrame(Builder().Time(40).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(40).Id(1).AsLast().Build());
|
||||
EXPECT_THAT(buffer.ExtractNextDecodableTemporalUnit(),
|
||||
ElementsAre(FrameWithId(1)));
|
||||
}
|
||||
@ -339,18 +325,20 @@ TEST(FrameBuffer3Test, TotalNumberOfContinuousTemporalUnits) {
|
||||
field_trials);
|
||||
EXPECT_THAT(buffer.GetTotalNumberOfContinuousTemporalUnits(), Eq(0));
|
||||
|
||||
buffer.InsertFrame(Builder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(10).Id(1).AsLast().Build());
|
||||
EXPECT_THAT(buffer.GetTotalNumberOfContinuousTemporalUnits(), Eq(1));
|
||||
|
||||
buffer.InsertFrame(Builder().Time(20).Id(2).Refs({1}).Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(20).Id(2).Refs({1}).Build());
|
||||
EXPECT_THAT(buffer.GetTotalNumberOfContinuousTemporalUnits(), Eq(1));
|
||||
|
||||
buffer.InsertFrame(Builder().Time(40).Id(4).Refs({2}).Build());
|
||||
buffer.InsertFrame(Builder().Time(40).Id(5).Refs({3, 4}).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(40).Id(4).Refs({2}).Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(40).Id(5).Refs({3, 4}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.GetTotalNumberOfContinuousTemporalUnits(), Eq(1));
|
||||
|
||||
// Reordered
|
||||
buffer.InsertFrame(Builder().Time(20).Id(3).Refs({2}).AsLast().Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(20).Id(3).Refs({2}).AsLast().Build());
|
||||
EXPECT_THAT(buffer.GetTotalNumberOfContinuousTemporalUnits(), Eq(3));
|
||||
}
|
||||
|
||||
@ -360,11 +348,13 @@ TEST(FrameBuffer3Test, TotalNumberOfDroppedFrames) {
|
||||
field_trials);
|
||||
EXPECT_THAT(buffer.GetTotalNumberOfDroppedFrames(), Eq(0));
|
||||
|
||||
buffer.InsertFrame(Builder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(20).Id(2).Refs({1}).Build());
|
||||
buffer.InsertFrame(Builder().Time(20).Id(3).Refs({2}).AsLast().Build());
|
||||
buffer.InsertFrame(Builder().Time(40).Id(4).Refs({1}).Build());
|
||||
buffer.InsertFrame(Builder().Time(40).Id(5).Refs({4}).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(10).Id(1).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(20).Id(2).Refs({1}).Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(20).Id(3).Refs({2}).AsLast().Build());
|
||||
buffer.InsertFrame(test::FakeFrameBuilder().Time(40).Id(4).Refs({1}).Build());
|
||||
buffer.InsertFrame(
|
||||
test::FakeFrameBuilder().Time(40).Id(5).Refs({4}).AsLast().Build());
|
||||
|
||||
buffer.ExtractNextDecodableTemporalUnit();
|
||||
EXPECT_THAT(buffer.GetTotalNumberOfDroppedFrames(), Eq(0));
|
||||
|
||||
Reference in New Issue
Block a user