Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(65)

Side by Side Diff: media/filters/audio_decoder_selector_unittest.cc

Issue 297553002: Add callback in VideoDecoder and AudioDecoder to return decoded frames. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « media/base/video_decoder.cc ('k') | media/filters/audio_renderer_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "media/base/gmock_callback_support.h" 9 #include "media/base/gmock_callback_support.h"
10 #include "media/base/mock_filters.h" 10 #include "media/base/mock_filters.h"
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 message_loop_.message_loop_proxy(), 111 message_loop_.message_loop_proxy(),
112 all_decoders_.Pass(), 112 all_decoders_.Pass(),
113 set_decryptor_ready_cb)); 113 set_decryptor_ready_cb));
114 } 114 }
115 115
116 void SelectDecoder() { 116 void SelectDecoder() {
117 decoder_selector_->SelectDecoder( 117 decoder_selector_->SelectDecoder(
118 demuxer_stream_.get(), 118 demuxer_stream_.get(),
119 false, 119 false,
120 base::Bind(&AudioDecoderSelectorTest::MockOnDecoderSelected, 120 base::Bind(&AudioDecoderSelectorTest::MockOnDecoderSelected,
121 base::Unretained(this))); 121 base::Unretained(this)),
122 base::Bind(&AudioDecoderSelectorTest::OnDecoderOutput));
122 message_loop_.RunUntilIdle(); 123 message_loop_.RunUntilIdle();
123 } 124 }
124 125
125 void SelectDecoderAndAbort() { 126 void SelectDecoderAndAbort() {
126 SelectDecoder(); 127 SelectDecoder();
127 128
128 EXPECT_CALL(*this, OnDecoderSelected(IsNull(), IsNull())); 129 EXPECT_CALL(*this, OnDecoderSelected(IsNull(), IsNull()));
129 decoder_selector_->Abort(); 130 decoder_selector_->Abort();
130 message_loop_.RunUntilIdle(); 131 message_loop_.RunUntilIdle();
131 } 132 }
132 133
134 static void OnDecoderOutput(const scoped_refptr<AudioBuffer>& output) {
135 NOTREACHED();
136 }
137
133 // Fixture members. 138 // Fixture members.
134 scoped_ptr<AudioDecoderSelector> decoder_selector_; 139 scoped_ptr<AudioDecoderSelector> decoder_selector_;
135 scoped_ptr<StrictMock<MockDemuxerStream> > demuxer_stream_; 140 scoped_ptr<StrictMock<MockDemuxerStream> > demuxer_stream_;
136 // Use NiceMock since we don't care about most of calls on the decryptor, e.g. 141 // Use NiceMock since we don't care about most of calls on the decryptor, e.g.
137 // RegisterNewKeyCB(). 142 // RegisterNewKeyCB().
138 scoped_ptr<NiceMock<MockDecryptor> > decryptor_; 143 scoped_ptr<NiceMock<MockDecryptor> > decryptor_;
139 StrictMock<MockAudioDecoder>* decoder_1_; 144 StrictMock<MockAudioDecoder>* decoder_1_;
140 StrictMock<MockAudioDecoder>* decoder_2_; 145 StrictMock<MockAudioDecoder>* decoder_2_;
141 ScopedVector<AudioDecoder> all_decoders_; 146 ScopedVector<AudioDecoder> all_decoders_;
142 scoped_ptr<AudioDecoder> selected_decoder_; 147 scoped_ptr<AudioDecoder> selected_decoder_;
(...skipping 18 matching lines...) Expand all
161 166
162 SelectDecoder(); 167 SelectDecoder();
163 } 168 }
164 169
165 // The stream is not encrypted and we have one clear decoder. The decoder 170 // The stream is not encrypted and we have one clear decoder. The decoder
166 // will be selected. 171 // will be selected.
167 TEST_F(AudioDecoderSelectorTest, ClearStream_NoDecryptor_OneClearDecoder) { 172 TEST_F(AudioDecoderSelectorTest, ClearStream_NoDecryptor_OneClearDecoder) {
168 UseClearStream(); 173 UseClearStream();
169 InitializeDecoderSelector(kNoDecryptor, 1); 174 InitializeDecoderSelector(kNoDecryptor, 1);
170 175
171 EXPECT_CALL(*decoder_1_, Initialize(_, _)) 176 EXPECT_CALL(*decoder_1_, Initialize(_, _, _))
172 .WillOnce(RunCallback<1>(PIPELINE_OK)); 177 .WillOnce(RunCallback<1>(PIPELINE_OK));
173 EXPECT_CALL(*this, OnDecoderSelected(decoder_1_, IsNull())); 178 EXPECT_CALL(*this, OnDecoderSelected(decoder_1_, IsNull()));
174 EXPECT_CALL(*decoder_1_, Stop()); 179 EXPECT_CALL(*decoder_1_, Stop());
175 180
176 SelectDecoder(); 181 SelectDecoder();
177 } 182 }
178 183
179 TEST_F(AudioDecoderSelectorTest, 184 TEST_F(AudioDecoderSelectorTest,
180 Abort_ClearStream_NoDecryptor_OneClearDecoder) { 185 Abort_ClearStream_NoDecryptor_OneClearDecoder) {
181 UseClearStream(); 186 UseClearStream();
182 InitializeDecoderSelector(kNoDecryptor, 1); 187 InitializeDecoderSelector(kNoDecryptor, 1);
183 188
184 EXPECT_CALL(*decoder_1_, Initialize(_, _)); 189 EXPECT_CALL(*decoder_1_, Initialize(_, _, _));
185 EXPECT_CALL(*decoder_1_, Stop()); 190 EXPECT_CALL(*decoder_1_, Stop());
186 191
187 SelectDecoderAndAbort(); 192 SelectDecoderAndAbort();
188 } 193 }
189 194
190 // The stream is not encrypted and we have multiple clear decoders. The first 195 // The stream is not encrypted and we have multiple clear decoders. The first
191 // decoder that can decode the input stream will be selected. 196 // decoder that can decode the input stream will be selected.
192 TEST_F(AudioDecoderSelectorTest, ClearStream_NoDecryptor_MultipleClearDecoder) { 197 TEST_F(AudioDecoderSelectorTest, ClearStream_NoDecryptor_MultipleClearDecoder) {
193 UseClearStream(); 198 UseClearStream();
194 InitializeDecoderSelector(kNoDecryptor, 2); 199 InitializeDecoderSelector(kNoDecryptor, 2);
195 200
196 EXPECT_CALL(*decoder_1_, Initialize(_, _)) 201 EXPECT_CALL(*decoder_1_, Initialize(_, _, _))
197 .WillOnce(RunCallback<1>(DECODER_ERROR_NOT_SUPPORTED)); 202 .WillOnce(RunCallback<1>(DECODER_ERROR_NOT_SUPPORTED));
198 EXPECT_CALL(*decoder_2_, Initialize(_, _)) 203 EXPECT_CALL(*decoder_2_, Initialize(_, _, _))
199 .WillOnce(RunCallback<1>(PIPELINE_OK)); 204 .WillOnce(RunCallback<1>(PIPELINE_OK));
200 EXPECT_CALL(*this, OnDecoderSelected(decoder_2_, IsNull())); 205 EXPECT_CALL(*this, OnDecoderSelected(decoder_2_, IsNull()));
201 EXPECT_CALL(*decoder_2_, Stop()); 206 EXPECT_CALL(*decoder_2_, Stop());
202 207
203 SelectDecoder(); 208 SelectDecoder();
204 } 209 }
205 210
206 TEST_F(AudioDecoderSelectorTest, 211 TEST_F(AudioDecoderSelectorTest,
207 Abort_ClearStream_NoDecryptor_MultipleClearDecoder) { 212 Abort_ClearStream_NoDecryptor_MultipleClearDecoder) {
208 UseClearStream(); 213 UseClearStream();
209 InitializeDecoderSelector(kNoDecryptor, 2); 214 InitializeDecoderSelector(kNoDecryptor, 2);
210 215
211 EXPECT_CALL(*decoder_1_, Initialize(_, _)) 216 EXPECT_CALL(*decoder_1_, Initialize(_, _, _))
212 .WillOnce(RunCallback<1>(DECODER_ERROR_NOT_SUPPORTED)); 217 .WillOnce(RunCallback<1>(DECODER_ERROR_NOT_SUPPORTED));
213 EXPECT_CALL(*decoder_2_, Initialize(_, _)); 218 EXPECT_CALL(*decoder_2_, Initialize(_, _, _));
214 EXPECT_CALL(*decoder_2_, Stop()); 219 EXPECT_CALL(*decoder_2_, Stop());
215 220
216 SelectDecoderAndAbort(); 221 SelectDecoderAndAbort();
217 } 222 }
218 223
219 // There is a decryptor but the stream is not encrypted. The decoder will be 224 // There is a decryptor but the stream is not encrypted. The decoder will be
220 // selected. 225 // selected.
221 TEST_F(AudioDecoderSelectorTest, ClearStream_HasDecryptor) { 226 TEST_F(AudioDecoderSelectorTest, ClearStream_HasDecryptor) {
222 UseClearStream(); 227 UseClearStream();
223 InitializeDecoderSelector(kDecryptOnly, 1); 228 InitializeDecoderSelector(kDecryptOnly, 1);
224 229
225 EXPECT_CALL(*decoder_1_, Initialize(_, _)) 230 EXPECT_CALL(*decoder_1_, Initialize(_, _, _))
226 .WillOnce(RunCallback<1>(PIPELINE_OK)); 231 .WillOnce(RunCallback<1>(PIPELINE_OK));
227 EXPECT_CALL(*this, OnDecoderSelected(decoder_1_, IsNull())); 232 EXPECT_CALL(*this, OnDecoderSelected(decoder_1_, IsNull()));
228 EXPECT_CALL(*decoder_1_, Stop()); 233 EXPECT_CALL(*decoder_1_, Stop());
229 234
230 SelectDecoder(); 235 SelectDecoder();
231 } 236 }
232 237
233 TEST_F(AudioDecoderSelectorTest, Abort_ClearStream_HasDecryptor) { 238 TEST_F(AudioDecoderSelectorTest, Abort_ClearStream_HasDecryptor) {
234 UseClearStream(); 239 UseClearStream();
235 InitializeDecoderSelector(kDecryptOnly, 1); 240 InitializeDecoderSelector(kDecryptOnly, 1);
236 241
237 EXPECT_CALL(*decoder_1_, Initialize(_, _)); 242 EXPECT_CALL(*decoder_1_, Initialize(_, _, _));
238 EXPECT_CALL(*decoder_1_, Stop()); 243 EXPECT_CALL(*decoder_1_, Stop());
239 244
240 SelectDecoderAndAbort(); 245 SelectDecoderAndAbort();
241 } 246 }
242 247
243 // The stream is encrypted and there's no decryptor. No decoder can be selected. 248 // The stream is encrypted and there's no decryptor. No decoder can be selected.
244 TEST_F(AudioDecoderSelectorTest, EncryptedStream_NoDecryptor) { 249 TEST_F(AudioDecoderSelectorTest, EncryptedStream_NoDecryptor) {
245 UseEncryptedStream(); 250 UseEncryptedStream();
246 InitializeDecoderSelector(kNoDecryptor, 1); 251 InitializeDecoderSelector(kNoDecryptor, 1);
247 252
(...skipping 20 matching lines...) Expand all
268 273
269 SelectDecoderAndAbort(); 274 SelectDecoderAndAbort();
270 } 275 }
271 276
272 // Decryptor can do decryption-only and there's a decoder available. The decoder 277 // Decryptor can do decryption-only and there's a decoder available. The decoder
273 // will be selected and a DecryptingDemuxerStream will be created. 278 // will be selected and a DecryptingDemuxerStream will be created.
274 TEST_F(AudioDecoderSelectorTest, EncryptedStream_DecryptOnly_OneClearDecoder) { 279 TEST_F(AudioDecoderSelectorTest, EncryptedStream_DecryptOnly_OneClearDecoder) {
275 UseEncryptedStream(); 280 UseEncryptedStream();
276 InitializeDecoderSelector(kDecryptOnly, 1); 281 InitializeDecoderSelector(kDecryptOnly, 1);
277 282
278 EXPECT_CALL(*decoder_1_, Initialize(_, _)) 283 EXPECT_CALL(*decoder_1_, Initialize(_, _, _))
279 .WillOnce(RunCallback<1>(PIPELINE_OK)); 284 .WillOnce(RunCallback<1>(PIPELINE_OK));
280 EXPECT_CALL(*this, OnDecoderSelected(decoder_1_, NotNull())); 285 EXPECT_CALL(*this, OnDecoderSelected(decoder_1_, NotNull()));
281 EXPECT_CALL(*decoder_1_, Stop()); 286 EXPECT_CALL(*decoder_1_, Stop());
282 287
283 SelectDecoder(); 288 SelectDecoder();
284 } 289 }
285 290
286 TEST_F(AudioDecoderSelectorTest, 291 TEST_F(AudioDecoderSelectorTest,
287 Abort_EncryptedStream_DecryptOnly_OneClearDecoder) { 292 Abort_EncryptedStream_DecryptOnly_OneClearDecoder) {
288 UseEncryptedStream(); 293 UseEncryptedStream();
289 InitializeDecoderSelector(kDecryptOnly, 1); 294 InitializeDecoderSelector(kDecryptOnly, 1);
290 295
291 EXPECT_CALL(*decoder_1_, Initialize(_, _)); 296 EXPECT_CALL(*decoder_1_, Initialize(_, _, _));
292 EXPECT_CALL(*decoder_1_, Stop()); 297 EXPECT_CALL(*decoder_1_, Stop());
293 298
294 SelectDecoderAndAbort(); 299 SelectDecoderAndAbort();
295 } 300 }
296 301
297 // Decryptor can only do decryption and there are multiple decoders available. 302 // Decryptor can only do decryption and there are multiple decoders available.
298 // The first decoder that can decode the input stream will be selected and 303 // The first decoder that can decode the input stream will be selected and
299 // a DecryptingDemuxerStream will be created. 304 // a DecryptingDemuxerStream will be created.
300 TEST_F(AudioDecoderSelectorTest, 305 TEST_F(AudioDecoderSelectorTest,
301 EncryptedStream_DecryptOnly_MultipleClearDecoder) { 306 EncryptedStream_DecryptOnly_MultipleClearDecoder) {
302 UseEncryptedStream(); 307 UseEncryptedStream();
303 InitializeDecoderSelector(kDecryptOnly, 2); 308 InitializeDecoderSelector(kDecryptOnly, 2);
304 309
305 EXPECT_CALL(*decoder_1_, Initialize(_, _)) 310 EXPECT_CALL(*decoder_1_, Initialize(_, _, _))
306 .WillOnce(RunCallback<1>(DECODER_ERROR_NOT_SUPPORTED)); 311 .WillOnce(RunCallback<1>(DECODER_ERROR_NOT_SUPPORTED));
307 EXPECT_CALL(*decoder_2_, Initialize(_, _)) 312 EXPECT_CALL(*decoder_2_, Initialize(_, _, _))
308 .WillOnce(RunCallback<1>(PIPELINE_OK)); 313 .WillOnce(RunCallback<1>(PIPELINE_OK));
309 EXPECT_CALL(*this, OnDecoderSelected(decoder_2_, NotNull())); 314 EXPECT_CALL(*this, OnDecoderSelected(decoder_2_, NotNull()));
310 EXPECT_CALL(*decoder_2_, Stop()); 315 EXPECT_CALL(*decoder_2_, Stop());
311 316
312 SelectDecoder(); 317 SelectDecoder();
313 } 318 }
314 319
315 TEST_F(AudioDecoderSelectorTest, 320 TEST_F(AudioDecoderSelectorTest,
316 Abort_EncryptedStream_DecryptOnly_MultipleClearDecoder) { 321 Abort_EncryptedStream_DecryptOnly_MultipleClearDecoder) {
317 UseEncryptedStream(); 322 UseEncryptedStream();
318 InitializeDecoderSelector(kDecryptOnly, 2); 323 InitializeDecoderSelector(kDecryptOnly, 2);
319 324
320 EXPECT_CALL(*decoder_1_, Initialize(_, _)) 325 EXPECT_CALL(*decoder_1_, Initialize(_, _, _))
321 .WillOnce(RunCallback<1>(DECODER_ERROR_NOT_SUPPORTED)); 326 .WillOnce(RunCallback<1>(DECODER_ERROR_NOT_SUPPORTED));
322 EXPECT_CALL(*decoder_2_, Initialize(_, _)); 327 EXPECT_CALL(*decoder_2_, Initialize(_, _, _));
323 EXPECT_CALL(*decoder_2_, Stop()); 328 EXPECT_CALL(*decoder_2_, Stop());
324 329
325 SelectDecoderAndAbort(); 330 SelectDecoderAndAbort();
326 } 331 }
327 332
328 // Decryptor can do decryption and decoding. A DecryptingAudioDecoder will be 333 // Decryptor can do decryption and decoding. A DecryptingAudioDecoder will be
329 // created and selected. The clear decoders should not be touched at all. 334 // created and selected. The clear decoders should not be touched at all.
330 // No DecryptingDemuxerStream should to be created. 335 // No DecryptingDemuxerStream should to be created.
331 TEST_F(AudioDecoderSelectorTest, EncryptedStream_DecryptAndDecode) { 336 TEST_F(AudioDecoderSelectorTest, EncryptedStream_DecryptAndDecode) {
332 UseEncryptedStream(); 337 UseEncryptedStream();
333 InitializeDecoderSelector(kDecryptAndDecode, 1); 338 InitializeDecoderSelector(kDecryptAndDecode, 1);
334 339
335 EXPECT_CALL(*this, OnDecoderSelected(NotNull(), IsNull())); 340 EXPECT_CALL(*this, OnDecoderSelected(NotNull(), IsNull()));
336 341
337 SelectDecoder(); 342 SelectDecoder();
338 } 343 }
339 344
340 TEST_F(AudioDecoderSelectorTest, Abort_EncryptedStream_DecryptAndDecode) { 345 TEST_F(AudioDecoderSelectorTest, Abort_EncryptedStream_DecryptAndDecode) {
341 UseEncryptedStream(); 346 UseEncryptedStream();
342 InitializeDecoderSelector(kHoldSetDecryptor, 1); 347 InitializeDecoderSelector(kHoldSetDecryptor, 1);
343 348
344 SelectDecoderAndAbort(); 349 SelectDecoderAndAbort();
345 } 350 }
346 351
347 } // namespace media 352 } // namespace media
OLDNEW
« no previous file with comments | « media/base/video_decoder.cc ('k') | media/filters/audio_renderer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698