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_, Play()); | 211 EXPECT_CALL(*audio_renderer_, StartRendering()); |
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_, Pause()); | 261 EXPECT_CALL(*audio_renderer_, StopRendering()); |
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_, Play()); | 268 EXPECT_CALL(*audio_renderer_, StartRendering()); |
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_, Pause()); | 667 EXPECT_CALL(*audio_renderer_, StopRendering()); |
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_, Pause()); | 721 EXPECT_CALL(*audio_renderer_, StopRendering()); |
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_, Pause()); | 811 EXPECT_CALL(*audio_renderer_, StopRendering()); |
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_, Play()); | 818 EXPECT_CALL(*audio_renderer_, StartRendering()); |
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 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
994 // If we get here it's a successful initialization. | 994 // If we get here it's a successful initialization. |
995 EXPECT_CALL(*audio_renderer_, Preroll(base::TimeDelta(), _)) | 995 EXPECT_CALL(*audio_renderer_, Preroll(base::TimeDelta(), _)) |
996 .WillOnce(RunCallback<1>(PIPELINE_OK)); | 996 .WillOnce(RunCallback<1>(PIPELINE_OK)); |
997 EXPECT_CALL(*video_renderer_, Preroll(base::TimeDelta(), _)) | 997 EXPECT_CALL(*video_renderer_, Preroll(base::TimeDelta(), _)) |
998 .WillOnce(RunCallback<1>(PIPELINE_OK)); | 998 .WillOnce(RunCallback<1>(PIPELINE_OK)); |
999 | 999 |
1000 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(0.0f)); | 1000 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(0.0f)); |
1001 EXPECT_CALL(*video_renderer_, SetPlaybackRate(0.0f)); | 1001 EXPECT_CALL(*video_renderer_, SetPlaybackRate(0.0f)); |
1002 EXPECT_CALL(*audio_renderer_, SetVolume(1.0f)); | 1002 EXPECT_CALL(*audio_renderer_, SetVolume(1.0f)); |
1003 | 1003 |
1004 EXPECT_CALL(*audio_renderer_, Play()); | 1004 EXPECT_CALL(*audio_renderer_, StartRendering()); |
1005 EXPECT_CALL(*video_renderer_, Play(_)) | 1005 EXPECT_CALL(*video_renderer_, Play(_)) |
1006 .WillOnce(RunClosure<0>()); | 1006 .WillOnce(RunClosure<0>()); |
1007 | 1007 |
1008 if (status == PIPELINE_OK) | 1008 if (status == PIPELINE_OK) |
1009 EXPECT_CALL(callbacks_, OnPrerollCompleted()); | 1009 EXPECT_CALL(callbacks_, OnPrerollCompleted()); |
1010 | 1010 |
1011 return status; | 1011 return status; |
1012 } | 1012 } |
1013 | 1013 |
1014 void DoSeek(TeardownState state, StopOrError stop_or_error) { | 1014 void DoSeek(TeardownState state, StopOrError stop_or_error) { |
(...skipping 15 matching lines...) Expand all Loading... |
1030 } | 1030 } |
1031 | 1031 |
1032 PipelineStatus SetSeekExpectations(TeardownState state, | 1032 PipelineStatus SetSeekExpectations(TeardownState state, |
1033 StopOrError stop_or_error) { | 1033 StopOrError stop_or_error) { |
1034 PipelineStatus status = PIPELINE_OK; | 1034 PipelineStatus status = PIPELINE_OK; |
1035 base::Closure stop_cb = base::Bind( | 1035 base::Closure stop_cb = base::Bind( |
1036 &CallbackHelper::OnStop, base::Unretained(&callbacks_)); | 1036 &CallbackHelper::OnStop, base::Unretained(&callbacks_)); |
1037 | 1037 |
1038 if (state == kPausing) { | 1038 if (state == kPausing) { |
1039 if (stop_or_error == kStop) { | 1039 if (stop_or_error == kStop) { |
1040 EXPECT_CALL(*audio_renderer_, Pause()) | 1040 EXPECT_CALL(*audio_renderer_, StopRendering()) |
1041 .WillOnce(Stop(pipeline_.get(), stop_cb)); | 1041 .WillOnce(Stop(pipeline_.get(), stop_cb)); |
1042 } else { | 1042 } else { |
1043 status = PIPELINE_ERROR_READ; | 1043 status = PIPELINE_ERROR_READ; |
1044 EXPECT_CALL(*audio_renderer_, Pause()) | 1044 EXPECT_CALL(*audio_renderer_, StopRendering()) |
1045 .WillOnce(SetError(pipeline_.get(), status)); | 1045 .WillOnce(SetError(pipeline_.get(), status)); |
1046 } | 1046 } |
1047 | 1047 |
1048 return status; | 1048 return status; |
1049 } | 1049 } |
1050 | 1050 |
1051 EXPECT_CALL(*audio_renderer_, Pause()); | 1051 EXPECT_CALL(*audio_renderer_, StopRendering()); |
1052 | 1052 |
1053 if (state == kFlushing) { | 1053 if (state == kFlushing) { |
1054 if (stop_or_error == kStop) { | 1054 if (stop_or_error == kStop) { |
1055 EXPECT_CALL(*audio_renderer_, Flush(_)) | 1055 EXPECT_CALL(*audio_renderer_, Flush(_)) |
1056 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), RunClosure<0>())); | 1056 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), RunClosure<0>())); |
1057 } else { | 1057 } else { |
1058 status = PIPELINE_ERROR_READ; | 1058 status = PIPELINE_ERROR_READ; |
1059 EXPECT_CALL(*audio_renderer_, Flush(_)).WillOnce( | 1059 EXPECT_CALL(*audio_renderer_, Flush(_)).WillOnce( |
1060 DoAll(SetError(pipeline_.get(), status), RunClosure<0>())); | 1060 DoAll(SetError(pipeline_.get(), status), RunClosure<0>())); |
1061 } | 1061 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1102 EXPECT_CALL(*video_renderer_, Preroll(_, _)) | 1102 EXPECT_CALL(*video_renderer_, Preroll(_, _)) |
1103 .WillOnce(RunCallback<1>(PIPELINE_OK)); | 1103 .WillOnce(RunCallback<1>(PIPELINE_OK)); |
1104 | 1104 |
1105 // Playback rate and volume are updated prior to starting. | 1105 // Playback rate and volume are updated prior to starting. |
1106 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(0.0f)); | 1106 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(0.0f)); |
1107 EXPECT_CALL(*video_renderer_, SetPlaybackRate(0.0f)); | 1107 EXPECT_CALL(*video_renderer_, SetPlaybackRate(0.0f)); |
1108 EXPECT_CALL(*audio_renderer_, SetVolume(1.0f)); | 1108 EXPECT_CALL(*audio_renderer_, SetVolume(1.0f)); |
1109 | 1109 |
1110 if (state == kStarting) { | 1110 if (state == kStarting) { |
1111 if (stop_or_error == kStop) { | 1111 if (stop_or_error == kStop) { |
1112 EXPECT_CALL(*audio_renderer_, Play()) | 1112 EXPECT_CALL(*video_renderer_, Play(_)) |
1113 .WillOnce(Stop(pipeline_.get(), stop_cb)); | 1113 .WillOnce(Stop(pipeline_.get(), stop_cb)); |
1114 } else { | 1114 } else { |
1115 status = PIPELINE_ERROR_READ; | 1115 status = PIPELINE_ERROR_READ; |
1116 EXPECT_CALL(*audio_renderer_, Play()) | 1116 EXPECT_CALL(*video_renderer_, Play(_)) |
1117 .WillOnce(SetError(pipeline_.get(), status)); | 1117 .WillOnce(SetError(pipeline_.get(), status)); |
1118 } | 1118 } |
1119 return status; | 1119 return status; |
1120 } | 1120 } |
1121 | 1121 |
1122 NOTREACHED() << "State not supported: " << state; | 1122 NOTREACHED() << "State not supported: " << state; |
1123 return status; | 1123 return status; |
1124 } | 1124 } |
1125 | 1125 |
1126 void DoStopOrError(StopOrError stop_or_error) { | 1126 void DoStopOrError(StopOrError stop_or_error) { |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1177 INSTANTIATE_TEARDOWN_TEST(Error, Pausing); | 1177 INSTANTIATE_TEARDOWN_TEST(Error, Pausing); |
1178 INSTANTIATE_TEARDOWN_TEST(Error, Flushing); | 1178 INSTANTIATE_TEARDOWN_TEST(Error, Flushing); |
1179 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); | 1179 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); |
1180 INSTANTIATE_TEARDOWN_TEST(Error, Prerolling); | 1180 INSTANTIATE_TEARDOWN_TEST(Error, Prerolling); |
1181 INSTANTIATE_TEARDOWN_TEST(Error, Starting); | 1181 INSTANTIATE_TEARDOWN_TEST(Error, Starting); |
1182 INSTANTIATE_TEARDOWN_TEST(Error, Playing); | 1182 INSTANTIATE_TEARDOWN_TEST(Error, Playing); |
1183 | 1183 |
1184 INSTANTIATE_TEARDOWN_TEST(ErrorAndStop, Playing); | 1184 INSTANTIATE_TEARDOWN_TEST(ErrorAndStop, Playing); |
1185 | 1185 |
1186 } // namespace media | 1186 } // namespace media |
OLD | NEW |