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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/callback_helpers.h" | 6 #include "base/callback_helpers.h" |
7 #include "base/gtest_prod_util.h" | 7 #include "base/gtest_prod_util.h" |
| 8 #include "base/message_loop.h" |
8 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
9 #include "media/base/data_buffer.h" | 10 #include "media/base/data_buffer.h" |
10 #include "media/base/mock_audio_renderer_sink.h" | 11 #include "media/base/mock_audio_renderer_sink.h" |
11 #include "media/base/mock_callback.h" | 12 #include "media/base/mock_callback.h" |
12 #include "media/base/mock_filters.h" | 13 #include "media/base/mock_filters.h" |
13 #include "media/filters/audio_renderer_impl.h" | 14 #include "media/filters/audio_renderer_impl.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
15 | 16 |
16 using ::testing::_; | 17 using ::testing::_; |
17 using ::testing::AnyNumber; | 18 using ::testing::AnyNumber; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 .Times(AnyNumber()); | 52 .Times(AnyNumber()); |
52 EXPECT_CALL(*decoder_, channel_layout()) | 53 EXPECT_CALL(*decoder_, channel_layout()) |
53 .Times(AnyNumber()); | 54 .Times(AnyNumber()); |
54 EXPECT_CALL(*decoder_, samples_per_second()) | 55 EXPECT_CALL(*decoder_, samples_per_second()) |
55 .Times(AnyNumber()); | 56 .Times(AnyNumber()); |
56 | 57 |
57 decoders_.push_back(decoder_); | 58 decoders_.push_back(decoder_); |
58 } | 59 } |
59 | 60 |
60 virtual ~AudioRendererImplTest() { | 61 virtual ~AudioRendererImplTest() { |
| 62 message_loop_.RunAllPending(); |
61 renderer_->Stop(NewExpectedClosure()); | 63 renderer_->Stop(NewExpectedClosure()); |
62 } | 64 } |
63 | 65 |
64 void SetSupportedAudioDecoderProperties() { | 66 void SetSupportedAudioDecoderProperties() { |
65 ON_CALL(*decoder_, bits_per_channel()) | 67 ON_CALL(*decoder_, bits_per_channel()) |
66 .WillByDefault(Return(16)); | 68 .WillByDefault(Return(16)); |
67 ON_CALL(*decoder_, channel_layout()) | 69 ON_CALL(*decoder_, channel_layout()) |
68 .WillByDefault(Return(CHANNEL_LAYOUT_MONO)); | 70 .WillByDefault(Return(CHANNEL_LAYOUT_MONO)); |
69 ON_CALL(*decoder_, samples_per_second()) | 71 ON_CALL(*decoder_, samples_per_second()) |
70 .WillByDefault(Return(44100)); | 72 .WillByDefault(Return(44100)); |
(...skipping 23 matching lines...) Expand all Loading... |
94 void OnAudioTimeCallback( | 96 void OnAudioTimeCallback( |
95 base::TimeDelta current_time, base::TimeDelta max_time) { | 97 base::TimeDelta current_time, base::TimeDelta max_time) { |
96 CHECK(current_time <= max_time); | 98 CHECK(current_time <= max_time); |
97 } | 99 } |
98 | 100 |
99 void Initialize() { | 101 void Initialize() { |
100 EXPECT_CALL(*decoder_, Initialize(_, _, _)) | 102 EXPECT_CALL(*decoder_, Initialize(_, _, _)) |
101 .WillOnce(RunPipelineStatusCB1(PIPELINE_OK)); | 103 .WillOnce(RunPipelineStatusCB1(PIPELINE_OK)); |
102 | 104 |
103 InitializeWithStatus(PIPELINE_OK); | 105 InitializeWithStatus(PIPELINE_OK); |
| 106 message_loop_.RunAllPending(); |
104 } | 107 } |
105 | 108 |
106 void InitializeWithStatus(PipelineStatus expected) { | 109 void InitializeWithStatus(PipelineStatus expected) { |
107 renderer_->Initialize( | 110 renderer_->Initialize( |
108 demuxer_stream_, | 111 demuxer_stream_, |
109 decoders_, | 112 decoders_, |
110 NewExpectedStatusCB(expected), | 113 NewExpectedStatusCB(expected), |
111 base::Bind(&AudioRendererImplTest::OnStatistics, | 114 base::Bind(&AudioRendererImplTest::OnStatistics, |
112 base::Unretained(this)), | 115 base::Unretained(this)), |
113 base::Bind(&AudioRendererImplTest::OnUnderflow, | 116 base::Bind(&AudioRendererImplTest::OnUnderflow, |
114 base::Unretained(this)), | 117 base::Unretained(this)), |
115 base::Bind(&AudioRendererImplTest::OnAudioTimeCallback, | 118 base::Bind(&AudioRendererImplTest::OnAudioTimeCallback, |
116 base::Unretained(this)), | 119 base::Unretained(this)), |
117 base::Bind(&AudioRendererImplTest::OnEnded, | 120 base::Bind(&AudioRendererImplTest::OnEnded, |
118 base::Unretained(this)), | 121 base::Unretained(this)), |
119 base::Bind(&AudioRendererImplTest::OnDisabled, | 122 base::Bind(&AudioRendererImplTest::OnDisabled, |
120 base::Unretained(this)), | 123 base::Unretained(this)), |
121 base::Bind(&AudioRendererImplTest::OnError, | 124 base::Bind(&AudioRendererImplTest::OnError, |
122 base::Unretained(this))); | 125 base::Unretained(this))); |
123 } | 126 } |
124 | 127 |
125 void Preroll() { | 128 void Preroll() { |
126 // Fill entire buffer to complete prerolling. | 129 // Fill entire buffer to complete prerolling. |
127 EXPECT_CALL(*decoder_, Read(_)); | 130 EXPECT_CALL(*decoder_, Read(_)); |
128 renderer_->Preroll(base::TimeDelta(), NewPrerollCB()); | 131 renderer_->Preroll(base::TimeDelta(), NewPrerollCB()); |
129 EXPECT_CALL(*this, OnPrerollComplete(PIPELINE_OK)); | 132 EXPECT_CALL(*this, OnPrerollComplete(PIPELINE_OK)); |
| 133 message_loop_.RunAllPending(); |
130 DeliverRemainingAudio(); | 134 DeliverRemainingAudio(); |
131 } | 135 } |
132 | 136 |
133 void Play() { | 137 void Play() { |
134 renderer_->Play(NewExpectedClosure()); | 138 renderer_->Play(NewExpectedClosure()); |
135 renderer_->SetPlaybackRate(1.0f); | 139 renderer_->SetPlaybackRate(1.0f); |
136 } | 140 } |
137 | 141 |
138 void Preroll(base::TimeDelta preroll_time) { | 142 void Preroll(base::TimeDelta preroll_time) { |
139 next_timestamp_ = preroll_time; | 143 next_timestamp_ = preroll_time; |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 renderer_->ResumeAfterUnderflow(false); | 226 renderer_->ResumeAfterUnderflow(false); |
223 } | 227 } |
224 | 228 |
225 // Fixture members. | 229 // Fixture members. |
226 scoped_refptr<AudioRendererImpl> renderer_; | 230 scoped_refptr<AudioRendererImpl> renderer_; |
227 scoped_refptr<MockDemuxerStream> demuxer_stream_; | 231 scoped_refptr<MockDemuxerStream> demuxer_stream_; |
228 scoped_refptr<MockAudioDecoder> decoder_; | 232 scoped_refptr<MockAudioDecoder> decoder_; |
229 AudioRendererImpl::AudioDecoderList decoders_; | 233 AudioRendererImpl::AudioDecoderList decoders_; |
230 AudioDecoder::ReadCB read_cb_; | 234 AudioDecoder::ReadCB read_cb_; |
231 base::TimeDelta next_timestamp_; | 235 base::TimeDelta next_timestamp_; |
| 236 MessageLoop message_loop_; |
232 | 237 |
233 private: | 238 private: |
234 void SaveReadCallback(const AudioDecoder::ReadCB& callback) { | 239 void SaveReadCallback(const AudioDecoder::ReadCB& callback) { |
235 CHECK(read_cb_.is_null()) << "Overlapping reads are not permitted"; | 240 CHECK(read_cb_.is_null()) << "Overlapping reads are not permitted"; |
236 read_cb_ = callback; | 241 read_cb_ = callback; |
237 } | 242 } |
238 | 243 |
239 DISALLOW_COPY_AND_ASSIGN(AudioRendererImplTest); | 244 DISALLOW_COPY_AND_ASSIGN(AudioRendererImplTest); |
240 }; | 245 }; |
241 | 246 |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
451 EXPECT_TRUE(ConsumeBufferedData(bytes_buffered() / 2, NULL)); | 456 EXPECT_TRUE(ConsumeBufferedData(bytes_buffered() / 2, NULL)); |
452 | 457 |
453 renderer_->Pause(NewExpectedClosure()); | 458 renderer_->Pause(NewExpectedClosure()); |
454 | 459 |
455 AbortPendingRead(); | 460 AbortPendingRead(); |
456 | 461 |
457 Preroll(base::TimeDelta::FromSeconds(1)); | 462 Preroll(base::TimeDelta::FromSeconds(1)); |
458 } | 463 } |
459 | 464 |
460 } // namespace media | 465 } // namespace media |
OLD | NEW |