Index: media/filters/video_renderer_impl_unittest.cc |
diff --git a/media/filters/video_renderer_impl_unittest.cc b/media/filters/video_renderer_impl_unittest.cc |
index b48d9071c2c4c79d756ee21114fb9a587aa70e2c..aee55f7d8da52ea96d29b3886ab84141a093e567 100644 |
--- a/media/filters/video_renderer_impl_unittest.cc |
+++ b/media/filters/video_renderer_impl_unittest.cc |
@@ -19,6 +19,8 @@ |
#include "media/base/mock_filters.h" |
#include "media/base/test_helpers.h" |
#include "media/base/video_frame.h" |
+#include "media/filters/clockless_video_frame_scheduler.h" |
+#include "media/filters/video_frame_scheduler_impl.h" |
#include "media/filters/video_renderer_impl.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -46,10 +48,18 @@ class VideoRendererImplTest : public ::testing::Test { |
renderer_.reset(new VideoRendererImpl( |
message_loop_.message_loop_proxy(), |
+ scoped_ptr<VideoFrameScheduler>( |
+#if 1 |
+ new ClocklessVideoFrameScheduler(base::Bind( |
+ &VideoRendererImplTest::OnPaint, base::Unretained(this)))), |
+#else |
+ new VideoFrameSchedulerImpl( |
+ message_loop_.message_loop_proxy(), |
+ base::Bind(&VideoRendererImplTest::OnPaint, |
+ base::Unretained(this)))), |
+#endif |
decoders.Pass(), |
- media::SetDecryptorReadyCB(), |
- base::Bind(&VideoRendererImplTest::OnPaint, base::Unretained(this)), |
- true)); |
+ media::SetDecryptorReadyCB())); |
demuxer_stream_.set_video_decoder_config(TestVideoConfig::Normal()); |
@@ -89,9 +99,6 @@ class VideoRendererImplTest : public ::testing::Test { |
EXPECT_CALL(*decoder_, Initialize(_, _)) |
.WillOnce(RunCallback<1>(PIPELINE_OK)); |
- // Set playback rate before anything else happens. |
- renderer_->SetPlaybackRate(1.0f); |
- |
// Initialize, we shouldn't have any reads. |
InitializeRenderer(PIPELINE_OK); |
@@ -122,6 +129,11 @@ class VideoRendererImplTest : public ::testing::Test { |
base::Unretained(this))); |
} |
+ void SetPlaybackRate(float playback_rate) { |
+ SCOPED_TRACE(base::StringPrintf("SetPlaybackRate(%f)", playback_rate)); |
+ renderer_->SetPlaybackRate(playback_rate); |
+ } |
+ |
void Play() { |
SCOPED_TRACE("Play()"); |
WaitableMessageLoopEvent event; |
@@ -216,20 +228,18 @@ class VideoRendererImplTest : public ::testing::Test { |
} |
void ResetCurrentFrame() { |
- base::AutoLock l(lock_); |
current_frame_ = NULL; |
} |
scoped_refptr<VideoFrame> GetCurrentFrame() { |
- base::AutoLock l(lock_); |
return current_frame_; |
} |
int GetCurrentTimestampInMs() { |
scoped_refptr<VideoFrame> frame = GetCurrentFrame(); |
- if (!frame.get()) |
+ if (!current_frame_) |
return -1; |
- return frame->timestamp().InMilliseconds(); |
+ return current_frame_->timestamp().InMilliseconds(); |
} |
void WaitForError(PipelineStatus expected) { |
@@ -268,12 +278,13 @@ class VideoRendererImplTest : public ::testing::Test { |
read_cb_.Reset(); |
decode_results_.pop_front(); |
+ LOG(ERROR) << __FUNCTION__; |
+ |
message_loop_.PostTask(FROM_HERE, closure); |
} |
void AdvanceTimeInMs(int time_ms) { |
DCHECK_EQ(&message_loop_, base::MessageLoop::current()); |
- base::AutoLock l(lock_); |
time_ += base::TimeDelta::FromMilliseconds(time_ms); |
DCHECK_LE(time_.InMicroseconds(), duration_.InMicroseconds()); |
} |
@@ -287,7 +298,6 @@ class VideoRendererImplTest : public ::testing::Test { |
private: |
base::TimeDelta GetTime() { |
- base::AutoLock l(lock_); |
return time_; |
} |
@@ -296,12 +306,13 @@ class VideoRendererImplTest : public ::testing::Test { |
} |
void OnPaint(const scoped_refptr<VideoFrame>& frame) { |
- base::AutoLock l(lock_); |
+ LOG(ERROR) << __FUNCTION__ << " ts=" << frame->timestamp().InMicroseconds(); |
current_frame_ = frame; |
} |
void FrameRequested(const scoped_refptr<DecoderBuffer>& buffer, |
const VideoDecoder::DecodeCB& read_cb) { |
+ LOG(ERROR) << __FUNCTION__; |
DCHECK_EQ(&message_loop_, base::MessageLoop::current()); |
CHECK(read_cb_.is_null()); |
read_cb_ = read_cb; |
@@ -338,8 +349,6 @@ class VideoRendererImplTest : public ::testing::Test { |
base::MessageLoop message_loop_; |
- // Used to protect |time_| and |current_frame_|. |
- base::Lock lock_; |
base::TimeDelta time_; |
scoped_refptr<VideoFrame> current_frame_; |
@@ -406,6 +415,7 @@ TEST_F(VideoRendererImplTest, Play) { |
TEST_F(VideoRendererImplTest, EndOfStream_DefaultFrameDuration) { |
Initialize(); |
+ SetPlaybackRate(1.0); // Can't reach end of stream with zero playback rate. |
Play(); |
// Verify that the ended callback fires when the default last frame duration |
@@ -424,6 +434,7 @@ TEST_F(VideoRendererImplTest, EndOfStream_DefaultFrameDuration) { |
TEST_F(VideoRendererImplTest, EndOfStream_ClipDuration) { |
int duration = kVideoDurationInMs + kFrameDurationInMs / 2; |
InitializeWithDuration(duration); |
+ SetPlaybackRate(1.0); // Can't reach end of stream with zero playback rate. |
Play(); |
// Render all frames except for the last |limits::kMaxVideoFrames| frames |
@@ -440,6 +451,7 @@ TEST_F(VideoRendererImplTest, EndOfStream_ClipDuration) { |
// Queue the end of stream frame and wait for the last frame to be rendered. |
QueueEndOfStream(); |
+ SatisfyPendingRead(); |
AdvanceTimeInMs(duration); |
WaitForEnded(); |
@@ -448,10 +460,12 @@ TEST_F(VideoRendererImplTest, EndOfStream_ClipDuration) { |
TEST_F(VideoRendererImplTest, DecodeError_Playing) { |
Initialize(); |
+ SetPlaybackRate(1.0); |
Play(); |
QueueDecodeError(); |
- AdvanceTimeInMs(kVideoDurationInMs); |
+ SatisfyPendingRead(); |
+ // AdvanceTimeInMs(kVideoDurationInMs); |
WaitForError(PIPELINE_ERROR_DECODE); |
Shutdown(); |
} |
@@ -501,6 +515,7 @@ TEST_F(VideoRendererImplTest, Preroll_RightAfter) { |
TEST_F(VideoRendererImplTest, PlayAfterPreroll) { |
Initialize(); |
+ SetPlaybackRate(1.0); |
Pause(); |
Flush(); |
QueuePrerollFrames(kFrameDurationInMs * 4); |
@@ -558,7 +573,7 @@ TEST_F(VideoRendererImplTest, Rebuffer_AlreadyHaveEnoughFrames) { |
WaitableMessageLoopEvent event; |
renderer_->Preroll(kNoTimestamp(), |
event.GetPipelineStatusCB()); |
- |
+ SatisfyPendingRead(); |
event.RunAndWaitForStatus(PIPELINE_OK); |
Play(); |
@@ -602,6 +617,7 @@ TEST_F(VideoRendererImplTest, GetCurrentFrame_Flushed) { |
TEST_F(VideoRendererImplTest, GetCurrentFrame_EndOfStream) { |
Initialize(); |
+ SetPlaybackRate(1.0); // Can't reach end of stream with zero playback rate. |
Play(); |
Pause(); |
Flush(); |