OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <stdint.h> | 5 #include <stdint.h> |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 972 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
983 base::RunLoop().RunUntilIdle(); | 983 base::RunLoop().RunUntilIdle(); |
984 EXPECT_TRUE(audio_renderer_flush_cb); | 984 EXPECT_TRUE(audio_renderer_flush_cb); |
985 | 985 |
986 // Now, while the RendererImpl::Flush is pending, perform an audio track | 986 // Now, while the RendererImpl::Flush is pending, perform an audio track |
987 // switch. The handling of the track switch will be postponed until after | 987 // switch. The handling of the track switch will be postponed until after |
988 // RendererImpl::Flush completes. | 988 // RendererImpl::Flush completes. |
989 stream_status_change_cb.Run(audio_stream_.get(), false, base::TimeDelta()); | 989 stream_status_change_cb.Run(audio_stream_.get(), false, base::TimeDelta()); |
990 stream_status_change_cb.Run(secondary_audio_stream.get(), true, | 990 stream_status_change_cb.Run(secondary_audio_stream.get(), true, |
991 base::TimeDelta()); | 991 base::TimeDelta()); |
992 | 992 |
993 // After RendererImpl::Flush we expect audio renderer flush to happen again, | 993 // Ensure that audio track switch occurs after Flush by verifying that the |
994 // due to audio track switch handling. And we expect the audio renderer to be | 994 // audio renderer is reinitialized with the secondary audio stream. |
995 // reinitialized for the secondary_audio_stream. | |
996 EXPECT_CALL(*audio_renderer_, Flush(_)) | |
997 .WillRepeatedly(DoAll( | |
998 SetBufferingState(&audio_renderer_client_, BUFFERING_HAVE_NOTHING), | |
999 RunClosure<0>())); | |
1000 EXPECT_CALL(*audio_renderer_, StartPlaying()) | |
1001 .WillRepeatedly( | |
1002 SetBufferingState(&audio_renderer_client_, BUFFERING_HAVE_ENOUGH)); | |
1003 EXPECT_CALL(*audio_renderer_, | 995 EXPECT_CALL(*audio_renderer_, |
1004 Initialize(secondary_audio_stream.get(), _, _, _)); | 996 Initialize(secondary_audio_stream.get(), _, _, _)); |
1005 | 997 |
1006 audio_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_NOTHING); | 998 audio_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_NOTHING); |
1007 audio_renderer_flush_cb.Run(); | 999 audio_renderer_flush_cb.Run(); |
1008 base::RunLoop().RunUntilIdle(); | 1000 base::RunLoop().RunUntilIdle(); |
1009 } | 1001 } |
1010 | 1002 |
1011 TEST_F(RendererImplTest, VideoTrackSwitchDuringFlush) { | 1003 TEST_F(RendererImplTest, VideoTrackSwitchDuringFlush) { |
1012 CreateAudioAndVideoStream(); | 1004 CreateAudioAndVideoStream(); |
(...skipping 30 matching lines...) Expand all Loading... |
1043 base::RunLoop().RunUntilIdle(); | 1035 base::RunLoop().RunUntilIdle(); |
1044 EXPECT_TRUE(video_renderer_flush_cb); | 1036 EXPECT_TRUE(video_renderer_flush_cb); |
1045 | 1037 |
1046 // Now, while the RendererImpl::Flush is pending, perform a video track | 1038 // Now, while the RendererImpl::Flush is pending, perform a video track |
1047 // switch. The handling of the track switch will be postponed until after | 1039 // switch. The handling of the track switch will be postponed until after |
1048 // RendererImpl::Flush completes. | 1040 // RendererImpl::Flush completes. |
1049 stream_status_change_cb.Run(video_stream_.get(), false, base::TimeDelta()); | 1041 stream_status_change_cb.Run(video_stream_.get(), false, base::TimeDelta()); |
1050 stream_status_change_cb.Run(secondary_video_stream.get(), true, | 1042 stream_status_change_cb.Run(secondary_video_stream.get(), true, |
1051 base::TimeDelta()); | 1043 base::TimeDelta()); |
1052 | 1044 |
1053 // After RendererImpl::Flush we expect video renderer flush to happen again, | 1045 // Ensure that video track switch occurs after Flush by verifying that the |
1054 // due to video track switch handling. And we expect the video renderer to be | 1046 // video renderer is reinitialized with the secondary video stream. |
1055 // reinitialized for the video. | |
1056 EXPECT_CALL(*video_renderer_, Flush(_)) | |
1057 .WillRepeatedly(DoAll( | |
1058 SetBufferingState(&video_renderer_client_, BUFFERING_HAVE_NOTHING), | |
1059 RunClosure<0>())); | |
1060 EXPECT_CALL(*video_renderer_, StartPlayingFrom(_)) | |
1061 .WillRepeatedly( | |
1062 SetBufferingState(&video_renderer_client_, BUFFERING_HAVE_ENOUGH)); | |
1063 EXPECT_CALL(*video_renderer_, OnTimeProgressing()) | |
1064 .Times(testing::AnyNumber()); | |
1065 EXPECT_CALL(*video_renderer_, OnTimeStopped()).Times(testing::AnyNumber()); | 1047 EXPECT_CALL(*video_renderer_, OnTimeStopped()).Times(testing::AnyNumber()); |
1066 EXPECT_CALL(*video_renderer_, | 1048 EXPECT_CALL(*video_renderer_, |
1067 Initialize(secondary_video_stream.get(), _, _, _, _)); | 1049 Initialize(secondary_video_stream.get(), _, _, _, _)); |
1068 | 1050 |
1069 video_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_NOTHING); | 1051 video_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_NOTHING); |
1070 video_renderer_flush_cb.Run(); | 1052 video_renderer_flush_cb.Run(); |
1071 base::RunLoop().RunUntilIdle(); | 1053 base::RunLoop().RunUntilIdle(); |
1072 } | 1054 } |
1073 | 1055 |
1074 } // namespace media | 1056 } // namespace media |
OLD | NEW |