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 <vector> | 5 #include <vector> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
10 #include "base/test/simple_test_tick_clock.h" | 10 #include "base/test/simple_test_tick_clock.h" |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 if (start_status == PIPELINE_OK) { | 201 if (start_status == PIPELINE_OK) { |
202 EXPECT_CALL(callbacks_, OnMetadata(_)).WillOnce(SaveArg<0>(&metadata_)); | 202 EXPECT_CALL(callbacks_, OnMetadata(_)).WillOnce(SaveArg<0>(&metadata_)); |
203 | 203 |
204 if (audio_stream_) { | 204 if (audio_stream_) { |
205 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(0.0f)); | 205 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(0.0f)); |
206 EXPECT_CALL(*audio_renderer_, SetVolume(1.0f)); | 206 EXPECT_CALL(*audio_renderer_, SetVolume(1.0f)); |
207 | 207 |
208 // Startup sequence. | 208 // Startup sequence. |
209 EXPECT_CALL(*audio_renderer_, Preroll(base::TimeDelta(), _)) | 209 EXPECT_CALL(*audio_renderer_, Preroll(base::TimeDelta(), _)) |
210 .WillOnce(RunCallback<1>(PIPELINE_OK)); | 210 .WillOnce(RunCallback<1>(PIPELINE_OK)); |
211 EXPECT_CALL(*audio_renderer_, StartRendering()); | 211 EXPECT_CALL(*audio_renderer_, Play()); |
212 } | 212 } |
213 EXPECT_CALL(callbacks_, OnPrerollCompleted()); | 213 EXPECT_CALL(callbacks_, OnPrerollCompleted()); |
214 } | 214 } |
215 | 215 |
216 pipeline_->Start( | 216 pipeline_->Start( |
217 filter_collection_.Pass(), | 217 filter_collection_.Pass(), |
218 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), | 218 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), |
219 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), | 219 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), |
220 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)), | 220 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)), |
221 base::Bind(&CallbackHelper::OnMetadata, base::Unretained(&callbacks_)), | 221 base::Bind(&CallbackHelper::OnMetadata, base::Unretained(&callbacks_)), |
(...skipping 29 matching lines...) Expand all Loading... |
251 FakeTextTrackStream* text_stream() { | 251 FakeTextTrackStream* text_stream() { |
252 return text_stream_.get(); | 252 return text_stream_.get(); |
253 } | 253 } |
254 | 254 |
255 void ExpectSeek(const base::TimeDelta& seek_time) { | 255 void ExpectSeek(const base::TimeDelta& seek_time) { |
256 // Every filter should receive a call to Seek(). | 256 // Every filter should receive a call to Seek(). |
257 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) | 257 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) |
258 .WillOnce(RunCallback<1>(PIPELINE_OK)); | 258 .WillOnce(RunCallback<1>(PIPELINE_OK)); |
259 | 259 |
260 if (audio_stream_) { | 260 if (audio_stream_) { |
261 EXPECT_CALL(*audio_renderer_, StopRendering()); | 261 EXPECT_CALL(*audio_renderer_, Pause()); |
262 EXPECT_CALL(*audio_renderer_, Flush(_)) | 262 EXPECT_CALL(*audio_renderer_, Flush(_)) |
263 .WillOnce(RunClosure<0>()); | 263 .WillOnce(RunClosure<0>()); |
264 EXPECT_CALL(*audio_renderer_, Preroll(seek_time, _)) | 264 EXPECT_CALL(*audio_renderer_, Preroll(seek_time, _)) |
265 .WillOnce(RunCallback<1>(PIPELINE_OK)); | 265 .WillOnce(RunCallback<1>(PIPELINE_OK)); |
266 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(_)); | 266 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(_)); |
267 EXPECT_CALL(*audio_renderer_, SetVolume(_)); | 267 EXPECT_CALL(*audio_renderer_, SetVolume(_)); |
268 EXPECT_CALL(*audio_renderer_, StartRendering()); | 268 EXPECT_CALL(*audio_renderer_, Play()); |
269 } | 269 } |
270 | 270 |
271 if (video_stream_) { | 271 if (video_stream_) { |
272 EXPECT_CALL(*video_renderer_, Flush(_)) | 272 EXPECT_CALL(*video_renderer_, Flush(_)) |
273 .WillOnce(RunClosure<0>()); | 273 .WillOnce(RunClosure<0>()); |
274 EXPECT_CALL(*video_renderer_, Preroll(seek_time, _)) | 274 EXPECT_CALL(*video_renderer_, Preroll(seek_time, _)) |
275 .WillOnce(RunCallback<1>(PIPELINE_OK)); | 275 .WillOnce(RunCallback<1>(PIPELINE_OK)); |
276 EXPECT_CALL(*video_renderer_, SetPlaybackRate(_)); | 276 EXPECT_CALL(*video_renderer_, SetPlaybackRate(_)); |
277 EXPECT_CALL(*video_renderer_, Play(_)) | 277 EXPECT_CALL(*video_renderer_, Play(_)) |
278 .WillOnce(RunClosure<0>()); | 278 .WillOnce(RunClosure<0>()); |
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
657 InitializePipeline(PIPELINE_OK); | 657 InitializePipeline(PIPELINE_OK); |
658 | 658 |
659 float playback_rate = 1.0f; | 659 float playback_rate = 1.0f; |
660 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(playback_rate)); | 660 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(playback_rate)); |
661 pipeline_->SetPlaybackRate(playback_rate); | 661 pipeline_->SetPlaybackRate(playback_rate); |
662 message_loop_.RunUntilIdle(); | 662 message_loop_.RunUntilIdle(); |
663 | 663 |
664 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); | 664 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); |
665 | 665 |
666 // Preroll() isn't called as the demuxer errors out first. | 666 // Preroll() isn't called as the demuxer errors out first. |
667 EXPECT_CALL(*audio_renderer_, StopRendering()); | 667 EXPECT_CALL(*audio_renderer_, Pause()); |
668 EXPECT_CALL(*audio_renderer_, Flush(_)) | 668 EXPECT_CALL(*audio_renderer_, Flush(_)) |
669 .WillOnce(RunClosure<0>()); | 669 .WillOnce(RunClosure<0>()); |
670 EXPECT_CALL(*audio_renderer_, Stop(_)) | 670 EXPECT_CALL(*audio_renderer_, Stop(_)) |
671 .WillOnce(RunClosure<0>()); | 671 .WillOnce(RunClosure<0>()); |
672 | 672 |
673 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) | 673 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) |
674 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ)); | 674 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ)); |
675 EXPECT_CALL(*demuxer_, Stop(_)) | 675 EXPECT_CALL(*demuxer_, Stop(_)) |
676 .WillOnce(RunClosure<0>()); | 676 .WillOnce(RunClosure<0>()); |
677 | 677 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
711 | 711 |
712 // Trigger additional requests on the pipeline during tear down from error. | 712 // Trigger additional requests on the pipeline during tear down from error. |
713 base::Callback<void(PipelineStatus)> cb = base::Bind( | 713 base::Callback<void(PipelineStatus)> cb = base::Bind( |
714 &TestNoCallsAfterError, pipeline_.get(), &message_loop_); | 714 &TestNoCallsAfterError, pipeline_.get(), &message_loop_); |
715 ON_CALL(callbacks_, OnError(_)) | 715 ON_CALL(callbacks_, OnError(_)) |
716 .WillByDefault(Invoke(&cb, &base::Callback<void(PipelineStatus)>::Run)); | 716 .WillByDefault(Invoke(&cb, &base::Callback<void(PipelineStatus)>::Run)); |
717 | 717 |
718 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); | 718 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); |
719 | 719 |
720 // Seek() isn't called as the demuxer errors out first. | 720 // Seek() isn't called as the demuxer errors out first. |
721 EXPECT_CALL(*audio_renderer_, StopRendering()); | 721 EXPECT_CALL(*audio_renderer_, Pause()); |
722 EXPECT_CALL(*audio_renderer_, Flush(_)) | 722 EXPECT_CALL(*audio_renderer_, Flush(_)) |
723 .WillOnce(RunClosure<0>()); | 723 .WillOnce(RunClosure<0>()); |
724 EXPECT_CALL(*audio_renderer_, Stop(_)) | 724 EXPECT_CALL(*audio_renderer_, Stop(_)) |
725 .WillOnce(RunClosure<0>()); | 725 .WillOnce(RunClosure<0>()); |
726 | 726 |
727 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) | 727 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) |
728 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ)); | 728 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ)); |
729 EXPECT_CALL(*demuxer_, Stop(_)) | 729 EXPECT_CALL(*demuxer_, Stop(_)) |
730 .WillOnce(RunClosure<0>()); | 730 .WillOnce(RunClosure<0>()); |
731 | 731 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
801 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); | 801 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); |
802 | 802 |
803 // Arrange to trigger a time update while the demuxer is in the middle of | 803 // Arrange to trigger a time update while the demuxer is in the middle of |
804 // seeking. This update should be ignored by the pipeline and the clock should | 804 // seeking. This update should be ignored by the pipeline and the clock should |
805 // not get updated. | 805 // not get updated. |
806 base::Closure closure = base::Bind(&RunTimeCB, audio_time_cb_, 300, 700); | 806 base::Closure closure = base::Bind(&RunTimeCB, audio_time_cb_, 300, 700); |
807 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) | 807 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) |
808 .WillOnce(DoAll(InvokeWithoutArgs(&closure, &base::Closure::Run), | 808 .WillOnce(DoAll(InvokeWithoutArgs(&closure, &base::Closure::Run), |
809 RunCallback<1>(PIPELINE_OK))); | 809 RunCallback<1>(PIPELINE_OK))); |
810 | 810 |
811 EXPECT_CALL(*audio_renderer_, StopRendering()); | 811 EXPECT_CALL(*audio_renderer_, Pause()); |
812 EXPECT_CALL(*audio_renderer_, Flush(_)) | 812 EXPECT_CALL(*audio_renderer_, Flush(_)) |
813 .WillOnce(RunClosure<0>()); | 813 .WillOnce(RunClosure<0>()); |
814 EXPECT_CALL(*audio_renderer_, Preroll(seek_time, _)) | 814 EXPECT_CALL(*audio_renderer_, Preroll(seek_time, _)) |
815 .WillOnce(RunCallback<1>(PIPELINE_OK)); | 815 .WillOnce(RunCallback<1>(PIPELINE_OK)); |
816 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(_)); | 816 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(_)); |
817 EXPECT_CALL(*audio_renderer_, SetVolume(_)); | 817 EXPECT_CALL(*audio_renderer_, SetVolume(_)); |
818 EXPECT_CALL(*audio_renderer_, StartRendering()); | 818 EXPECT_CALL(*audio_renderer_, Play()); |
819 | 819 |
820 EXPECT_CALL(callbacks_, OnPrerollCompleted()); | 820 EXPECT_CALL(callbacks_, OnPrerollCompleted()); |
821 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_OK)); | 821 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_OK)); |
822 DoSeek(seek_time); | 822 DoSeek(seek_time); |
823 | 823 |
824 EXPECT_EQ(pipeline_->GetMediaTime(), seek_time); | 824 EXPECT_EQ(pipeline_->GetMediaTime(), seek_time); |
825 | 825 |
826 // Now that the seek is complete, verify that time updates advance the current | 826 // Now that the seek is complete, verify that time updates advance the current |
827 // time. | 827 // time. |
828 base::TimeDelta new_time = seek_time + base::TimeDelta::FromMilliseconds(100); | 828 base::TimeDelta new_time = seek_time + base::TimeDelta::FromMilliseconds(100); |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
992 // If we get here it's a successful initialization. | 992 // If we get here it's a successful initialization. |
993 EXPECT_CALL(*audio_renderer_, Preroll(base::TimeDelta(), _)) | 993 EXPECT_CALL(*audio_renderer_, Preroll(base::TimeDelta(), _)) |
994 .WillOnce(RunCallback<1>(PIPELINE_OK)); | 994 .WillOnce(RunCallback<1>(PIPELINE_OK)); |
995 EXPECT_CALL(*video_renderer_, Preroll(base::TimeDelta(), _)) | 995 EXPECT_CALL(*video_renderer_, Preroll(base::TimeDelta(), _)) |
996 .WillOnce(RunCallback<1>(PIPELINE_OK)); | 996 .WillOnce(RunCallback<1>(PIPELINE_OK)); |
997 | 997 |
998 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(0.0f)); | 998 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(0.0f)); |
999 EXPECT_CALL(*video_renderer_, SetPlaybackRate(0.0f)); | 999 EXPECT_CALL(*video_renderer_, SetPlaybackRate(0.0f)); |
1000 EXPECT_CALL(*audio_renderer_, SetVolume(1.0f)); | 1000 EXPECT_CALL(*audio_renderer_, SetVolume(1.0f)); |
1001 | 1001 |
1002 EXPECT_CALL(*audio_renderer_, StartRendering()); | 1002 EXPECT_CALL(*audio_renderer_, Play()); |
1003 EXPECT_CALL(*video_renderer_, Play(_)) | 1003 EXPECT_CALL(*video_renderer_, Play(_)) |
1004 .WillOnce(RunClosure<0>()); | 1004 .WillOnce(RunClosure<0>()); |
1005 | 1005 |
1006 if (status == PIPELINE_OK) | 1006 if (status == PIPELINE_OK) |
1007 EXPECT_CALL(callbacks_, OnPrerollCompleted()); | 1007 EXPECT_CALL(callbacks_, OnPrerollCompleted()); |
1008 | 1008 |
1009 return status; | 1009 return status; |
1010 } | 1010 } |
1011 | 1011 |
1012 void DoSeek(TeardownState state, StopOrError stop_or_error) { | 1012 void DoSeek(TeardownState state, StopOrError stop_or_error) { |
(...skipping 15 matching lines...) Expand all Loading... |
1028 } | 1028 } |
1029 | 1029 |
1030 PipelineStatus SetSeekExpectations(TeardownState state, | 1030 PipelineStatus SetSeekExpectations(TeardownState state, |
1031 StopOrError stop_or_error) { | 1031 StopOrError stop_or_error) { |
1032 PipelineStatus status = PIPELINE_OK; | 1032 PipelineStatus status = PIPELINE_OK; |
1033 base::Closure stop_cb = base::Bind( | 1033 base::Closure stop_cb = base::Bind( |
1034 &CallbackHelper::OnStop, base::Unretained(&callbacks_)); | 1034 &CallbackHelper::OnStop, base::Unretained(&callbacks_)); |
1035 | 1035 |
1036 if (state == kPausing) { | 1036 if (state == kPausing) { |
1037 if (stop_or_error == kStop) { | 1037 if (stop_or_error == kStop) { |
1038 EXPECT_CALL(*audio_renderer_, StopRendering()) | 1038 EXPECT_CALL(*audio_renderer_, Pause()) |
1039 .WillOnce(Stop(pipeline_.get(), stop_cb)); | 1039 .WillOnce(Stop(pipeline_.get(), stop_cb)); |
1040 } else { | 1040 } else { |
1041 status = PIPELINE_ERROR_READ; | 1041 status = PIPELINE_ERROR_READ; |
1042 EXPECT_CALL(*audio_renderer_, StopRendering()) | 1042 EXPECT_CALL(*audio_renderer_, Pause()) |
1043 .WillOnce(SetError(pipeline_.get(), status)); | 1043 .WillOnce(SetError(pipeline_.get(), status)); |
1044 } | 1044 } |
1045 | 1045 |
1046 return status; | 1046 return status; |
1047 } | 1047 } |
1048 | 1048 |
1049 EXPECT_CALL(*audio_renderer_, StopRendering()); | 1049 EXPECT_CALL(*audio_renderer_, Pause()); |
1050 | 1050 |
1051 if (state == kFlushing) { | 1051 if (state == kFlushing) { |
1052 if (stop_or_error == kStop) { | 1052 if (stop_or_error == kStop) { |
1053 EXPECT_CALL(*audio_renderer_, Flush(_)) | 1053 EXPECT_CALL(*audio_renderer_, Flush(_)) |
1054 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), RunClosure<0>())); | 1054 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), RunClosure<0>())); |
1055 } else { | 1055 } else { |
1056 status = PIPELINE_ERROR_READ; | 1056 status = PIPELINE_ERROR_READ; |
1057 EXPECT_CALL(*audio_renderer_, Flush(_)).WillOnce( | 1057 EXPECT_CALL(*audio_renderer_, Flush(_)).WillOnce( |
1058 DoAll(SetError(pipeline_.get(), status), RunClosure<0>())); | 1058 DoAll(SetError(pipeline_.get(), status), RunClosure<0>())); |
1059 } | 1059 } |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1161 INSTANTIATE_TEARDOWN_TEST(Error, InitVideoRenderer); | 1161 INSTANTIATE_TEARDOWN_TEST(Error, InitVideoRenderer); |
1162 INSTANTIATE_TEARDOWN_TEST(Error, Pausing); | 1162 INSTANTIATE_TEARDOWN_TEST(Error, Pausing); |
1163 INSTANTIATE_TEARDOWN_TEST(Error, Flushing); | 1163 INSTANTIATE_TEARDOWN_TEST(Error, Flushing); |
1164 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); | 1164 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); |
1165 INSTANTIATE_TEARDOWN_TEST(Error, Prerolling); | 1165 INSTANTIATE_TEARDOWN_TEST(Error, Prerolling); |
1166 INSTANTIATE_TEARDOWN_TEST(Error, Playing); | 1166 INSTANTIATE_TEARDOWN_TEST(Error, Playing); |
1167 | 1167 |
1168 INSTANTIATE_TEARDOWN_TEST(ErrorAndStop, Playing); | 1168 INSTANTIATE_TEARDOWN_TEST(ErrorAndStop, Playing); |
1169 | 1169 |
1170 } // namespace media | 1170 } // namespace media |
OLD | NEW |