| 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 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_, Play()); | 1002 EXPECT_CALL(*audio_renderer_, StartRendering()); |
| 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_, Pause()) | 1038 EXPECT_CALL(*audio_renderer_, StopRendering()) |
| 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_, Pause()) | 1042 EXPECT_CALL(*audio_renderer_, StopRendering()) |
| 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_, Pause()); | 1049 EXPECT_CALL(*audio_renderer_, StopRendering()); |
| 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 |