summaryrefslogtreecommitdiffstats
path: root/media/cast/test
diff options
context:
space:
mode:
authorhubbe <hubbe@chromium.org>2014-09-03 17:51:22 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-04 00:56:44 +0000
commitb836b7126ecb26d5c2d6eb7db591ff7c1167af71 (patch)
tree547b23d1afd4b7cb59577bb382793438e62ff263 /media/cast/test
parent2551612c872f85e4f79c5d98ca21e0968239f6ae (diff)
downloadchromium_src-b836b7126ecb26d5c2d6eb7db591ff7c1167af71.zip
chromium_src-b836b7126ecb26d5c2d6eb7db591ff7c1167af71.tar.gz
chromium_src-b836b7126ecb26d5c2d6eb7db591ff7c1167af71.tar.bz2
Cast: Make vp8 3-buffer mode work
Cast was originally intended to tell vp8 to only reference buffers which have been ACKed. However, that mode was buggy and disabled. This CL fixes it again. The three-buffer mode lets the receiver drop frames and continue, which should be quite useful if we want lower latency. BUG=351596 Review URL: https://codereview.chromium.org/339743002 Cr-Commit-Position: refs/heads/master@{#293243}
Diffstat (limited to 'media/cast/test')
-rw-r--r--media/cast/test/end2end_unittest.cc89
1 files changed, 13 insertions, 76 deletions
diff --git a/media/cast/test/end2end_unittest.cc b/media/cast/test/end2end_unittest.cc
index 23fecf5..0580d2c 100644
--- a/media/cast/test/end2end_unittest.cc
+++ b/media/cast/test/end2end_unittest.cc
@@ -210,7 +210,7 @@ class LoopBackTransport : public PacketSender {
const base::Closure& cb) OVERRIDE {
DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
if (!send_packets_)
- return false;
+ return true;
bytes_sent_ += packet->data.size();
if (drop_packets_belonging_to_odd_frames_) {
@@ -406,7 +406,9 @@ class TestReceiverVideoCallback
PopulateVideoFrame(expected_I420_frame.get(),
expected_video_frame.start_value);
- EXPECT_GE(I420PSNR(expected_I420_frame, video_frame), kVideoAcceptedPSNR);
+ if (expected_video_frame.should_be_continuous) {
+ EXPECT_GE(I420PSNR(expected_I420_frame, video_frame), kVideoAcceptedPSNR);
+ }
EXPECT_NEAR(
(playout_time - expected_video_frame.playout_time).InMillisecondsF(),
@@ -988,79 +990,14 @@ TEST_F(End2EndTest, DISABLED_StartSenderBeforeReceiver) {
EXPECT_EQ(10, test_receiver_video_callback_->number_times_called());
}
-// This tests a network glitch lasting for 10 video frames.
-// Flaky. See crbug.com/351596.
-TEST_F(End2EndTest, DISABLED_GlitchWith3Buffers) {
- Configure(CODEC_VIDEO_VP8, CODEC_AUDIO_OPUS,
- kDefaultAudioSamplingRate, 3);
- video_sender_config_.target_playout_delay =
- base::TimeDelta::FromMilliseconds(67);
- video_receiver_config_.rtp_max_delay_ms = 67;
- Create();
-
- int video_start = kVideoStart;
- base::TimeTicks capture_time;
- // Frames will rendered on completion until the render time stabilizes, i.e.
- // we got enough data.
- const int frames_before_glitch = 20;
- for (int i = 0; i < frames_before_glitch; ++i) {
- capture_time = testing_clock_sender_->NowTicks();
- SendVideoFrame(video_start, capture_time);
- test_receiver_video_callback_->AddExpectedResult(
- video_start,
- video_sender_config_.width,
- video_sender_config_.height,
- capture_time + base::TimeDelta::FromMilliseconds(kTargetPlayoutDelayMs),
- true);
- cast_receiver_->RequestDecodedVideoFrame(
- base::Bind(&TestReceiverVideoCallback::CheckVideoFrame,
- test_receiver_video_callback_));
- RunTasks(kFrameTimerMs);
- video_start++;
- }
-
- // Introduce a glitch lasting for 10 frames.
- sender_to_receiver_.SetSendPackets(false);
- for (int i = 0; i < 10; ++i) {
- capture_time = testing_clock_sender_->NowTicks();
- // First 3 will be sent and lost.
- SendVideoFrame(video_start, capture_time);
- RunTasks(kFrameTimerMs);
- video_start++;
- }
- sender_to_receiver_.SetSendPackets(true);
- RunTasks(100);
- capture_time = testing_clock_sender_->NowTicks();
-
- // Frame 1 should be acked by now and we should have an opening to send 4.
- SendVideoFrame(video_start, capture_time);
- RunTasks(kFrameTimerMs);
-
- // Frames 1-3 are old frames by now, and therefore should be decoded, but
- // not rendered. The next frame we expect to render is frame #4.
- test_receiver_video_callback_->AddExpectedResult(
- video_start,
- video_sender_config_.width,
- video_sender_config_.height,
- capture_time + base::TimeDelta::FromMilliseconds(kTargetPlayoutDelayMs),
- true);
-
- cast_receiver_->RequestDecodedVideoFrame(
- base::Bind(&TestReceiverVideoCallback::CheckVideoFrame,
- test_receiver_video_callback_));
-
- RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline.
- EXPECT_EQ(frames_before_glitch + 1,
- test_receiver_video_callback_->number_times_called());
-}
-
-// Disabled due to flakiness and crashiness. http://crbug.com/360951
-TEST_F(End2EndTest, DISABLED_DropEveryOtherFrame3Buffers) {
- Configure(CODEC_VIDEO_VP8, CODEC_AUDIO_OPUS,
- kDefaultAudioSamplingRate, 3);
+TEST_F(End2EndTest, DropEveryOtherFrame3Buffers) {
+ Configure(CODEC_VIDEO_VP8, CODEC_AUDIO_OPUS, kDefaultAudioSamplingRate, 3);
+ int target_delay = 300;
video_sender_config_.target_playout_delay =
- base::TimeDelta::FromMilliseconds(67);
- video_receiver_config_.rtp_max_delay_ms = 67;
+ base::TimeDelta::FromMilliseconds(target_delay);
+ audio_sender_config_.target_playout_delay =
+ base::TimeDelta::FromMilliseconds(target_delay);
+ video_receiver_config_.rtp_max_delay_ms = target_delay;
Create();
sender_to_receiver_.DropAllPacketsBelongingToOddFrames();
@@ -1078,7 +1015,7 @@ TEST_F(End2EndTest, DISABLED_DropEveryOtherFrame3Buffers) {
video_sender_config_.width,
video_sender_config_.height,
capture_time +
- base::TimeDelta::FromMilliseconds(kTargetPlayoutDelayMs),
+ base::TimeDelta::FromMilliseconds(target_delay),
i == 0);
// GetRawVideoFrame will not return the frame until we are close in
@@ -1091,7 +1028,7 @@ TEST_F(End2EndTest, DISABLED_DropEveryOtherFrame3Buffers) {
video_start++;
}
- RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
+ RunTasks(2 * kFrameTimerMs + target_delay); // Empty the pipeline.
EXPECT_EQ(i / 2, test_receiver_video_callback_->number_times_called());
}