| Index: media/renderers/video_renderer_impl_unittest.cc
|
| diff --git a/media/renderers/video_renderer_impl_unittest.cc b/media/renderers/video_renderer_impl_unittest.cc
|
| index 90f921884e508988e5eeee4fead98bc27596e80d..18743170a5454a7d6bb9ead9c0b246e078000942 100644
|
| --- a/media/renderers/video_renderer_impl_unittest.cc
|
| +++ b/media/renderers/video_renderer_impl_unittest.cc
|
| @@ -53,13 +53,25 @@ MATCHER_P(HasTimestampMatcher, ms, "") {
|
|
|
| class VideoRendererImplTest : public testing::Test {
|
| public:
|
| - VideoRendererImplTest()
|
| - : tick_clock_(new base::SimpleTestTickClock()),
|
| - decoder_(new NiceMock<MockVideoDecoder>()),
|
| - demuxer_stream_(DemuxerStream::VIDEO) {
|
| + ScopedVector<VideoDecoder> CreateVideoDecodersForTest() {
|
| + decoder_ = new NiceMock<MockVideoDecoder>();
|
| ScopedVector<VideoDecoder> decoders;
|
| decoders.push_back(decoder_);
|
| + EXPECT_CALL(*decoder_, Initialize(_, _, _, _, _))
|
| + .WillOnce(DoAll(SaveArg<4>(&output_cb_),
|
| + RunCallback<3>(expect_init_success_)));
|
| + // Monitor decodes from the decoder.
|
| + ON_CALL(*decoder_, Decode(_, _))
|
| + .WillByDefault(Invoke(this, &VideoRendererImplTest::DecodeRequested));
|
| + ON_CALL(*decoder_, Reset(_))
|
| + .WillByDefault(Invoke(this, &VideoRendererImplTest::FlushRequested));
|
| + return decoders;
|
| + }
|
|
|
| + VideoRendererImplTest()
|
| + : tick_clock_(new base::SimpleTestTickClock()),
|
| + decoder_(nullptr),
|
| + demuxer_stream_(DemuxerStream::VIDEO) {
|
| null_video_sink_.reset(new NullVideoSink(
|
| false, base::TimeDelta::FromSecondsD(1.0 / 60),
|
| base::Bind(&MockCB::FrameReceived, base::Unretained(&mock_cb_)),
|
| @@ -67,7 +79,10 @@ class VideoRendererImplTest : public testing::Test {
|
|
|
| renderer_.reset(new VideoRendererImpl(
|
| message_loop_.task_runner(), message_loop_.task_runner().get(),
|
| - null_video_sink_.get(), std::move(decoders), true,
|
| + null_video_sink_.get(),
|
| + base::Bind(&VideoRendererImplTest::CreateVideoDecodersForTest,
|
| + base::Unretained(this)),
|
| + true,
|
| nullptr, // gpu_factories
|
| new MediaLog()));
|
| renderer_->SetTickClockForTesting(
|
| @@ -93,34 +108,30 @@ class VideoRendererImplTest : public testing::Test {
|
| }
|
|
|
| void InitializeWithLowDelay(bool low_delay) {
|
| - // Monitor decodes from the decoder.
|
| - ON_CALL(*decoder_, Decode(_, _))
|
| - .WillByDefault(Invoke(this, &VideoRendererImplTest::DecodeRequested));
|
| - ON_CALL(*decoder_, Reset(_))
|
| - .WillByDefault(Invoke(this, &VideoRendererImplTest::FlushRequested));
|
| -
|
| // Initialize, we shouldn't have any reads.
|
| - InitializeRenderer(low_delay, true);
|
| + InitializeRenderer(&demuxer_stream_, low_delay, true);
|
| }
|
|
|
| - void InitializeRenderer(bool low_delay, bool expect_success) {
|
| + void InitializeRenderer(MockDemuxerStream* demuxer_stream,
|
| + bool low_delay,
|
| + bool expect_success) {
|
| SCOPED_TRACE(base::StringPrintf("InitializeRenderer(%d)", expect_success));
|
| + expect_init_success_ = expect_success;
|
| WaitableMessageLoopEvent event;
|
| - CallInitialize(event.GetPipelineStatusCB(), low_delay, expect_success);
|
| + CallInitialize(demuxer_stream, event.GetPipelineStatusCB(), low_delay,
|
| + expect_success);
|
| event.RunAndWaitForStatus(expect_success ? PIPELINE_OK
|
| : DECODER_ERROR_NOT_SUPPORTED);
|
| }
|
|
|
| - void CallInitialize(const PipelineStatusCB& status_cb,
|
| + void CallInitialize(MockDemuxerStream* demuxer_stream,
|
| + const PipelineStatusCB& status_cb,
|
| bool low_delay,
|
| bool expect_success) {
|
| if (low_delay)
|
| - demuxer_stream_.set_liveness(DemuxerStream::LIVENESS_LIVE);
|
| - EXPECT_CALL(*decoder_, Initialize(_, _, _, _, _))
|
| - .WillOnce(
|
| - DoAll(SaveArg<4>(&output_cb_), RunCallback<3>(expect_success)));
|
| + demuxer_stream->set_liveness(DemuxerStream::LIVENESS_LIVE);
|
| EXPECT_CALL(mock_cb_, OnWaitingForDecryptionKey()).Times(0);
|
| - renderer_->Initialize(&demuxer_stream_, nullptr, &mock_cb_,
|
| + renderer_->Initialize(demuxer_stream, nullptr, &mock_cb_,
|
| base::Bind(&WallClockTimeSource::GetWallClockTimes,
|
| base::Unretained(&time_source_)),
|
| status_cb);
|
| @@ -433,6 +444,8 @@ class VideoRendererImplTest : public testing::Test {
|
| NiceMock<MockVideoDecoder>* decoder_; // Owned by |renderer_|.
|
| NiceMock<MockDemuxerStream> demuxer_stream_;
|
|
|
| + bool expect_init_success_;
|
| +
|
| // Use StrictMock<T> to catch missing/extra callbacks.
|
| class MockCB : public MockRendererClient {
|
| public:
|
| @@ -538,8 +551,18 @@ TEST_F(VideoRendererImplTest, InitializeAndEndOfStream) {
|
| Destroy();
|
| }
|
|
|
| +TEST_F(VideoRendererImplTest, ReinitializeForAnotherStream) {
|
| + Initialize();
|
| + StartPlayingFrom(0);
|
| + Flush();
|
| + NiceMock<MockDemuxerStream> new_stream(DemuxerStream::VIDEO);
|
| + new_stream.set_video_decoder_config(TestVideoConfig::Normal());
|
| + InitializeRenderer(&new_stream, false, true);
|
| +}
|
| +
|
| TEST_F(VideoRendererImplTest, DestroyWhileInitializing) {
|
| - CallInitialize(NewExpectedStatusCB(PIPELINE_ERROR_ABORT), false, PIPELINE_OK);
|
| + CallInitialize(&demuxer_stream_, NewExpectedStatusCB(PIPELINE_ERROR_ABORT),
|
| + false, PIPELINE_OK);
|
| Destroy();
|
| }
|
|
|
| @@ -726,7 +749,7 @@ TEST_F(VideoRendererImplTest, DestroyDuringOutstandingRead) {
|
| }
|
|
|
| TEST_F(VideoRendererImplTest, VideoDecoder_InitFailure) {
|
| - InitializeRenderer(false, false);
|
| + InitializeRenderer(&demuxer_stream_, false, false);
|
| Destroy();
|
| }
|
|
|
| @@ -1151,7 +1174,8 @@ TEST_F(VideoRendererImplTest, OpacityChange) {
|
|
|
| class VideoRendererImplAsyncAddFrameReadyTest : public VideoRendererImplTest {
|
| public:
|
| - VideoRendererImplAsyncAddFrameReadyTest() {
|
| + void InitializeWithMockGpuMemoryBufferVideoFramePool() {
|
| + VideoRendererImplTest::Initialize();
|
| std::unique_ptr<GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool(
|
| new MockGpuMemoryBufferVideoFramePool(&frame_ready_cbs_));
|
| renderer_->SetGpuMemoryBufferVideoForTesting(
|
| @@ -1163,7 +1187,7 @@ class VideoRendererImplAsyncAddFrameReadyTest : public VideoRendererImplTest {
|
| };
|
|
|
| TEST_F(VideoRendererImplAsyncAddFrameReadyTest, InitializeAndStartPlayingFrom) {
|
| - Initialize();
|
| + InitializeWithMockGpuMemoryBufferVideoFramePool();
|
| QueueFrames("0 10 20 30");
|
| EXPECT_CALL(mock_cb_, FrameReceived(HasTimestampMatcher(0)));
|
| EXPECT_CALL(mock_cb_, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH));
|
| @@ -1182,7 +1206,7 @@ TEST_F(VideoRendererImplAsyncAddFrameReadyTest, InitializeAndStartPlayingFrom) {
|
| }
|
|
|
| TEST_F(VideoRendererImplAsyncAddFrameReadyTest, WeakFactoryDiscardsOneFrame) {
|
| - Initialize();
|
| + InitializeWithMockGpuMemoryBufferVideoFramePool();
|
| QueueFrames("0 10 20 30");
|
| StartPlayingFrom(0);
|
| Flush();
|
|
|