OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "media/base/mock_callback.h" | 6 #include "media/base/mock_callback.h" |
7 #include "media/base/mock_filter_host.h" | 7 #include "media/base/mock_filter_host.h" |
8 #include "media/base/test_data_util.h" | 8 #include "media/base/test_data_util.h" |
9 #include "media/filters/chunk_demuxer.h" | 9 #include "media/filters/chunk_demuxer.h" |
10 #include "media/filters/chunk_demuxer_client.h" | 10 #include "media/filters/chunk_demuxer_client.h" |
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
457 AddSimpleBlock(&cb, kVideoTrackNum, 0); | 457 AddSimpleBlock(&cb, kVideoTrackNum, 0); |
458 AddSimpleBlock(&cb, kAudioTrackNum, 23); | 458 AddSimpleBlock(&cb, kAudioTrackNum, 23); |
459 AddSimpleBlock(&cb, kVideoTrackNum, 33); | 459 AddSimpleBlock(&cb, kVideoTrackNum, 33); |
460 scoped_ptr<Cluster> cluster(cb.Finish()); | 460 scoped_ptr<Cluster> cluster(cb.Finish()); |
461 AppendData(cluster->data(), cluster->size()); | 461 AppendData(cluster->data(), cluster->size()); |
462 | 462 |
463 EXPECT_CALL(mock_filter_host_, SetError(PIPELINE_ERROR_NETWORK)); | 463 EXPECT_CALL(mock_filter_host_, SetError(PIPELINE_ERROR_NETWORK)); |
464 demuxer_->EndOfStream(PIPELINE_ERROR_NETWORK); | 464 demuxer_->EndOfStream(PIPELINE_ERROR_NETWORK); |
465 } | 465 } |
466 | 466 |
467 static void OnEndOfStreamReadDone(bool* called, | |
468 Buffer* buffer) { | |
469 EXPECT_TRUE(buffer->IsEndOfStream()); | |
470 *called = true; | |
471 } | |
472 | |
473 // Make sure that all pending reads that we don't have media data for get an | |
474 // "end of stream" buffer when EndOfStream() is called. | |
475 TEST_F(ChunkDemuxerTest, TestEndOfStreamWithPendingReads) { | |
476 InitDemuxer(true, true); | |
477 | |
478 scoped_refptr<DemuxerStream> audio = | |
479 demuxer_->GetStream(DemuxerStream::AUDIO); | |
480 scoped_refptr<DemuxerStream> video = | |
481 demuxer_->GetStream(DemuxerStream::VIDEO); | |
482 | |
483 bool audio_read_done_1 = false; | |
484 bool video_read_done_1 = false; | |
485 bool audio_read_done_2 = false; | |
486 bool video_read_done_2 = false; | |
487 bool audio_read_done_3 = false; | |
488 bool video_read_done_3 = false; | |
489 | |
490 audio->Read(base::Bind(&OnReadDone, | |
491 base::TimeDelta::FromMilliseconds(32), | |
492 &audio_read_done_1)); | |
493 | |
494 video->Read(base::Bind(&OnReadDone, | |
495 base::TimeDelta::FromMilliseconds(123), | |
496 &video_read_done_1)); | |
497 | |
498 audio->Read(base::Bind(&OnEndOfStreamReadDone, | |
499 &audio_read_done_2)); | |
500 | |
501 video->Read(base::Bind(&OnEndOfStreamReadDone, | |
502 &video_read_done_2)); | |
503 | |
504 audio->Read(base::Bind(&OnEndOfStreamReadDone, | |
505 &audio_read_done_3)); | |
506 | |
507 video->Read(base::Bind(&OnEndOfStreamReadDone, | |
508 &video_read_done_3)); | |
509 | |
510 ClusterBuilder cb; | |
511 cb.SetClusterTimecode(0); | |
512 AddSimpleBlock(&cb, kAudioTrackNum, 32); | |
513 AddSimpleBlock(&cb, kVideoTrackNum, 123); | |
514 scoped_ptr<Cluster> cluster(cb.Finish()); | |
515 | |
516 AppendData(cluster->data(), cluster->size()); | |
517 | |
518 EXPECT_TRUE(audio_read_done_1); | |
519 EXPECT_TRUE(video_read_done_1); | |
520 EXPECT_FALSE(audio_read_done_2); | |
521 EXPECT_FALSE(video_read_done_2); | |
522 EXPECT_FALSE(audio_read_done_3); | |
523 EXPECT_FALSE(video_read_done_3); | |
524 | |
525 demuxer_->EndOfStream(PIPELINE_OK); | |
526 | |
527 EXPECT_TRUE(audio_read_done_2); | |
528 EXPECT_TRUE(video_read_done_2); | |
529 EXPECT_TRUE(audio_read_done_3); | |
530 EXPECT_TRUE(video_read_done_3); | |
531 } | |
532 | |
533 // Make sure that all Read() calls after we get an EndOfStream() | |
534 // call return an "end of stream" buffer. | |
535 TEST_F(ChunkDemuxerTest, TestReadsAfterEndOfStream) { | |
536 InitDemuxer(true, true); | |
537 | |
538 scoped_refptr<DemuxerStream> audio = | |
539 demuxer_->GetStream(DemuxerStream::AUDIO); | |
540 scoped_refptr<DemuxerStream> video = | |
541 demuxer_->GetStream(DemuxerStream::VIDEO); | |
542 | |
543 bool audio_read_done_1 = false; | |
scherkus (not reviewing)
2011/08/30 00:59:52
I wonder if there's a more terse way to write thes
acolwell GONE FROM CHROMIUM
2011/08/30 17:01:45
Done.
| |
544 bool video_read_done_1 = false; | |
545 bool audio_read_done_2 = false; | |
546 bool video_read_done_2 = false; | |
547 bool audio_read_done_3 = false; | |
548 bool video_read_done_3 = false; | |
549 bool audio_read_done_4 = false; | |
550 bool video_read_done_4 = false; | |
551 | |
552 audio->Read(base::Bind(&OnReadDone, | |
553 base::TimeDelta::FromMilliseconds(32), | |
554 &audio_read_done_1)); | |
555 | |
556 video->Read(base::Bind(&OnReadDone, | |
557 base::TimeDelta::FromMilliseconds(123), | |
558 &video_read_done_1)); | |
559 | |
560 audio->Read(base::Bind(&OnEndOfStreamReadDone, | |
561 &audio_read_done_2)); | |
562 | |
563 video->Read(base::Bind(&OnEndOfStreamReadDone, | |
564 &video_read_done_2)); | |
565 | |
566 audio->Read(base::Bind(&OnEndOfStreamReadDone, | |
567 &audio_read_done_3)); | |
568 | |
569 video->Read(base::Bind(&OnEndOfStreamReadDone, | |
570 &video_read_done_3)); | |
571 | |
572 ClusterBuilder cb; | |
573 cb.SetClusterTimecode(0); | |
574 AddSimpleBlock(&cb, kAudioTrackNum, 32); | |
575 AddSimpleBlock(&cb, kVideoTrackNum, 123); | |
576 scoped_ptr<Cluster> cluster(cb.Finish()); | |
577 | |
578 AppendData(cluster->data(), cluster->size()); | |
579 | |
580 EXPECT_TRUE(audio_read_done_1); | |
581 EXPECT_TRUE(video_read_done_1); | |
582 EXPECT_FALSE(audio_read_done_2); | |
583 EXPECT_FALSE(video_read_done_2); | |
584 | |
585 demuxer_->EndOfStream(PIPELINE_OK); | |
586 | |
587 EXPECT_TRUE(audio_read_done_2); | |
588 EXPECT_TRUE(video_read_done_2); | |
589 | |
590 audio->Read(base::Bind(&OnEndOfStreamReadDone, | |
591 &audio_read_done_3)); | |
592 | |
593 video->Read(base::Bind(&OnEndOfStreamReadDone, | |
594 &video_read_done_3)); | |
595 | |
596 EXPECT_TRUE(audio_read_done_3); | |
597 EXPECT_TRUE(video_read_done_3); | |
598 | |
599 audio->Read(base::Bind(&OnEndOfStreamReadDone, | |
600 &audio_read_done_4)); | |
601 | |
602 video->Read(base::Bind(&OnEndOfStreamReadDone, | |
603 &video_read_done_4)); | |
604 | |
605 EXPECT_TRUE(audio_read_done_4); | |
606 EXPECT_TRUE(video_read_done_4); | |
607 | |
scherkus (not reviewing)
2011/08/30 00:59:52
nit: blank line
acolwell GONE FROM CHROMIUM
2011/08/30 17:01:45
Done.
| |
608 } | |
609 | |
467 } // namespace media | 610 } // namespace media |
OLD | NEW |