Ensure render time is zero when playout delay is zero so that minimal latency in the render pipeline is ensured.
Bug: webrtc:9135 Change-Id: Id9ae8ec59536808ba8923c73dd46abfe3fa6fe79 Reviewed-on: https://webrtc-review.googlesource.com/75600 Commit-Queue: Stefan Holmer <stefan@webrtc.org> Reviewed-by: Philip Eliasson <philipel@webrtc.org> Cr-Commit-Position: refs/heads/master@{#23309}
This commit is contained in:
committed by
Commit Bot
parent
6bf5a0d5b6
commit
812ceafb5a
@ -133,7 +133,10 @@ class TestFrameBuffer2 : public ::testing::Test {
|
||||
: clock_(0),
|
||||
timing_(&clock_),
|
||||
jitter_estimator_(&clock_),
|
||||
buffer_(&clock_, &jitter_estimator_, &timing_, &stats_callback_),
|
||||
buffer_(new FrameBuffer(&clock_,
|
||||
&jitter_estimator_,
|
||||
&timing_,
|
||||
&stats_callback_)),
|
||||
rand_(0x34678213),
|
||||
tear_down_(false),
|
||||
extract_thread_(&ExtractLoop, this, "Extract Thread"),
|
||||
@ -168,7 +171,7 @@ class TestFrameBuffer2 : public ::testing::Test {
|
||||
for (size_t r = 0; r < references.size(); ++r)
|
||||
frame->references[r] = references[r];
|
||||
|
||||
return buffer_.InsertFrame(std::move(frame));
|
||||
return buffer_->InsertFrame(std::move(frame));
|
||||
}
|
||||
|
||||
void ExtractFrame(int64_t max_wait_time = 0, bool keyframe_required = false) {
|
||||
@ -176,7 +179,7 @@ class TestFrameBuffer2 : public ::testing::Test {
|
||||
if (max_wait_time == 0) {
|
||||
std::unique_ptr<EncodedFrame> frame;
|
||||
FrameBuffer::ReturnReason res =
|
||||
buffer_.NextFrame(0, &frame, keyframe_required);
|
||||
buffer_->NextFrame(0, &frame, keyframe_required);
|
||||
if (res != FrameBuffer::ReturnReason::kStopped)
|
||||
frames_.emplace_back(std::move(frame));
|
||||
crit_.Leave();
|
||||
@ -215,7 +218,7 @@ class TestFrameBuffer2 : public ::testing::Test {
|
||||
|
||||
std::unique_ptr<EncodedFrame> frame;
|
||||
FrameBuffer::ReturnReason res =
|
||||
tfb->buffer_.NextFrame(tfb->max_wait_time_, &frame);
|
||||
tfb->buffer_->NextFrame(tfb->max_wait_time_, &frame);
|
||||
if (res != FrameBuffer::ReturnReason::kStopped)
|
||||
tfb->frames_.emplace_back(std::move(frame));
|
||||
}
|
||||
@ -227,7 +230,7 @@ class TestFrameBuffer2 : public ::testing::Test {
|
||||
SimulatedClock clock_;
|
||||
VCMTimingFake timing_;
|
||||
::testing::NiceMock<VCMJitterEstimatorMock> jitter_estimator_;
|
||||
FrameBuffer buffer_;
|
||||
std::unique_ptr<FrameBuffer> buffer_;
|
||||
std::vector<std::unique_ptr<EncodedFrame>> frames_;
|
||||
Random rand_;
|
||||
::testing::NiceMock<VCMReceiveStatisticsCallbackMock> stats_callback_;
|
||||
@ -271,11 +274,25 @@ TEST_F(TestFrameBuffer2, SetPlayoutDelay) {
|
||||
std::unique_ptr<FrameObjectFake> test_frame(new FrameObjectFake());
|
||||
test_frame->id.picture_id = 0;
|
||||
test_frame->SetPlayoutDelay(kPlayoutDelayMs);
|
||||
buffer_.InsertFrame(std::move(test_frame));
|
||||
buffer_->InsertFrame(std::move(test_frame));
|
||||
EXPECT_EQ(kPlayoutDelayMs.min_ms, timing_.min_playout_delay());
|
||||
EXPECT_EQ(kPlayoutDelayMs.max_ms, timing_.max_playout_delay());
|
||||
}
|
||||
|
||||
TEST_F(TestFrameBuffer2, ZeroPlayoutDelay) {
|
||||
VCMTiming timing(&clock_);
|
||||
buffer_.reset(
|
||||
new FrameBuffer(&clock_, &jitter_estimator_, &timing, &stats_callback_));
|
||||
const PlayoutDelay kPlayoutDelayMs = {0, 0};
|
||||
std::unique_ptr<FrameObjectFake> test_frame(new FrameObjectFake());
|
||||
test_frame->id.picture_id = 0;
|
||||
test_frame->SetPlayoutDelay(kPlayoutDelayMs);
|
||||
buffer_->InsertFrame(std::move(test_frame));
|
||||
ExtractFrame(0, false);
|
||||
CheckFrame(0, 0, 0);
|
||||
EXPECT_EQ(0, frames_[0]->RenderTimeMs());
|
||||
}
|
||||
|
||||
// Flaky test, see bugs.webrtc.org/7068.
|
||||
TEST_F(TestFrameBuffer2, DISABLED_OneUnorderedSuperFrame) {
|
||||
uint16_t pid = Rand();
|
||||
@ -433,7 +450,7 @@ TEST_F(TestFrameBuffer2, ProtectionMode) {
|
||||
InsertFrame(pid, 0, ts, false);
|
||||
ExtractFrame();
|
||||
|
||||
buffer_.SetProtectionMode(kProtectionNackFEC);
|
||||
buffer_->SetProtectionMode(kProtectionNackFEC);
|
||||
EXPECT_CALL(jitter_estimator_, GetJitterEstimate(0.0));
|
||||
InsertFrame(pid + 1, 0, ts, false);
|
||||
ExtractFrame();
|
||||
@ -507,7 +524,7 @@ TEST_F(TestFrameBuffer2, StatsCallback) {
|
||||
frame->num_references = 0;
|
||||
frame->inter_layer_predicted = false;
|
||||
|
||||
EXPECT_EQ(buffer_.InsertFrame(std::move(frame)), pid);
|
||||
EXPECT_EQ(buffer_->InsertFrame(std::move(frame)), pid);
|
||||
}
|
||||
|
||||
ExtractFrame();
|
||||
|
||||
Reference in New Issue
Block a user