| Index: webrtc/modules/video_coding/receiver_unittest.cc
|
| diff --git a/webrtc/modules/video_coding/receiver_unittest.cc b/webrtc/modules/video_coding/receiver_unittest.cc
|
| index d51b004a9bb3c8a4d2de0d1a66fb9bce05531d2a..1f3a144badd02ab5a943fe5c27e82fa6b2e7f4b2 100644
|
| --- a/webrtc/modules/video_coding/receiver_unittest.cc
|
| +++ b/webrtc/modules/video_coding/receiver_unittest.cc
|
| @@ -11,6 +11,7 @@
|
|
|
| #include <list>
|
| #include <queue>
|
| +#include <vector>
|
|
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "webrtc/base/checks.h"
|
| @@ -34,14 +35,11 @@ class TestVCMReceiver : public ::testing::Test {
|
| : clock_(new SimulatedClock(0)),
|
| timing_(clock_.get()),
|
| receiver_(&timing_, clock_.get(), &event_factory_) {
|
| -
|
| - stream_generator_.reset(new
|
| - StreamGenerator(0, clock_->TimeInMilliseconds()));
|
| + stream_generator_.reset(
|
| + new StreamGenerator(0, clock_->TimeInMilliseconds()));
|
| }
|
|
|
| - virtual void SetUp() {
|
| - receiver_.Reset();
|
| - }
|
| + virtual void SetUp() { receiver_.Reset(); }
|
|
|
| int32_t InsertPacket(int index) {
|
| VCMPacket packet;
|
| @@ -79,7 +77,7 @@ class TestVCMReceiver : public ::testing::Test {
|
| bool DecodeNextFrame() {
|
| int64_t render_time_ms = 0;
|
| VCMEncodedFrame* frame =
|
| - receiver_.FrameForDecoding(0, render_time_ms, false);
|
| + receiver_.FrameForDecoding(0, &render_time_ms, false);
|
| if (!frame)
|
| return false;
|
| receiver_.ReleaseFrame(frame);
|
| @@ -116,7 +114,7 @@ TEST_F(TestVCMReceiver, RenderBufferSize_SkipToKeyFrame) {
|
| EXPECT_GE(InsertFrame(kVideoFrameDelta, true), kNoError);
|
| }
|
| EXPECT_EQ((kNumOfFrames - 1) * kDefaultFramePeriodMs,
|
| - receiver_.RenderBufferSizeMs());
|
| + receiver_.RenderBufferSizeMs());
|
| }
|
|
|
| TEST_F(TestVCMReceiver, RenderBufferSize_NotAllComplete) {
|
| @@ -132,7 +130,7 @@ TEST_F(TestVCMReceiver, RenderBufferSize_NotAllComplete) {
|
| EXPECT_GE(InsertFrame(kVideoFrameDelta, true), kNoError);
|
| }
|
| EXPECT_EQ((num_of_frames - 1) * kDefaultFramePeriodMs,
|
| - receiver_.RenderBufferSizeMs());
|
| + receiver_.RenderBufferSizeMs());
|
| }
|
|
|
| TEST_F(TestVCMReceiver, RenderBufferSize_NoKeyFrame) {
|
| @@ -143,7 +141,7 @@ TEST_F(TestVCMReceiver, RenderBufferSize_NoKeyFrame) {
|
| }
|
| int64_t next_render_time_ms = 0;
|
| VCMEncodedFrame* frame =
|
| - receiver_.FrameForDecoding(10, next_render_time_ms, false);
|
| + receiver_.FrameForDecoding(10, &next_render_time_ms, false);
|
| EXPECT_TRUE(frame == NULL);
|
| receiver_.ReleaseFrame(frame);
|
| EXPECT_GE(InsertFrame(kVideoFrameDelta, false), kNoError);
|
| @@ -161,7 +159,7 @@ TEST_F(TestVCMReceiver, NonDecodableDuration_Empty) {
|
| const int kMaxNonDecodableDuration = 500;
|
| const int kMinDelayMs = 500;
|
| receiver_.SetNackSettings(kMaxNackListSize, kMaxPacketAgeToNack,
|
| - kMaxNonDecodableDuration);
|
| + kMaxNonDecodableDuration);
|
| EXPECT_GE(InsertFrame(kVideoFrameKey, true), kNoError);
|
| // Advance time until it's time to decode the key frame.
|
| clock_->AdvanceTimeMilliseconds(kMinDelayMs);
|
| @@ -178,7 +176,7 @@ TEST_F(TestVCMReceiver, NonDecodableDuration_NoKeyFrame) {
|
| const int kMaxPacketAgeToNack = 1000;
|
| const int kMaxNonDecodableDuration = 500;
|
| receiver_.SetNackSettings(kMaxNackListSize, kMaxPacketAgeToNack,
|
| - kMaxNonDecodableDuration);
|
| + kMaxNonDecodableDuration);
|
| const int kNumFrames = kDefaultFrameRate * kMaxNonDecodableDuration / 1000;
|
| for (int i = 0; i < kNumFrames; ++i) {
|
| EXPECT_GE(InsertFrame(kVideoFrameDelta, true), kNoError);
|
| @@ -194,24 +192,23 @@ TEST_F(TestVCMReceiver, NonDecodableDuration_OneIncomplete) {
|
| const size_t kMaxNackListSize = 1000;
|
| const int kMaxPacketAgeToNack = 1000;
|
| const int kMaxNonDecodableDuration = 500;
|
| - const int kMaxNonDecodableDurationFrames = (kDefaultFrameRate *
|
| - kMaxNonDecodableDuration + 500) / 1000;
|
| + const int kMaxNonDecodableDurationFrames =
|
| + (kDefaultFrameRate * kMaxNonDecodableDuration + 500) / 1000;
|
| const int kMinDelayMs = 500;
|
| receiver_.SetNackSettings(kMaxNackListSize, kMaxPacketAgeToNack,
|
| - kMaxNonDecodableDuration);
|
| + kMaxNonDecodableDuration);
|
| receiver_.SetMinReceiverDelay(kMinDelayMs);
|
| int64_t key_frame_inserted = clock_->TimeInMilliseconds();
|
| EXPECT_GE(InsertFrame(kVideoFrameKey, true), kNoError);
|
| // Insert an incomplete frame.
|
| EXPECT_GE(InsertFrame(kVideoFrameDelta, false), kNoError);
|
| // Insert enough frames to have too long non-decodable sequence.
|
| - for (int i = 0; i < kMaxNonDecodableDurationFrames;
|
| - ++i) {
|
| + for (int i = 0; i < kMaxNonDecodableDurationFrames; ++i) {
|
| EXPECT_GE(InsertFrame(kVideoFrameDelta, true), kNoError);
|
| }
|
| // Advance time until it's time to decode the key frame.
|
| clock_->AdvanceTimeMilliseconds(kMinDelayMs - clock_->TimeInMilliseconds() -
|
| - key_frame_inserted);
|
| + key_frame_inserted);
|
| EXPECT_TRUE(DecodeNextFrame());
|
| // Make sure we get a key frame request.
|
| bool request_key_frame = false;
|
| @@ -225,11 +222,11 @@ TEST_F(TestVCMReceiver, NonDecodableDuration_NoTrigger) {
|
| const size_t kMaxNackListSize = 1000;
|
| const int kMaxPacketAgeToNack = 1000;
|
| const int kMaxNonDecodableDuration = 500;
|
| - const int kMaxNonDecodableDurationFrames = (kDefaultFrameRate *
|
| - kMaxNonDecodableDuration + 500) / 1000;
|
| + const int kMaxNonDecodableDurationFrames =
|
| + (kDefaultFrameRate * kMaxNonDecodableDuration + 500) / 1000;
|
| const int kMinDelayMs = 500;
|
| receiver_.SetNackSettings(kMaxNackListSize, kMaxPacketAgeToNack,
|
| - kMaxNonDecodableDuration);
|
| + kMaxNonDecodableDuration);
|
| receiver_.SetMinReceiverDelay(kMinDelayMs);
|
| int64_t key_frame_inserted = clock_->TimeInMilliseconds();
|
| EXPECT_GE(InsertFrame(kVideoFrameKey, true), kNoError);
|
| @@ -237,13 +234,12 @@ TEST_F(TestVCMReceiver, NonDecodableDuration_NoTrigger) {
|
| EXPECT_GE(InsertFrame(kVideoFrameDelta, false), kNoError);
|
| // Insert all but one frame to not trigger a key frame request due to
|
| // too long duration of non-decodable frames.
|
| - for (int i = 0; i < kMaxNonDecodableDurationFrames - 1;
|
| - ++i) {
|
| + for (int i = 0; i < kMaxNonDecodableDurationFrames - 1; ++i) {
|
| EXPECT_GE(InsertFrame(kVideoFrameDelta, true), kNoError);
|
| }
|
| // Advance time until it's time to decode the key frame.
|
| clock_->AdvanceTimeMilliseconds(kMinDelayMs - clock_->TimeInMilliseconds() -
|
| - key_frame_inserted);
|
| + key_frame_inserted);
|
| EXPECT_TRUE(DecodeNextFrame());
|
| // Make sure we don't get a key frame request since we haven't generated
|
| // enough frames.
|
| @@ -258,25 +254,24 @@ TEST_F(TestVCMReceiver, NonDecodableDuration_NoTrigger2) {
|
| const size_t kMaxNackListSize = 1000;
|
| const int kMaxPacketAgeToNack = 1000;
|
| const int kMaxNonDecodableDuration = 500;
|
| - const int kMaxNonDecodableDurationFrames = (kDefaultFrameRate *
|
| - kMaxNonDecodableDuration + 500) / 1000;
|
| + const int kMaxNonDecodableDurationFrames =
|
| + (kDefaultFrameRate * kMaxNonDecodableDuration + 500) / 1000;
|
| const int kMinDelayMs = 500;
|
| receiver_.SetNackSettings(kMaxNackListSize, kMaxPacketAgeToNack,
|
| - kMaxNonDecodableDuration);
|
| + kMaxNonDecodableDuration);
|
| receiver_.SetMinReceiverDelay(kMinDelayMs);
|
| int64_t key_frame_inserted = clock_->TimeInMilliseconds();
|
| EXPECT_GE(InsertFrame(kVideoFrameKey, true), kNoError);
|
| // Insert enough frames to have too long non-decodable sequence, except that
|
| // we don't have any losses.
|
| - for (int i = 0; i < kMaxNonDecodableDurationFrames;
|
| - ++i) {
|
| + for (int i = 0; i < kMaxNonDecodableDurationFrames; ++i) {
|
| EXPECT_GE(InsertFrame(kVideoFrameDelta, true), kNoError);
|
| }
|
| // Insert an incomplete frame.
|
| EXPECT_GE(InsertFrame(kVideoFrameDelta, false), kNoError);
|
| // Advance time until it's time to decode the key frame.
|
| clock_->AdvanceTimeMilliseconds(kMinDelayMs - clock_->TimeInMilliseconds() -
|
| - key_frame_inserted);
|
| + key_frame_inserted);
|
| EXPECT_TRUE(DecodeNextFrame());
|
| // Make sure we don't get a key frame request since the non-decodable duration
|
| // is only one frame.
|
| @@ -291,25 +286,24 @@ TEST_F(TestVCMReceiver, NonDecodableDuration_KeyFrameAfterIncompleteFrames) {
|
| const size_t kMaxNackListSize = 1000;
|
| const int kMaxPacketAgeToNack = 1000;
|
| const int kMaxNonDecodableDuration = 500;
|
| - const int kMaxNonDecodableDurationFrames = (kDefaultFrameRate *
|
| - kMaxNonDecodableDuration + 500) / 1000;
|
| + const int kMaxNonDecodableDurationFrames =
|
| + (kDefaultFrameRate * kMaxNonDecodableDuration + 500) / 1000;
|
| const int kMinDelayMs = 500;
|
| receiver_.SetNackSettings(kMaxNackListSize, kMaxPacketAgeToNack,
|
| - kMaxNonDecodableDuration);
|
| + kMaxNonDecodableDuration);
|
| receiver_.SetMinReceiverDelay(kMinDelayMs);
|
| int64_t key_frame_inserted = clock_->TimeInMilliseconds();
|
| EXPECT_GE(InsertFrame(kVideoFrameKey, true), kNoError);
|
| // Insert an incomplete frame.
|
| EXPECT_GE(InsertFrame(kVideoFrameDelta, false), kNoError);
|
| // Insert enough frames to have too long non-decodable sequence.
|
| - for (int i = 0; i < kMaxNonDecodableDurationFrames;
|
| - ++i) {
|
| + for (int i = 0; i < kMaxNonDecodableDurationFrames; ++i) {
|
| EXPECT_GE(InsertFrame(kVideoFrameDelta, true), kNoError);
|
| }
|
| EXPECT_GE(InsertFrame(kVideoFrameKey, true), kNoError);
|
| // Advance time until it's time to decode the key frame.
|
| clock_->AdvanceTimeMilliseconds(kMinDelayMs - clock_->TimeInMilliseconds() -
|
| - key_frame_inserted);
|
| + key_frame_inserted);
|
| EXPECT_TRUE(DecodeNextFrame());
|
| // Make sure we don't get a key frame request since we have a key frame
|
| // in the list.
|
| @@ -340,7 +334,7 @@ class SimulatedClockWithFrames : public SimulatedClock {
|
| // Return true if some frame arrives between now and now+|milliseconds|.
|
| bool AdvanceTimeMilliseconds(int64_t milliseconds, bool stop_on_frame) {
|
| return AdvanceTimeMicroseconds(milliseconds * 1000, stop_on_frame);
|
| - };
|
| + }
|
|
|
| bool AdvanceTimeMicroseconds(int64_t microseconds, bool stop_on_frame) {
|
| int64_t start_time = TimeInMicroseconds();
|
| @@ -364,7 +358,7 @@ class SimulatedClockWithFrames : public SimulatedClock {
|
| SimulatedClock::AdvanceTimeMicroseconds(end_time - TimeInMicroseconds());
|
| }
|
| return frame_injected;
|
| - };
|
| + }
|
|
|
| // Input timestamps are in unit Milliseconds.
|
| // And |arrive_timestamps| must be positive and in increasing order.
|
| @@ -431,7 +425,7 @@ class FrameInjectEvent : public EventWrapper {
|
|
|
| bool Set() override { return true; }
|
|
|
| - EventTypeWrapper Wait(unsigned long max_time) override {
|
| + EventTypeWrapper Wait(unsigned long max_time) override { // NOLINT
|
| if (clock_->AdvanceTimeMilliseconds(max_time, stop_on_frame_) &&
|
| stop_on_frame_) {
|
| return EventTypeWrapper::kEventSignaled;
|
| @@ -447,7 +441,6 @@ class FrameInjectEvent : public EventWrapper {
|
|
|
| class VCMReceiverTimingTest : public ::testing::Test {
|
| protected:
|
| -
|
| VCMReceiverTimingTest()
|
|
|
| : clock_(&stream_generator_, &receiver_),
|
| @@ -460,7 +453,6 @@ class VCMReceiverTimingTest : public ::testing::Test {
|
| rtc::scoped_ptr<EventWrapper>(
|
| new FrameInjectEvent(&clock_, true))) {}
|
|
|
| -
|
| virtual void SetUp() { receiver_.Reset(); }
|
|
|
| SimulatedClockWithFrames clock_;
|
| @@ -506,7 +498,7 @@ TEST_F(VCMReceiverTimingTest, FrameForDecoding) {
|
| while (num_frames_return < kNumFrames) {
|
| int64_t start_time = clock_.TimeInMilliseconds();
|
| VCMEncodedFrame* frame =
|
| - receiver_.FrameForDecoding(kMaxWaitTime, next_render_time, false);
|
| + receiver_.FrameForDecoding(kMaxWaitTime, &next_render_time, false);
|
| int64_t end_time = clock_.TimeInMilliseconds();
|
|
|
| // In any case the FrameForDecoding should not wait longer than
|
| @@ -566,9 +558,8 @@ TEST_F(VCMReceiverTimingTest, FrameForDecodingPreferLateDecoding) {
|
| while (num_frames_return < kNumFrames) {
|
| int64_t start_time = clock_.TimeInMilliseconds();
|
|
|
| - VCMEncodedFrame* frame =
|
| - receiver_.FrameForDecoding(kMaxWaitTime, next_render_time,
|
| - prefer_late_decoding);
|
| + VCMEncodedFrame* frame = receiver_.FrameForDecoding(
|
| + kMaxWaitTime, &next_render_time, prefer_late_decoding);
|
| int64_t end_time = clock_.TimeInMilliseconds();
|
| if (frame) {
|
| EXPECT_EQ(frame->RenderTimeMs() - max_decode_ms - render_delay_ms,
|
|
|