| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "media/base/pipeline.h" | 5 #include "media/base/pipeline.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 MOCK_METHOD1(OnError, void(PipelineStatus)); | 90 MOCK_METHOD1(OnError, void(PipelineStatus)); |
| 91 MOCK_METHOD1(OnMetadata, void(PipelineMetadata)); | 91 MOCK_METHOD1(OnMetadata, void(PipelineMetadata)); |
| 92 MOCK_METHOD1(OnBufferingStateChange, void(BufferingState)); | 92 MOCK_METHOD1(OnBufferingStateChange, void(BufferingState)); |
| 93 MOCK_METHOD0(OnDurationChange, void()); | 93 MOCK_METHOD0(OnDurationChange, void()); |
| 94 | 94 |
| 95 private: | 95 private: |
| 96 DISALLOW_COPY_AND_ASSIGN(CallbackHelper); | 96 DISALLOW_COPY_AND_ASSIGN(CallbackHelper); |
| 97 }; | 97 }; |
| 98 | 98 |
| 99 PipelineTest() | 99 PipelineTest() |
| 100 : pipeline_(new Pipeline(message_loop_.task_runner(), | 100 : pipeline_( |
| 101 new MediaLog())), | 101 new PipelineImpl(message_loop_.task_runner(), new MediaLog())), |
| 102 demuxer_(new StrictMock<MockDemuxer>()), | 102 demuxer_(new StrictMock<MockDemuxer>()), |
| 103 scoped_renderer_(new StrictMock<MockRenderer>()), | 103 scoped_renderer_(new StrictMock<MockRenderer>()), |
| 104 renderer_(scoped_renderer_.get()) { | 104 renderer_(scoped_renderer_.get()) { |
| 105 // SetDemuxerExpectations() adds overriding expectations for expected | 105 // SetDemuxerExpectations() adds overriding expectations for expected |
| 106 // non-NULL streams. | 106 // non-NULL streams. |
| 107 DemuxerStream* null_pointer = NULL; | 107 DemuxerStream* null_pointer = NULL; |
| 108 EXPECT_CALL(*demuxer_, GetStream(_)) | 108 EXPECT_CALL(*demuxer_, GetStream(_)) |
| 109 .WillRepeatedly(Return(null_pointer)); | 109 .WillRepeatedly(Return(null_pointer)); |
| 110 | 110 |
| 111 EXPECT_CALL(*demuxer_, GetTimelineOffset()) | 111 EXPECT_CALL(*demuxer_, GetTimelineOffset()) |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 void AddTextStream() { | 186 void AddTextStream() { |
| 187 EXPECT_CALL(*this, OnAddTextTrack(_,_)) | 187 EXPECT_CALL(*this, OnAddTextTrack(_,_)) |
| 188 .WillOnce(Invoke(this, &PipelineTest::DoOnAddTextTrack)); | 188 .WillOnce(Invoke(this, &PipelineTest::DoOnAddTextTrack)); |
| 189 static_cast<DemuxerHost*>(pipeline_.get())->AddTextStream(text_stream(), | 189 static_cast<DemuxerHost*>(pipeline_.get())->AddTextStream(text_stream(), |
| 190 TextTrackConfig(kTextSubtitles, "", "", "")); | 190 TextTrackConfig(kTextSubtitles, "", "", "")); |
| 191 message_loop_.RunUntilIdle(); | 191 message_loop_.RunUntilIdle(); |
| 192 } | 192 } |
| 193 | 193 |
| 194 void StartPipeline() { | 194 void StartPipeline() { |
| 195 EXPECT_CALL(*this, OnWaitingForDecryptionKey()).Times(0); | 195 EXPECT_CALL(*this, OnWaitingForDecryptionKey()).Times(0); |
| 196 scoped_ptr<Renderer> renderer = std::move(scoped_renderer_); |
| 196 pipeline_->Start( | 197 pipeline_->Start( |
| 197 demuxer_.get(), std::move(scoped_renderer_), | 198 demuxer_.get(), &renderer, |
| 198 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), | 199 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), |
| 199 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), | 200 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), |
| 200 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)), | 201 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)), |
| 201 base::Bind(&CallbackHelper::OnMetadata, base::Unretained(&callbacks_)), | 202 base::Bind(&CallbackHelper::OnMetadata, base::Unretained(&callbacks_)), |
| 202 base::Bind(&CallbackHelper::OnBufferingStateChange, | 203 base::Bind(&CallbackHelper::OnBufferingStateChange, |
| 203 base::Unretained(&callbacks_)), | 204 base::Unretained(&callbacks_)), |
| 204 base::Bind(&CallbackHelper::OnDurationChange, | 205 base::Bind(&CallbackHelper::OnDurationChange, |
| 205 base::Unretained(&callbacks_)), | 206 base::Unretained(&callbacks_)), |
| 206 base::Bind(&PipelineTest::OnAddTextTrack, base::Unretained(this)), | 207 base::Bind(&PipelineTest::OnAddTextTrack, base::Unretained(this)), |
| 207 base::Bind(&PipelineTest::OnWaitingForDecryptionKey, | 208 base::Bind(&PipelineTest::OnWaitingForDecryptionKey, |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 308 EXPECT_CALL(*renderer_, SetPlaybackRate(_)); | 309 EXPECT_CALL(*renderer_, SetPlaybackRate(_)); |
| 309 EXPECT_CALL(*renderer_, SetVolume(_)); | 310 EXPECT_CALL(*renderer_, SetVolume(_)); |
| 310 EXPECT_CALL(*renderer_, StartPlayingFrom(seek_time)) | 311 EXPECT_CALL(*renderer_, StartPlayingFrom(seek_time)) |
| 311 .WillOnce( | 312 .WillOnce( |
| 312 SetBufferingState(&buffering_state_cb_, BUFFERING_HAVE_ENOUGH)); | 313 SetBufferingState(&buffering_state_cb_, BUFFERING_HAVE_ENOUGH)); |
| 313 EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)); | 314 EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)); |
| 314 EXPECT_CALL(callbacks_, OnResume(PIPELINE_OK)); | 315 EXPECT_CALL(callbacks_, OnResume(PIPELINE_OK)); |
| 315 } | 316 } |
| 316 | 317 |
| 317 void DoResume(const base::TimeDelta& seek_time) { | 318 void DoResume(const base::TimeDelta& seek_time) { |
| 319 scoped_ptr<Renderer> renderer = std::move(scoped_renderer_); |
| 318 pipeline_->Resume( | 320 pipeline_->Resume( |
| 319 std::move(scoped_renderer_), seek_time, | 321 &renderer, seek_time, |
| 320 base::Bind(&CallbackHelper::OnResume, base::Unretained(&callbacks_))); | 322 base::Bind(&CallbackHelper::OnResume, base::Unretained(&callbacks_))); |
| 321 message_loop_.RunUntilIdle(); | 323 message_loop_.RunUntilIdle(); |
| 322 } | 324 } |
| 323 | 325 |
| 324 void DestroyPipeline() { | 326 void DestroyPipeline() { |
| 325 // In real code Pipeline could be destroyed on a different thread. All weak | 327 // In real code Pipeline could be destroyed on a different thread. All weak |
| 326 // pointers must have been invalidated before the stop callback returns. | 328 // pointers must have been invalidated before the stop callback returns. |
| 327 DCHECK(!pipeline_->HasWeakPtrsForTesting()); | 329 DCHECK(!pipeline_->HasWeakPtrsForTesting()); |
| 328 pipeline_.reset(); | 330 pipeline_.reset(); |
| 329 } | 331 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 347 void DoOnAddTextTrack(const TextTrackConfig& config, | 349 void DoOnAddTextTrack(const TextTrackConfig& config, |
| 348 const AddTextTrackDoneCB& done_cb) { | 350 const AddTextTrackDoneCB& done_cb) { |
| 349 scoped_ptr<TextTrack> text_track(new MockTextTrack); | 351 scoped_ptr<TextTrack> text_track(new MockTextTrack); |
| 350 done_cb.Run(std::move(text_track)); | 352 done_cb.Run(std::move(text_track)); |
| 351 } | 353 } |
| 352 | 354 |
| 353 // Fixture members. | 355 // Fixture members. |
| 354 StrictMock<CallbackHelper> callbacks_; | 356 StrictMock<CallbackHelper> callbacks_; |
| 355 base::SimpleTestTickClock test_tick_clock_; | 357 base::SimpleTestTickClock test_tick_clock_; |
| 356 base::MessageLoop message_loop_; | 358 base::MessageLoop message_loop_; |
| 357 scoped_ptr<Pipeline> pipeline_; | 359 scoped_ptr<PipelineImpl> pipeline_; |
| 358 | 360 |
| 359 scoped_ptr<StrictMock<MockDemuxer> > demuxer_; | 361 scoped_ptr<StrictMock<MockDemuxer> > demuxer_; |
| 360 scoped_ptr<StrictMock<MockRenderer> > scoped_renderer_; | 362 scoped_ptr<StrictMock<MockRenderer> > scoped_renderer_; |
| 361 StrictMock<MockRenderer>* renderer_; | 363 StrictMock<MockRenderer>* renderer_; |
| 362 StrictMock<CallbackHelper> text_renderer_callbacks_; | 364 StrictMock<CallbackHelper> text_renderer_callbacks_; |
| 363 TextRenderer* text_renderer_; | 365 TextRenderer* text_renderer_; |
| 364 scoped_ptr<StrictMock<MockDemuxerStream> > audio_stream_; | 366 scoped_ptr<StrictMock<MockDemuxerStream> > audio_stream_; |
| 365 scoped_ptr<StrictMock<MockDemuxerStream> > video_stream_; | 367 scoped_ptr<StrictMock<MockDemuxerStream> > video_stream_; |
| 366 scoped_ptr<FakeTextTrackStream> text_stream_; | 368 scoped_ptr<FakeTextTrackStream> text_stream_; |
| 367 BufferingStateCB buffering_state_cb_; | 369 BufferingStateCB buffering_state_cb_; |
| (...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 727 EXPECT_CALL(*demuxer_, Stop()); | 729 EXPECT_CALL(*demuxer_, Stop()); |
| 728 | 730 |
| 729 pipeline_->Seek(seek_time, base::Bind(&CallbackHelper::OnSeek, | 731 pipeline_->Seek(seek_time, base::Bind(&CallbackHelper::OnSeek, |
| 730 base::Unretained(&callbacks_))); | 732 base::Unretained(&callbacks_))); |
| 731 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_READ)); | 733 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_READ)); |
| 732 message_loop_.RunUntilIdle(); | 734 message_loop_.RunUntilIdle(); |
| 733 } | 735 } |
| 734 | 736 |
| 735 // Invoked function OnError. This asserts that the pipeline does not enqueue | 737 // Invoked function OnError. This asserts that the pipeline does not enqueue |
| 736 // non-teardown related tasks while tearing down. | 738 // non-teardown related tasks while tearing down. |
| 737 static void TestNoCallsAfterError( | 739 static void TestNoCallsAfterError(PipelineImpl* pipeline, |
| 738 Pipeline* pipeline, base::MessageLoop* message_loop, | 740 base::MessageLoop* message_loop, |
| 739 PipelineStatus /* status */) { | 741 PipelineStatus /* status */) { |
| 740 CHECK(pipeline); | 742 CHECK(pipeline); |
| 741 CHECK(message_loop); | 743 CHECK(message_loop); |
| 742 | 744 |
| 743 // When we get to this stage, the message loop should be empty. | 745 // When we get to this stage, the message loop should be empty. |
| 744 EXPECT_TRUE(message_loop->IsIdleForTesting()); | 746 EXPECT_TRUE(message_loop->IsIdleForTesting()); |
| 745 | 747 |
| 746 // Make calls on pipeline after error has occurred. | 748 // Make calls on pipeline after error has occurred. |
| 747 pipeline->SetPlaybackRate(0.5); | 749 pipeline->SetPlaybackRate(0.5); |
| 748 pipeline->SetVolume(0.5f); | 750 pipeline->SetVolume(0.5f); |
| 749 | 751 |
| (...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1157 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); | 1159 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); |
| 1158 INSTANTIATE_TEARDOWN_TEST(Error, Playing); | 1160 INSTANTIATE_TEARDOWN_TEST(Error, Playing); |
| 1159 INSTANTIATE_TEARDOWN_TEST(Error, Suspending); | 1161 INSTANTIATE_TEARDOWN_TEST(Error, Suspending); |
| 1160 INSTANTIATE_TEARDOWN_TEST(Error, Suspended); | 1162 INSTANTIATE_TEARDOWN_TEST(Error, Suspended); |
| 1161 INSTANTIATE_TEARDOWN_TEST(Error, Resuming); | 1163 INSTANTIATE_TEARDOWN_TEST(Error, Resuming); |
| 1162 | 1164 |
| 1163 INSTANTIATE_TEARDOWN_TEST(ErrorAndStop, Playing); | 1165 INSTANTIATE_TEARDOWN_TEST(ErrorAndStop, Playing); |
| 1164 INSTANTIATE_TEARDOWN_TEST(ErrorAndStop, Suspended); | 1166 INSTANTIATE_TEARDOWN_TEST(ErrorAndStop, Suspended); |
| 1165 | 1167 |
| 1166 } // namespace media | 1168 } // namespace media |
| OLD | NEW |