Chromium Code Reviews| 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 |