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

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

Issue 11785023: Add unit tests for config changes involving encrypted streams. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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 | « no previous file | no next file » | 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 "media/filters/pipeline_integration_test_base.h" 5 #include "media/filters/pipeline_integration_test_base.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "build/build_config.h" 9 #include "build/build_config.h"
10 #include "media/base/decoder_buffer.h" 10 #include "media/base/decoder_buffer.h"
(...skipping 14 matching lines...) Expand all
25 static const char kMP4[] = "video/mp4; codecs=\"avc1.4D4041,mp4a.40.2\""; 25 static const char kMP4[] = "video/mp4; codecs=\"avc1.4D4041,mp4a.40.2\"";
26 26
27 // Key used to encrypt video track in test file "bear-320x240-encrypted.webm". 27 // Key used to encrypt video track in test file "bear-320x240-encrypted.webm".
28 static const uint8 kSecretKey[] = { 28 static const uint8 kSecretKey[] = {
29 0xeb, 0xdd, 0x62, 0xf1, 0x68, 0x14, 0xd2, 0x7b, 29 0xeb, 0xdd, 0x62, 0xf1, 0x68, 0x14, 0xd2, 0x7b,
30 0x68, 0xef, 0x12, 0x2a, 0xfc, 0xe4, 0xae, 0x3c 30 0x68, 0xef, 0x12, 0x2a, 0xfc, 0xe4, 0xae, 0x3c
31 }; 31 };
32 32
33 static const int kAppendWholeFile = -1; 33 static const int kAppendWholeFile = -1;
34 34
35 // Note: Tests using this class only exercise the DecryptingDemuxerStream path.
36 // They do not exercise the Decrypting{Audio|Video}Decoder path.
acolwell GONE FROM CHROMIUM 2013/01/07 21:17:50 nit: Add a TODO for exercising the decrypting deco
ddorwin 2013/01/07 22:19:29 shadi@ is working on browser tests that will do th
35 class FakeEncryptedMedia { 37 class FakeEncryptedMedia {
36 public: 38 public:
37 FakeEncryptedMedia() 39 FakeEncryptedMedia()
38 : decryptor_(base::Bind(&FakeEncryptedMedia::KeyAdded, 40 : decryptor_(base::Bind(&FakeEncryptedMedia::KeyAdded,
39 base::Unretained(this)), 41 base::Unretained(this)),
40 base::Bind(&FakeEncryptedMedia::KeyError, 42 base::Bind(&FakeEncryptedMedia::KeyError,
41 base::Unretained(this)), 43 base::Unretained(this)),
42 base::Bind(&FakeEncryptedMedia::KeyMessage, 44 base::Bind(&FakeEncryptedMedia::KeyMessage,
43 base::Unretained(this)), 45 base::Unretained(this)),
44 base::Bind(&FakeEncryptedMedia::NeedKey, 46 base::Bind(&FakeEncryptedMedia::NeedKey,
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 304
303 // TODO(dalecurtis): Audio decoded in float does not have a consistent hash 305 // TODO(dalecurtis): Audio decoded in float does not have a consistent hash
304 // across platforms. Fix this: http://crbug.com/168204 306 // across platforms. Fix this: http://crbug.com/168204
305 // EXPECT_EQ(GetAudioHash(), ""); 307 // EXPECT_EQ(GetAudioHash(), "");
306 } 308 }
307 309
308 TEST_F(PipelineIntegrationTest, BasicPlayback_MediaSource) { 310 TEST_F(PipelineIntegrationTest, BasicPlayback_MediaSource) {
309 MockMediaSource source("bear-320x240.webm", kWebM, 219229); 311 MockMediaSource source("bear-320x240.webm", kWebM, 219229);
310 StartPipelineWithMediaSource(&source); 312 StartPipelineWithMediaSource(&source);
311 source.EndOfStream(); 313 source.EndOfStream();
312 ASSERT_EQ(pipeline_status_, PIPELINE_OK);
ddorwin 2013/01/07 18:54:39 This check was meaningless since any error would p
313 314
314 EXPECT_EQ(pipeline_->GetBufferedTimeRanges().size(), 1u); 315 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
315 EXPECT_EQ(pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds(), 0); 316 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
316 EXPECT_EQ(pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds(), 2737); 317 EXPECT_EQ(2737, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
317 318
318 Play(); 319 Play();
319 320
320 ASSERT_TRUE(WaitUntilOnEnded()); 321 ASSERT_TRUE(WaitUntilOnEnded());
321 source.Abort(); 322 source.Abort();
322 Stop(); 323 Stop();
323 } 324 }
324 325
325 TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_WebM) { 326 TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_WebM) {
326 MockMediaSource source("bear-320x240-16x9-aspect.webm", kWebM, 327 MockMediaSource source("bear-320x240-16x9-aspect.webm", kWebM,
327 kAppendWholeFile); 328 kAppendWholeFile);
328 StartPipelineWithMediaSource(&source); 329 StartPipelineWithMediaSource(&source);
329 330
330 scoped_refptr<DecoderBuffer> second_file = 331 scoped_refptr<DecoderBuffer> second_file =
331 ReadTestDataFile("bear-640x360.webm"); 332 ReadTestDataFile("bear-640x360.webm");
332 333
333 source.AppendAtTime(base::TimeDelta::FromSeconds(2), 334 source.AppendAtTime(base::TimeDelta::FromSeconds(2),
334 second_file->GetData(), second_file->GetDataSize()); 335 second_file->GetData(), second_file->GetDataSize());
335 336
336 source.EndOfStream(); 337 source.EndOfStream();
337 ASSERT_EQ(pipeline_status_, PIPELINE_OK);
338 338
339 EXPECT_EQ(pipeline_->GetBufferedTimeRanges().size(), 1u); 339 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
340 EXPECT_EQ(pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds(), 0); 340 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
341 EXPECT_EQ(pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds(), 4763); 341 EXPECT_EQ(4763, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
342 342
343 Play(); 343 Play();
344 344
345 ASSERT_TRUE(WaitUntilOnEnded()); 345 EXPECT_TRUE(WaitUntilOnEnded());
346 source.Abort(); 346 source.Abort();
347 Stop(); 347 Stop();
348 } 348 }
349 349
350 TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_Encrypted_WebM) {
351 MockMediaSource source("bear-320x240-16x9-aspect-av-enc_av.webm", kWebM,
352 kAppendWholeFile);
353 FakeEncryptedMedia encrypted_media;
354 StartPipelineWithEncryptedMedia(&source, &encrypted_media);
355
356 scoped_refptr<DecoderBuffer> second_file =
357 ReadTestDataFile("bear-640x360-av-enc_av.webm");
358
359 source.AppendAtTime(base::TimeDelta::FromSeconds(2),
360 second_file->GetData(), second_file->GetDataSize());
361
362 source.EndOfStream();
363
364 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
365 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
366 EXPECT_EQ(4763, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
367
368 Play();
369
370 EXPECT_TRUE(WaitUntilOnEnded());
371 source.Abort();
372 Stop();
373 }
374
375 // Config changes from encrypted to clear are not currently supported.
376 TEST_F(PipelineIntegrationTest,
377 MediaSource_ConfigChange_EncryptedThenClear_WebM) {
acolwell GONE FROM CHROMIUM 2013/01/07 21:17:50 nit: Isn't this testing "clear then encrypted" and
ddorwin 2013/01/07 22:19:29 Done. Copy-paste-edit mistake. Thanks.
378 const int k320FileDuration = 2737;
379 MockMediaSource source("bear-320x240-16x9-aspect.webm", kWebM,
380 kAppendWholeFile);
381 FakeEncryptedMedia encrypted_media;
382 StartPipelineWithEncryptedMedia(&source, &encrypted_media);
383
384 scoped_refptr<DecoderBuffer> second_file =
385 ReadTestDataFile("bear-640x360-av-enc_av.webm");
386
387 source.AppendAtTime(base::TimeDelta::FromSeconds(2),
388 second_file->GetData(), second_file->GetDataSize());
389
390 source.EndOfStream();
391
392 message_loop_.Run();
393 EXPECT_EQ(PIPELINE_ERROR_DECODE, pipeline_status_);
394
395 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
396 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
397 // The second video was not added, so its time has not been added.
398 EXPECT_EQ(k320FileDuration,
399 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
400
401 Play();
402
403 EXPECT_EQ(PIPELINE_ERROR_DECODE, WaitUntilEndedOrError());
404 source.Abort();
405 }
406
407 // Config changes from clear to encrypted are not currently supported.
408 TEST_F(PipelineIntegrationTest,
409 MediaSource_ConfigChange_ClearThenEncrypted_WebM) {
acolwell GONE FROM CHROMIUM 2013/01/07 21:17:50 ditto. Isn't this name backwards?
ddorwin 2013/01/07 22:19:29 Done.
410 const int k320FileDuration = 2737;
411 MockMediaSource source("bear-320x240-16x9-aspect-av-enc_av.webm", kWebM,
412 kAppendWholeFile);
413 FakeEncryptedMedia encrypted_media;
414 StartPipelineWithEncryptedMedia(&source, &encrypted_media);
415
416 scoped_refptr<DecoderBuffer> second_file =
417 ReadTestDataFile("bear-640x360.webm");
418
419 source.AppendAtTime(base::TimeDelta::FromSeconds(2),
420 second_file->GetData(), second_file->GetDataSize());
421
422 source.EndOfStream();
423
424 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
425 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
426 // The second video was not added, so its time has not been added.
427 EXPECT_EQ(k320FileDuration,
428 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
429
430 Play();
431
432 EXPECT_EQ(PIPELINE_ERROR_DECODE, WaitUntilEndedOrError());
433 source.Abort();
434 }
435
350 #if defined(GOOGLE_CHROME_BUILD) || defined(USE_PROPRIETARY_CODECS) 436 #if defined(GOOGLE_CHROME_BUILD) || defined(USE_PROPRIETARY_CODECS)
351 TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_MP4) { 437 TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_MP4) {
352 MockMediaSource source("bear.640x360_dash.mp4", kMP4, kAppendWholeFile); 438 MockMediaSource source("bear.640x360_dash.mp4", kMP4, kAppendWholeFile);
353 StartPipelineWithMediaSource(&source); 439 StartPipelineWithMediaSource(&source);
354 440
355 scoped_refptr<DecoderBuffer> second_file = 441 scoped_refptr<DecoderBuffer> second_file =
356 ReadTestDataFile("bear.1280x720_dash.mp4"); 442 ReadTestDataFile("bear.1280x720_dash.mp4");
357 443
358 source.AppendAtTime(base::TimeDelta::FromSeconds(2), 444 source.AppendAtTime(base::TimeDelta::FromSeconds(2),
359 second_file->GetData(), second_file->GetDataSize()); 445 second_file->GetData(), second_file->GetDataSize());
360 446
361 source.EndOfStream(); 447 source.EndOfStream();
362 ASSERT_EQ(pipeline_status_, PIPELINE_OK);
363 448
364 EXPECT_EQ(pipeline_->GetBufferedTimeRanges().size(), 1u); 449 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
365 EXPECT_EQ(pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds(), 0); 450 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
366 EXPECT_EQ(pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds(), 4736); 451 EXPECT_EQ(4736, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
367 452
368 Play(); 453 Play();
369 454
370 ASSERT_TRUE(WaitUntilOnEnded()); 455 EXPECT_TRUE(WaitUntilOnEnded());
371 source.Abort(); 456 source.Abort();
372 Stop(); 457 Stop();
373 } 458 }
374 #endif 459 #endif
375 460
376 TEST_F(PipelineIntegrationTest, BasicPlayback_16x9AspectRatio) { 461 TEST_F(PipelineIntegrationTest, BasicPlayback_16x9AspectRatio) {
377 ASSERT_TRUE(Start(GetTestDataFilePath("bear-320x240-16x9-aspect.webm"), 462 ASSERT_TRUE(Start(GetTestDataFilePath("bear-320x240-16x9-aspect.webm"),
378 PIPELINE_OK)); 463 PIPELINE_OK));
379 Play(); 464 Play();
380 ASSERT_TRUE(WaitUntilOnEnded()); 465 ASSERT_TRUE(WaitUntilOnEnded());
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 // Verify video decoder & renderer can handle aborted demuxer reads. 536 // Verify video decoder & renderer can handle aborted demuxer reads.
452 TEST_F(PipelineIntegrationTest, ChunkDemuxerAbortRead_VideoOnly) { 537 TEST_F(PipelineIntegrationTest, ChunkDemuxerAbortRead_VideoOnly) {
453 ASSERT_TRUE(TestSeekDuringRead("bear-320x240-video-only.webm", kVideoOnlyWebM, 538 ASSERT_TRUE(TestSeekDuringRead("bear-320x240-video-only.webm", kVideoOnlyWebM,
454 32768, 539 32768,
455 base::TimeDelta::FromMilliseconds(200), 540 base::TimeDelta::FromMilliseconds(200),
456 base::TimeDelta::FromMilliseconds(1668), 541 base::TimeDelta::FromMilliseconds(1668),
457 0x1C896, 65536)); 542 0x1C896, 65536));
458 } 543 }
459 544
460 } // namespace media 545 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698