Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1863)

Unified Diff: media/filters/video_renderer_impl_unittest.cc

Issue 237353007: Refactor VideoRendererImpl to use VideoFrameScheduler. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();

Powered by Google App Engine
This is Rietveld 408576698