| 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 |