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

Side by Side Diff: media/filters/video_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
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 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 message_loop_.message_loop_proxy(), 106 message_loop_.message_loop_proxy(),
107 all_decoders_.Pass(), 107 all_decoders_.Pass(),
108 set_decryptor_ready_cb)); 108 set_decryptor_ready_cb));
109 } 109 }
110 110
111 void SelectDecoder() { 111 void SelectDecoder() {
112 decoder_selector_->SelectDecoder( 112 decoder_selector_->SelectDecoder(
113 demuxer_stream_.get(), 113 demuxer_stream_.get(),
114 false, 114 false,
115 base::Bind(&VideoDecoderSelectorTest::MockOnDecoderSelected, 115 base::Bind(&VideoDecoderSelectorTest::MockOnDecoderSelected,
116 base::Unretained(this)),
117 base::Bind(&VideoDecoderSelectorTest::FrameReady,
116 base::Unretained(this))); 118 base::Unretained(this)));
117 message_loop_.RunUntilIdle(); 119 message_loop_.RunUntilIdle();
118 } 120 }
119 121
120 void SelectDecoderAndAbort() { 122 void SelectDecoderAndAbort() {
121 SelectDecoder(); 123 SelectDecoder();
122 124
123 EXPECT_CALL(*this, OnDecoderSelected(IsNull(), IsNull())); 125 EXPECT_CALL(*this, OnDecoderSelected(IsNull(), IsNull()));
124 decoder_selector_->Abort(); 126 decoder_selector_->Abort();
125 message_loop_.RunUntilIdle(); 127 message_loop_.RunUntilIdle();
126 } 128 }
127 129
130 void FrameReady(const scoped_refptr<VideoFrame>& frame) {
131 NOTREACHED();
132 }
133
128 // Fixture members. 134 // Fixture members.
129 scoped_ptr<VideoDecoderSelector> decoder_selector_; 135 scoped_ptr<VideoDecoderSelector> decoder_selector_;
130 scoped_ptr<StrictMock<MockDemuxerStream> > demuxer_stream_; 136 scoped_ptr<StrictMock<MockDemuxerStream> > demuxer_stream_;
131 // Use NiceMock since we don't care about most of calls on the decryptor, e.g. 137 // Use NiceMock since we don't care about most of calls on the decryptor, e.g.
132 // RegisterNewKeyCB(). 138 // RegisterNewKeyCB().
133 scoped_ptr<NiceMock<MockDecryptor> > decryptor_; 139 scoped_ptr<NiceMock<MockDecryptor> > decryptor_;
134 StrictMock<MockVideoDecoder>* decoder_1_; 140 StrictMock<MockVideoDecoder>* decoder_1_;
135 StrictMock<MockVideoDecoder>* decoder_2_; 141 StrictMock<MockVideoDecoder>* decoder_2_;
136 ScopedVector<VideoDecoder> all_decoders_; 142 ScopedVector<VideoDecoder> all_decoders_;
137 143
(...skipping 20 matching lines...) Expand all
158 164
159 SelectDecoder(); 165 SelectDecoder();
160 } 166 }
161 167
162 // The stream is not encrypted and we have one clear decoder. The decoder 168 // The stream is not encrypted and we have one clear decoder. The decoder
163 // will be selected. 169 // will be selected.
164 TEST_F(VideoDecoderSelectorTest, ClearStream_NoDecryptor_OneClearDecoder) { 170 TEST_F(VideoDecoderSelectorTest, ClearStream_NoDecryptor_OneClearDecoder) {
165 UseClearStream(); 171 UseClearStream();
166 InitializeDecoderSelector(kNoDecryptor, 1); 172 InitializeDecoderSelector(kNoDecryptor, 1);
167 173
168 EXPECT_CALL(*decoder_1_, Initialize(_, _, _)) 174 EXPECT_CALL(*decoder_1_, Initialize(_, _, _, _))
169 .WillOnce(RunCallback<2>(PIPELINE_OK)); 175 .WillOnce(RunCallback<2>(PIPELINE_OK));
170 EXPECT_CALL(*this, OnDecoderSelected(decoder_1_, IsNull())); 176 EXPECT_CALL(*this, OnDecoderSelected(decoder_1_, IsNull()));
171 EXPECT_CALL(*decoder_1_, Stop()); 177 EXPECT_CALL(*decoder_1_, Stop());
172 178
173 SelectDecoder(); 179 SelectDecoder();
174 } 180 }
175 181
176 TEST_F(VideoDecoderSelectorTest, 182 TEST_F(VideoDecoderSelectorTest,
177 Abort_ClearStream_NoDecryptor_OneClearDecoder) { 183 Abort_ClearStream_NoDecryptor_OneClearDecoder) {
178 UseClearStream(); 184 UseClearStream();
179 InitializeDecoderSelector(kNoDecryptor, 1); 185 InitializeDecoderSelector(kNoDecryptor, 1);
180 186
181 EXPECT_CALL(*decoder_1_, Initialize(_, _, _)); 187 EXPECT_CALL(*decoder_1_, Initialize(_, _, _, _));
182 EXPECT_CALL(*decoder_1_, Stop()); 188 EXPECT_CALL(*decoder_1_, Stop());
183 189
184 SelectDecoderAndAbort(); 190 SelectDecoderAndAbort();
185 } 191 }
186 192
187 // The stream is not encrypted and we have multiple clear decoders. The first 193 // The stream is not encrypted and we have multiple clear decoders. The first
188 // decoder that can decode the input stream will be selected. 194 // decoder that can decode the input stream will be selected.
189 TEST_F(VideoDecoderSelectorTest, ClearStream_NoDecryptor_MultipleClearDecoder) { 195 TEST_F(VideoDecoderSelectorTest, ClearStream_NoDecryptor_MultipleClearDecoder) {
190 UseClearStream(); 196 UseClearStream();
191 InitializeDecoderSelector(kNoDecryptor, 2); 197 InitializeDecoderSelector(kNoDecryptor, 2);
192 198
193 EXPECT_CALL(*decoder_1_, Initialize(_, _, _)) 199 EXPECT_CALL(*decoder_1_, Initialize(_, _, _, _))
194 .WillOnce(RunCallback<2>(DECODER_ERROR_NOT_SUPPORTED)); 200 .WillOnce(RunCallback<2>(DECODER_ERROR_NOT_SUPPORTED));
195 EXPECT_CALL(*decoder_2_, Initialize(_, _, _)) 201 EXPECT_CALL(*decoder_2_, Initialize(_, _, _, _))
196 .WillOnce(RunCallback<2>(PIPELINE_OK)); 202 .WillOnce(RunCallback<2>(PIPELINE_OK));
197 EXPECT_CALL(*this, OnDecoderSelected(decoder_2_, IsNull())); 203 EXPECT_CALL(*this, OnDecoderSelected(decoder_2_, IsNull()));
198 EXPECT_CALL(*decoder_2_, Stop()); 204 EXPECT_CALL(*decoder_2_, Stop());
199 205
200 SelectDecoder(); 206 SelectDecoder();
201 } 207 }
202 208
203 TEST_F(VideoDecoderSelectorTest, 209 TEST_F(VideoDecoderSelectorTest,
204 Abort_ClearStream_NoDecryptor_MultipleClearDecoder) { 210 Abort_ClearStream_NoDecryptor_MultipleClearDecoder) {
205 UseClearStream(); 211 UseClearStream();
206 InitializeDecoderSelector(kNoDecryptor, 2); 212 InitializeDecoderSelector(kNoDecryptor, 2);
207 213
208 EXPECT_CALL(*decoder_1_, Initialize(_, _, _)) 214 EXPECT_CALL(*decoder_1_, Initialize(_, _, _, _))
209 .WillOnce(RunCallback<2>(DECODER_ERROR_NOT_SUPPORTED)); 215 .WillOnce(RunCallback<2>(DECODER_ERROR_NOT_SUPPORTED));
210 EXPECT_CALL(*decoder_2_, Initialize(_, _, _)); 216 EXPECT_CALL(*decoder_2_, Initialize(_, _, _, _));
211 EXPECT_CALL(*decoder_2_, Stop()); 217 EXPECT_CALL(*decoder_2_, Stop());
212 218
213 SelectDecoderAndAbort(); 219 SelectDecoderAndAbort();
214 } 220 }
215 221
216 // There is a decryptor but the stream is not encrypted. The decoder will be 222 // There is a decryptor but the stream is not encrypted. The decoder will be
217 // selected. 223 // selected.
218 TEST_F(VideoDecoderSelectorTest, ClearStream_HasDecryptor) { 224 TEST_F(VideoDecoderSelectorTest, ClearStream_HasDecryptor) {
219 UseClearStream(); 225 UseClearStream();
220 InitializeDecoderSelector(kDecryptOnly, 1); 226 InitializeDecoderSelector(kDecryptOnly, 1);
221 227
222 EXPECT_CALL(*decoder_1_, Initialize(_, _, _)) 228 EXPECT_CALL(*decoder_1_, Initialize(_, _, _, _))
223 .WillOnce(RunCallback<2>(PIPELINE_OK)); 229 .WillOnce(RunCallback<2>(PIPELINE_OK));
224 EXPECT_CALL(*this, OnDecoderSelected(decoder_1_, IsNull())); 230 EXPECT_CALL(*this, OnDecoderSelected(decoder_1_, IsNull()));
225 EXPECT_CALL(*decoder_1_, Stop()); 231 EXPECT_CALL(*decoder_1_, Stop());
226 232
227 SelectDecoder(); 233 SelectDecoder();
228 } 234 }
229 235
230 TEST_F(VideoDecoderSelectorTest, Abort_ClearStream_HasDecryptor) { 236 TEST_F(VideoDecoderSelectorTest, Abort_ClearStream_HasDecryptor) {
231 UseClearStream(); 237 UseClearStream();
232 InitializeDecoderSelector(kDecryptOnly, 1); 238 InitializeDecoderSelector(kDecryptOnly, 1);
233 239
234 EXPECT_CALL(*decoder_1_, Initialize(_, _, _)); 240 EXPECT_CALL(*decoder_1_, Initialize(_, _, _, _));
235 EXPECT_CALL(*decoder_1_, Stop()); 241 EXPECT_CALL(*decoder_1_, Stop());
236 242
237 SelectDecoderAndAbort(); 243 SelectDecoderAndAbort();
238 } 244 }
239 245
240 // The stream is encrypted and there's no decryptor. No decoder can be selected. 246 // The stream is encrypted and there's no decryptor. No decoder can be selected.
241 TEST_F(VideoDecoderSelectorTest, EncryptedStream_NoDecryptor) { 247 TEST_F(VideoDecoderSelectorTest, EncryptedStream_NoDecryptor) {
242 UseEncryptedStream(); 248 UseEncryptedStream();
243 InitializeDecoderSelector(kNoDecryptor, 1); 249 InitializeDecoderSelector(kNoDecryptor, 1);
244 250
(...skipping 20 matching lines...) Expand all
265 271
266 SelectDecoderAndAbort(); 272 SelectDecoderAndAbort();
267 } 273 }
268 274
269 // Decryptor can do decryption-only and there's a decoder available. The decoder 275 // Decryptor can do decryption-only and there's a decoder available. The decoder
270 // will be selected and a DecryptingDemuxerStream will be created. 276 // will be selected and a DecryptingDemuxerStream will be created.
271 TEST_F(VideoDecoderSelectorTest, EncryptedStream_DecryptOnly_OneClearDecoder) { 277 TEST_F(VideoDecoderSelectorTest, EncryptedStream_DecryptOnly_OneClearDecoder) {
272 UseEncryptedStream(); 278 UseEncryptedStream();
273 InitializeDecoderSelector(kDecryptOnly, 1); 279 InitializeDecoderSelector(kDecryptOnly, 1);
274 280
275 EXPECT_CALL(*decoder_1_, Initialize(_, _, _)) 281 EXPECT_CALL(*decoder_1_, Initialize(_, _, _, _))
276 .WillOnce(RunCallback<2>(PIPELINE_OK)); 282 .WillOnce(RunCallback<2>(PIPELINE_OK));
277 EXPECT_CALL(*this, OnDecoderSelected(decoder_1_, NotNull())); 283 EXPECT_CALL(*this, OnDecoderSelected(decoder_1_, NotNull()));
278 EXPECT_CALL(*decoder_1_, Stop()); 284 EXPECT_CALL(*decoder_1_, Stop());
279 285
280 SelectDecoder(); 286 SelectDecoder();
281 } 287 }
282 288
283 TEST_F(VideoDecoderSelectorTest, 289 TEST_F(VideoDecoderSelectorTest,
284 Abort_EncryptedStream_DecryptOnly_OneClearDecoder) { 290 Abort_EncryptedStream_DecryptOnly_OneClearDecoder) {
285 UseEncryptedStream(); 291 UseEncryptedStream();
286 InitializeDecoderSelector(kDecryptOnly, 1); 292 InitializeDecoderSelector(kDecryptOnly, 1);
287 293
288 EXPECT_CALL(*decoder_1_, Initialize(_, _, _)); 294 EXPECT_CALL(*decoder_1_, Initialize(_, _, _, _));
289 EXPECT_CALL(*decoder_1_, Stop()); 295 EXPECT_CALL(*decoder_1_, Stop());
290 296
291 SelectDecoderAndAbort(); 297 SelectDecoderAndAbort();
292 } 298 }
293 299
294 // Decryptor can only do decryption and there are multiple decoders available. 300 // Decryptor can only do decryption and there are multiple decoders available.
295 // The first decoder that can decode the input stream will be selected and 301 // The first decoder that can decode the input stream will be selected and
296 // a DecryptingDemuxerStream will be created. 302 // a DecryptingDemuxerStream will be created.
297 TEST_F(VideoDecoderSelectorTest, 303 TEST_F(VideoDecoderSelectorTest,
298 EncryptedStream_DecryptOnly_MultipleClearDecoder) { 304 EncryptedStream_DecryptOnly_MultipleClearDecoder) {
299 UseEncryptedStream(); 305 UseEncryptedStream();
300 InitializeDecoderSelector(kDecryptOnly, 2); 306 InitializeDecoderSelector(kDecryptOnly, 2);
301 307
302 EXPECT_CALL(*decoder_1_, Initialize(_, _, _)) 308 EXPECT_CALL(*decoder_1_, Initialize(_, _, _, _))
303 .WillOnce(RunCallback<2>(DECODER_ERROR_NOT_SUPPORTED)); 309 .WillOnce(RunCallback<2>(DECODER_ERROR_NOT_SUPPORTED));
304 EXPECT_CALL(*decoder_2_, Initialize(_, _, _)) 310 EXPECT_CALL(*decoder_2_, Initialize(_, _, _, _))
305 .WillOnce(RunCallback<2>(PIPELINE_OK)); 311 .WillOnce(RunCallback<2>(PIPELINE_OK));
306 EXPECT_CALL(*this, OnDecoderSelected(decoder_2_, NotNull())); 312 EXPECT_CALL(*this, OnDecoderSelected(decoder_2_, NotNull()));
307 EXPECT_CALL(*decoder_2_, Stop()); 313 EXPECT_CALL(*decoder_2_, Stop());
308 314
309 SelectDecoder(); 315 SelectDecoder();
310 } 316 }
311 317
312 TEST_F(VideoDecoderSelectorTest, 318 TEST_F(VideoDecoderSelectorTest,
313 Abort_EncryptedStream_DecryptOnly_MultipleClearDecoder) { 319 Abort_EncryptedStream_DecryptOnly_MultipleClearDecoder) {
314 UseEncryptedStream(); 320 UseEncryptedStream();
315 InitializeDecoderSelector(kDecryptOnly, 2); 321 InitializeDecoderSelector(kDecryptOnly, 2);
316 322
317 EXPECT_CALL(*decoder_1_, Initialize(_, _, _)) 323 EXPECT_CALL(*decoder_1_, Initialize(_, _, _, _))
318 .WillOnce(RunCallback<2>(DECODER_ERROR_NOT_SUPPORTED)); 324 .WillOnce(RunCallback<2>(DECODER_ERROR_NOT_SUPPORTED));
319 EXPECT_CALL(*decoder_2_, Initialize(_, _, _)); 325 EXPECT_CALL(*decoder_2_, Initialize(_, _, _, _));
320 EXPECT_CALL(*decoder_2_, Stop()); 326 EXPECT_CALL(*decoder_2_, Stop());
321 327
322 SelectDecoderAndAbort(); 328 SelectDecoderAndAbort();
323 } 329 }
324 330
325 // Decryptor can do decryption and decoding. A DecryptingVideoDecoder will be 331 // Decryptor can do decryption and decoding. A DecryptingVideoDecoder will be
326 // created and selected. The clear decoders should not be touched at all. 332 // created and selected. The clear decoders should not be touched at all.
327 // No DecryptingDemuxerStream should to be created. 333 // No DecryptingDemuxerStream should to be created.
328 TEST_F(VideoDecoderSelectorTest, EncryptedStream_DecryptAndDecode) { 334 TEST_F(VideoDecoderSelectorTest, EncryptedStream_DecryptAndDecode) {
329 UseEncryptedStream(); 335 UseEncryptedStream();
330 InitializeDecoderSelector(kDecryptAndDecode, 1); 336 InitializeDecoderSelector(kDecryptAndDecode, 1);
331 337
332 EXPECT_CALL(*this, OnDecoderSelected(NotNull(), IsNull())); 338 EXPECT_CALL(*this, OnDecoderSelected(NotNull(), IsNull()));
333 339
334 SelectDecoder(); 340 SelectDecoder();
335 } 341 }
336 342
337 TEST_F(VideoDecoderSelectorTest, Abort_EncryptedStream_DecryptAndDecode) { 343 TEST_F(VideoDecoderSelectorTest, Abort_EncryptedStream_DecryptAndDecode) {
338 UseEncryptedStream(); 344 UseEncryptedStream();
339 InitializeDecoderSelector(kHoldSetDecryptor, 1); 345 InitializeDecoderSelector(kHoldSetDecryptor, 1);
340 346
341 SelectDecoderAndAbort(); 347 SelectDecoderAndAbort();
342 } 348 }
343 349
344 } // namespace media 350 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698