RtpFrameReferenceFinder return frames directly instead of via callback.

Bug: webrtc:12579
Change-Id: I41263f70a6f3dc60167e41f8b015a7d3b0dc3dd7
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/219633
Commit-Queue: Philip Eliasson <philipel@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@google.com>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34136}
This commit is contained in:
philipel
2021-05-25 15:35:57 +02:00
committed by WebRTC LUCI CQ
parent 7f11067110
commit 2182096e66
12 changed files with 128 additions and 117 deletions

View File

@ -60,28 +60,29 @@ std::unique_ptr<RtpFrameObject> CreateFrame(
}
} // namespace
class TestRtpFrameReferenceFinder : public ::testing::Test,
public OnCompleteFrameCallback {
class TestRtpFrameReferenceFinder : public ::testing::Test {
protected:
TestRtpFrameReferenceFinder()
: rand_(0x8739211),
reference_finder_(new RtpFrameReferenceFinder(this)),
reference_finder_(std::make_unique<RtpFrameReferenceFinder>()),
frames_from_callback_(FrameComp()) {}
uint16_t Rand() { return rand_.Rand<uint16_t>(); }
void OnCompleteFrame(std::unique_ptr<EncodedFrame> frame) override {
int64_t pid = frame->Id();
uint16_t sidx = *frame->SpatialIndex();
auto frame_it = frames_from_callback_.find(std::make_pair(pid, sidx));
if (frame_it != frames_from_callback_.end()) {
ADD_FAILURE() << "Already received frame with (pid:sidx): (" << pid << ":"
<< sidx << ")";
return;
}
void OnCompleteFrames(RtpFrameReferenceFinder::ReturnVector frames) {
for (auto& frame : frames) {
int64_t pid = frame->Id();
uint16_t sidx = *frame->SpatialIndex();
auto frame_it = frames_from_callback_.find(std::make_pair(pid, sidx));
if (frame_it != frames_from_callback_.end()) {
ADD_FAILURE() << "Already received frame with (pid:sidx): (" << pid
<< ":" << sidx << ")";
return;
}
frames_from_callback_.insert(
std::make_pair(std::make_pair(pid, sidx), std::move(frame)));
frames_from_callback_.insert(
std::make_pair(std::make_pair(pid, sidx), std::move(frame)));
}
}
void InsertGeneric(uint16_t seq_num_start,
@ -91,14 +92,18 @@ class TestRtpFrameReferenceFinder : public ::testing::Test,
CreateFrame(seq_num_start, seq_num_end, keyframe, kVideoCodecGeneric,
RTPVideoTypeHeader());
reference_finder_->ManageFrame(std::move(frame));
OnCompleteFrames(reference_finder_->ManageFrame(std::move(frame)));
}
void InsertH264(uint16_t seq_num_start, uint16_t seq_num_end, bool keyframe) {
std::unique_ptr<RtpFrameObject> frame =
CreateFrame(seq_num_start, seq_num_end, keyframe, kVideoCodecH264,
RTPVideoTypeHeader());
reference_finder_->ManageFrame(std::move(frame));
OnCompleteFrames(reference_finder_->ManageFrame(std::move(frame)));
}
void InsertPadding(uint16_t seq_num) {
OnCompleteFrames(reference_finder_->PaddingReceived(seq_num));
}
// Check if a frame with picture id |pid| and spatial index |sidx| has been
@ -165,7 +170,7 @@ TEST_F(TestRtpFrameReferenceFinder, PaddingPackets) {
InsertGeneric(sn, sn, true);
InsertGeneric(sn + 2, sn + 2, false);
EXPECT_EQ(1UL, frames_from_callback_.size());
reference_finder_->PaddingReceived(sn + 1);
InsertPadding(sn + 1);
EXPECT_EQ(2UL, frames_from_callback_.size());
}
@ -173,8 +178,8 @@ TEST_F(TestRtpFrameReferenceFinder, PaddingPacketsReordered) {
uint16_t sn = Rand();
InsertGeneric(sn, sn, true);
reference_finder_->PaddingReceived(sn + 1);
reference_finder_->PaddingReceived(sn + 4);
InsertPadding(sn + 1);
InsertPadding(sn + 4);
InsertGeneric(sn + 2, sn + 3, false);
EXPECT_EQ(2UL, frames_from_callback_.size());
@ -186,12 +191,12 @@ TEST_F(TestRtpFrameReferenceFinder, PaddingPacketsReorderedMultipleKeyframes) {
uint16_t sn = Rand();
InsertGeneric(sn, sn, true);
reference_finder_->PaddingReceived(sn + 1);
reference_finder_->PaddingReceived(sn + 4);
InsertPadding(sn + 1);
InsertPadding(sn + 4);
InsertGeneric(sn + 2, sn + 3, false);
InsertGeneric(sn + 5, sn + 5, true);
reference_finder_->PaddingReceived(sn + 6);
reference_finder_->PaddingReceived(sn + 9);
InsertPadding(sn + 6);
InsertPadding(sn + 9);
InsertGeneric(sn + 7, sn + 8, false);
EXPECT_EQ(4UL, frames_from_callback_.size());
@ -308,7 +313,7 @@ TEST_F(TestRtpFrameReferenceFinder, Av1FrameNoDependencyDescriptor) {
CreateFrame(/*seq_num_start=*/sn, /*seq_num_end=*/sn, /*keyframe=*/true,
kVideoCodecAV1, RTPVideoTypeHeader());
reference_finder_->ManageFrame(std::move(frame));
OnCompleteFrames(reference_finder_->ManageFrame(std::move(frame)));
ASSERT_EQ(1UL, frames_from_callback_.size());
CheckReferencesGeneric(sn);