OLD | NEW |
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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "media/base/audio_decoder_config.h" | 6 #include "media/base/audio_decoder_config.h" |
7 #include "media/base/decoder_buffer.h" | 7 #include "media/base/decoder_buffer.h" |
8 #include "media/base/mock_callback.h" | 8 #include "media/base/mock_callback.h" |
9 #include "media/base/mock_demuxer_host.h" | 9 #include "media/base/mock_demuxer_host.h" |
10 #include "media/base/test_data_util.h" | 10 #include "media/base/test_data_util.h" |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 bool AppendDataInPieces(const uint8* data, size_t length, size_t piece_size) { | 248 bool AppendDataInPieces(const uint8* data, size_t length, size_t piece_size) { |
249 const uint8* start = data; | 249 const uint8* start = data; |
250 const uint8* end = data + length; | 250 const uint8* end = data + length; |
251 while (start < end) { | 251 while (start < end) { |
252 base::TimeDelta old_buffered_time = buffered_time_; | 252 base::TimeDelta old_buffered_time = buffered_time_; |
253 size_t append_size = std::min(piece_size, | 253 size_t append_size = std::min(piece_size, |
254 static_cast<size_t>(end - start)); | 254 static_cast<size_t>(end - start)); |
255 if (!AppendData(start, append_size)) | 255 if (!AppendData(start, append_size)) |
256 return false; | 256 return false; |
257 start += append_size; | 257 start += append_size; |
258 | |
259 EXPECT_GE(buffered_time_, old_buffered_time); | |
260 } | 258 } |
261 return true; | 259 return true; |
262 } | 260 } |
263 | 261 |
264 bool AppendInitSegment(bool has_audio, bool has_video, | 262 bool AppendInitSegment(bool has_audio, bool has_video, |
265 bool video_content_encoded) { | 263 bool video_content_encoded) { |
266 return AppendInitSegment(kSourceId, has_audio, has_video, | 264 return AppendInitSegment(kSourceId, has_audio, has_video, |
267 video_content_encoded); | 265 video_content_encoded); |
268 } | 266 } |
269 | 267 |
(...skipping 551 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
821 AddSimpleBlock(&cb, kAudioTrackNum, 5); | 819 AddSimpleBlock(&cb, kAudioTrackNum, 5); |
822 AddSimpleBlock(&cb, kVideoTrackNum, 5); | 820 AddSimpleBlock(&cb, kVideoTrackNum, 5); |
823 AddSimpleBlock(&cb, kAudioTrackNum, 4); | 821 AddSimpleBlock(&cb, kAudioTrackNum, 4); |
824 AddSimpleBlock(&cb, kVideoTrackNum, 7); | 822 AddSimpleBlock(&cb, kVideoTrackNum, 7); |
825 scoped_ptr<Cluster> cluster(cb.Finish()); | 823 scoped_ptr<Cluster> cluster(cb.Finish()); |
826 | 824 |
827 EXPECT_CALL(host_, OnDemuxerError(PIPELINE_ERROR_DECODE)); | 825 EXPECT_CALL(host_, OnDemuxerError(PIPELINE_ERROR_DECODE)); |
828 ASSERT_TRUE(AppendData(cluster->data(), cluster->size())); | 826 ASSERT_TRUE(AppendData(cluster->data(), cluster->size())); |
829 } | 827 } |
830 | 828 |
831 TEST_F(ChunkDemuxerTest, TestMonotonicallyIncreasingTimestampsAcrossClusters) { | |
832 ASSERT_TRUE(InitDemuxer(true, true, false)); | |
833 | |
834 ClusterBuilder cb; | |
835 | |
836 // Test monotonic increasing timestamps on a per stream | |
837 // basis across clusters. | |
838 cb.SetClusterTimecode(5); | |
839 AddSimpleBlock(&cb, kAudioTrackNum, 5); | |
840 AddSimpleBlock(&cb, kVideoTrackNum, 5); | |
841 scoped_ptr<Cluster> cluster_a(cb.Finish()); | |
842 | |
843 ASSERT_TRUE(AppendData(cluster_a->data(), cluster_a->size())); | |
844 | |
845 cb.SetClusterTimecode(4); | |
846 AddSimpleBlock(&cb, kAudioTrackNum, 4); | |
847 AddSimpleBlock(&cb, kVideoTrackNum, 7); | |
848 scoped_ptr<Cluster> cluster_b(cb.Finish()); | |
849 | |
850 EXPECT_CALL(host_, OnDemuxerError(PIPELINE_ERROR_DECODE)); | |
851 ASSERT_TRUE(AppendData(cluster_b->data(), cluster_b->size())); | |
852 | |
853 // Verify that AppendData() doesn't accept more data now. | |
854 scoped_ptr<Cluster> cluster_c(GenerateCluster(10, 2)); | |
855 EXPECT_FALSE(demuxer_->AppendData(kSourceId, cluster_c->data(), | |
856 cluster_c->size())); | |
857 } | |
858 | |
859 // Test the case where a cluster is passed to AppendData() before | 829 // Test the case where a cluster is passed to AppendData() before |
860 // INFO & TRACKS data. | 830 // INFO & TRACKS data. |
861 TEST_F(ChunkDemuxerTest, TestClusterBeforeInitSegment) { | 831 TEST_F(ChunkDemuxerTest, TestClusterBeforeInitSegment) { |
862 EXPECT_CALL(*client_, DemuxerOpened(_)); | 832 EXPECT_CALL(*client_, DemuxerOpened(_)); |
863 demuxer_->Initialize( | 833 demuxer_->Initialize( |
864 &host_, NewExpectedStatusCB(DEMUXER_ERROR_COULD_NOT_OPEN)); | 834 &host_, NewExpectedStatusCB(DEMUXER_ERROR_COULD_NOT_OPEN)); |
865 | 835 |
866 ASSERT_EQ(AddId(), ChunkDemuxer::kOk); | 836 ASSERT_EQ(AddId(), ChunkDemuxer::kOk); |
867 | 837 |
868 scoped_ptr<Cluster> cluster(GenerateCluster(0, 1)); | 838 scoped_ptr<Cluster> cluster(GenerateCluster(0, 1)); |
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1467 | 1437 |
1468 // Test a simple cluster. | 1438 // Test a simple cluster. |
1469 scoped_ptr<Cluster> cluster_1(GenerateSingleStreamCluster(0, 132, | 1439 scoped_ptr<Cluster> cluster_1(GenerateSingleStreamCluster(0, 132, |
1470 kVideoTrackNum, kVideoBlockDuration)); | 1440 kVideoTrackNum, kVideoBlockDuration)); |
1471 | 1441 |
1472 ASSERT_TRUE(AppendData(cluster_1->data(), cluster_1->size())); | 1442 ASSERT_TRUE(AppendData(cluster_1->data(), cluster_1->size())); |
1473 | 1443 |
1474 CheckExpectedRanges("{ [0,132) }"); | 1444 CheckExpectedRanges("{ [0,132) }"); |
1475 | 1445 |
1476 // Append a disjoint cluster to check for two separate ranges. | 1446 // Append a disjoint cluster to check for two separate ranges. |
1477 scoped_ptr<Cluster> cluster_2(GenerateSingleStreamCluster(150, 249, | 1447 scoped_ptr<Cluster> cluster_2(GenerateSingleStreamCluster(200, 299, |
1478 kVideoTrackNum, kVideoBlockDuration)); | 1448 kVideoTrackNum, kVideoBlockDuration)); |
1479 | 1449 |
1480 ASSERT_TRUE(AppendData(cluster_2->data(), cluster_2->size())); | 1450 ASSERT_TRUE(AppendData(cluster_2->data(), cluster_2->size())); |
1481 | 1451 |
1482 CheckExpectedRanges("{ [0,132) [150,249) }"); | 1452 CheckExpectedRanges("{ [0,132) [200,299) }"); |
1483 } | 1453 } |
1484 | 1454 |
1485 TEST_F(ChunkDemuxerTest, GetBufferedRanges_AudioVideo) { | 1455 TEST_F(ChunkDemuxerTest, GetBufferedRanges_AudioVideo) { |
1486 ASSERT_TRUE(InitDemuxer(true, true, false)); | 1456 ASSERT_TRUE(InitDemuxer(true, true, false)); |
1487 | 1457 |
1488 // Audio: 0 -> 23 | 1458 // Audio: 0 -> 23 |
1489 // Video: 0 -> 33 | 1459 // Video: 0 -> 33 |
1490 // Buffered Range: 0 -> 23 | 1460 // Buffered Range: 0 -> 23 |
1491 // Audio block duration is smaller than video block duration, | 1461 // Audio block duration is smaller than video block duration, |
1492 // so the buffered ranges should correspond to the audio blocks. | 1462 // so the buffered ranges should correspond to the audio blocks. |
1493 scoped_ptr<Cluster> cluster_a0( | 1463 scoped_ptr<Cluster> cluster_a0( |
1494 GenerateSingleStreamCluster(0, kAudioBlockDuration, kAudioTrackNum, | 1464 GenerateSingleStreamCluster(0, kAudioBlockDuration, kAudioTrackNum, |
1495 kAudioBlockDuration)); | 1465 kAudioBlockDuration)); |
1496 | 1466 |
1497 scoped_ptr<Cluster> cluster_v0( | 1467 scoped_ptr<Cluster> cluster_v0( |
1498 GenerateSingleStreamCluster(0, kVideoBlockDuration, kVideoTrackNum, | 1468 GenerateSingleStreamCluster(0, kVideoBlockDuration, kVideoTrackNum, |
1499 kVideoBlockDuration)); | 1469 kVideoBlockDuration)); |
1500 | 1470 |
1501 ASSERT_TRUE(AppendData(cluster_a0->data(), cluster_a0->size())); | 1471 ASSERT_TRUE(AppendData(cluster_a0->data(), cluster_a0->size())); |
1502 ASSERT_TRUE(AppendData(cluster_v0->data(), cluster_v0->size())); | 1472 ASSERT_TRUE(AppendData(cluster_v0->data(), cluster_v0->size())); |
1503 | 1473 |
1504 CheckExpectedRanges("{ [0,23) }"); | 1474 CheckExpectedRanges("{ [0,23) }"); |
1505 | 1475 |
1506 // Audio: 100 -> 150 | 1476 // Audio: 300 -> 400 |
1507 // Video: 120 -> 170 | 1477 // Video: 320 -> 420 |
1508 // Buffered Range: 120 -> 150 (end overlap) | 1478 // Buffered Range: 320 -> 400 (end overlap) |
1509 scoped_ptr<Cluster> cluster_a1( | 1479 scoped_ptr<Cluster> cluster_a1( |
1510 GenerateSingleStreamCluster(100, 150, kAudioTrackNum, 50)); | 1480 GenerateSingleStreamCluster(300, 400, kAudioTrackNum, 50)); |
1511 | 1481 |
1512 scoped_ptr<Cluster> cluster_v1( | 1482 scoped_ptr<Cluster> cluster_v1( |
1513 GenerateSingleStreamCluster(120, 170, kVideoTrackNum, 50)); | 1483 GenerateSingleStreamCluster(320, 420, kVideoTrackNum, 50)); |
1514 | 1484 |
1515 ASSERT_TRUE(AppendData(cluster_a1->data(), cluster_a1->size())); | 1485 ASSERT_TRUE(AppendData(cluster_a1->data(), cluster_a1->size())); |
1516 ASSERT_TRUE(AppendData(cluster_v1->data(), cluster_v1->size())); | 1486 ASSERT_TRUE(AppendData(cluster_v1->data(), cluster_v1->size())); |
1517 | 1487 |
1518 CheckExpectedRanges("{ [0,23) [120,150) }"); | 1488 CheckExpectedRanges("{ [0,23) [320,400) }"); |
1519 | 1489 |
1520 // Audio: 220 -> 290 | 1490 // Audio: 520 -> 590 |
1521 // Video: 200 -> 270 | 1491 // Video: 500 -> 570 |
1522 // Buffered Range: 220 -> 270 (front overlap) | 1492 // Buffered Range: 520 -> 570 (front overlap) |
1523 scoped_ptr<Cluster> cluster_a2( | 1493 scoped_ptr<Cluster> cluster_a2( |
1524 GenerateSingleStreamCluster(220, 290, kAudioTrackNum, 70)); | 1494 GenerateSingleStreamCluster(520, 590, kAudioTrackNum, 70)); |
1525 | 1495 |
1526 scoped_ptr<Cluster> cluster_v2( | 1496 scoped_ptr<Cluster> cluster_v2( |
1527 GenerateSingleStreamCluster(200, 270, kVideoTrackNum, 70)); | 1497 GenerateSingleStreamCluster(500, 570, kVideoTrackNum, 70)); |
1528 | 1498 |
1529 ASSERT_TRUE(AppendData(cluster_a2->data(), cluster_a2->size())); | 1499 ASSERT_TRUE(AppendData(cluster_a2->data(), cluster_a2->size())); |
1530 ASSERT_TRUE(AppendData(cluster_v2->data(), cluster_v2->size())); | 1500 ASSERT_TRUE(AppendData(cluster_v2->data(), cluster_v2->size())); |
1531 | 1501 |
1532 CheckExpectedRanges("{ [0,23) [120,150) [220,270) }"); | 1502 CheckExpectedRanges("{ [0,23) [320,400) [520,570) }"); |
1533 | 1503 |
1534 // Audio: 320 -> 350 | 1504 // Audio: 720 -> 750 |
1535 // Video: 300 -> 370 | 1505 // Video: 700 -> 770 |
1536 // Buffered Range: 320 -> 350 (complete overlap, audio) | 1506 // Buffered Range: 720 -> 750 (complete overlap, audio) |
1537 scoped_ptr<Cluster> cluster_a3( | 1507 scoped_ptr<Cluster> cluster_a3( |
1538 GenerateSingleStreamCluster(320, 350, kAudioTrackNum, 30)); | 1508 GenerateSingleStreamCluster(720, 750, kAudioTrackNum, 30)); |
1539 | 1509 |
1540 scoped_ptr<Cluster> cluster_v3( | 1510 scoped_ptr<Cluster> cluster_v3( |
1541 GenerateSingleStreamCluster(300, 370, kVideoTrackNum, 70)); | 1511 GenerateSingleStreamCluster(700, 770, kVideoTrackNum, 70)); |
1542 | 1512 |
1543 ASSERT_TRUE(AppendData(cluster_a3->data(), cluster_a3->size())); | 1513 ASSERT_TRUE(AppendData(cluster_a3->data(), cluster_a3->size())); |
1544 ASSERT_TRUE(AppendData(cluster_v3->data(), cluster_v3->size())); | 1514 ASSERT_TRUE(AppendData(cluster_v3->data(), cluster_v3->size())); |
1545 | 1515 |
1546 CheckExpectedRanges("{ [0,23) [120,150) [220,270) [320,350) }"); | 1516 CheckExpectedRanges("{ [0,23) [320,400) [520,570) [720,750) }"); |
1547 | 1517 |
1548 // Audio: 400 -> 470 | 1518 // Audio: 900 -> 970 |
1549 // Video: 420 -> 450 | 1519 // Video: 920 -> 950 |
1550 // Buffered Range: 420 -> 450 (complete overlap, video) | 1520 // Buffered Range: 920 -> 950 (complete overlap, video) |
1551 scoped_ptr<Cluster> cluster_a4( | 1521 scoped_ptr<Cluster> cluster_a4( |
1552 GenerateSingleStreamCluster(400, 470, kAudioTrackNum, 70)); | 1522 GenerateSingleStreamCluster(900, 970, kAudioTrackNum, 70)); |
1553 | 1523 |
1554 scoped_ptr<Cluster> cluster_v4( | 1524 scoped_ptr<Cluster> cluster_v4( |
1555 GenerateSingleStreamCluster(420, 450, kVideoTrackNum, 30)); | 1525 GenerateSingleStreamCluster(920, 950, kVideoTrackNum, 30)); |
1556 | 1526 |
1557 ASSERT_TRUE(AppendData(cluster_a4->data(), cluster_a4->size())); | 1527 ASSERT_TRUE(AppendData(cluster_a4->data(), cluster_a4->size())); |
1558 ASSERT_TRUE(AppendData(cluster_v4->data(), cluster_v4->size())); | 1528 ASSERT_TRUE(AppendData(cluster_v4->data(), cluster_v4->size())); |
1559 | 1529 |
1560 CheckExpectedRanges("{ [0,23) [120,150) [220,270) [320,350) [420,450) }"); | 1530 CheckExpectedRanges("{ [0,23) [320,400) [520,570) [720,750) [920,950) }"); |
1561 | 1531 |
1562 // Appending within buffered range should not affect buffered ranges. | 1532 // Appending within buffered range should not affect buffered ranges. |
1563 scoped_ptr<Cluster> cluster_a5( | 1533 scoped_ptr<Cluster> cluster_a5( |
1564 GenerateSingleStreamCluster(430, 450, kAudioTrackNum, 20)); | 1534 GenerateSingleStreamCluster(930, 950, kAudioTrackNum, 20)); |
1565 ASSERT_TRUE(AppendData(cluster_a5->data(), cluster_a5->size())); | 1535 ASSERT_TRUE(AppendData(cluster_a5->data(), cluster_a5->size())); |
1566 CheckExpectedRanges("{ [0,23) [120,150) [220,270) [320,350) [420,450) }"); | 1536 CheckExpectedRanges("{ [0,23) [320,400) [520,570) [720,750) [920,950) }"); |
1567 | 1537 |
1568 // Appending to single stream outside buffered ranges should not affect | 1538 // Appending to single stream outside buffered ranges should not affect |
1569 // buffered ranges. | 1539 // buffered ranges. |
1570 scoped_ptr<Cluster> cluster_v5( | 1540 scoped_ptr<Cluster> cluster_v5( |
1571 GenerateSingleStreamCluster(530, 540, kVideoTrackNum, 10)); | 1541 GenerateSingleStreamCluster(1230, 1240, kVideoTrackNum, 10)); |
1572 ASSERT_TRUE(AppendData(cluster_v5->data(), cluster_v5->size())); | 1542 ASSERT_TRUE(AppendData(cluster_v5->data(), cluster_v5->size())); |
1573 CheckExpectedRanges("{ [0,23) [120,150) [220,270) [320,350) [420,450) }"); | 1543 CheckExpectedRanges("{ [0,23) [320,400) [520,570) [720,750) [920,950) }"); |
1574 } | 1544 } |
1575 | 1545 |
1576 // Once EndOfStream() is called, GetBufferedRanges should not cut off any | 1546 // Once EndOfStream() is called, GetBufferedRanges should not cut off any |
1577 // over-hanging tails at the end of the ranges as this is likely due to block | 1547 // over-hanging tails at the end of the ranges as this is likely due to block |
1578 // duration differences. | 1548 // duration differences. |
1579 TEST_F(ChunkDemuxerTest, GetBufferedRanges_EndOfStream) { | 1549 TEST_F(ChunkDemuxerTest, GetBufferedRanges_EndOfStream) { |
1580 ASSERT_TRUE(InitDemuxer(true, true, false)); | 1550 ASSERT_TRUE(InitDemuxer(true, true, false)); |
1581 | 1551 |
1582 scoped_ptr<Cluster> cluster_a( | 1552 scoped_ptr<Cluster> cluster_a( |
1583 GenerateSingleStreamCluster(0, 90, kAudioTrackNum, 90)); | 1553 GenerateSingleStreamCluster(0, 90, kAudioTrackNum, 90)); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1656 EXPECT_EQ(demuxer_->AddId("source_id", "video/mp4", codecs), expected); | 1626 EXPECT_EQ(demuxer_->AddId("source_id", "video/mp4", codecs), expected); |
1657 } | 1627 } |
1658 | 1628 |
1659 TEST_F(ChunkDemuxerTest, TestEndOfStreamFailures) { | 1629 TEST_F(ChunkDemuxerTest, TestEndOfStreamFailures) { |
1660 std::string audio_id = "audio"; | 1630 std::string audio_id = "audio"; |
1661 std::string video_id = "video"; | 1631 std::string video_id = "video"; |
1662 | 1632 |
1663 ASSERT_TRUE(InitDemuxerAudioAndVideoSources(audio_id, video_id)); | 1633 ASSERT_TRUE(InitDemuxerAudioAndVideoSources(audio_id, video_id)); |
1664 | 1634 |
1665 scoped_ptr<Cluster> cluster_a1( | 1635 scoped_ptr<Cluster> cluster_a1( |
1666 GenerateSingleStreamCluster(0, 15, kAudioTrackNum, 15)); | 1636 GenerateSingleStreamCluster(0, 35, kAudioTrackNum, 35)); |
1667 scoped_ptr<Cluster> cluster_v1( | 1637 scoped_ptr<Cluster> cluster_v1( |
1668 GenerateSingleStreamCluster(0, 5, kVideoTrackNum, 5)); | 1638 GenerateSingleStreamCluster(0, 10, kVideoTrackNum, 5)); |
1669 scoped_ptr<Cluster> cluster_v2( | 1639 scoped_ptr<Cluster> cluster_v2( |
1670 GenerateSingleStreamCluster(5, 10, kVideoTrackNum, 5)); | 1640 GenerateSingleStreamCluster(10, 25, kVideoTrackNum, 5)); |
1671 scoped_ptr<Cluster> cluster_v3( | 1641 scoped_ptr<Cluster> cluster_v3( |
1672 GenerateSingleStreamCluster(10, 20, kVideoTrackNum, 10)); | 1642 GenerateSingleStreamCluster(30, 50, kVideoTrackNum, 10)); |
1673 | 1643 |
1674 ASSERT_TRUE(AppendData(audio_id, cluster_a1->data(), cluster_a1->size())); | 1644 ASSERT_TRUE(AppendData(audio_id, cluster_a1->data(), cluster_a1->size())); |
1675 ASSERT_TRUE(AppendData(video_id, cluster_v1->data(), cluster_v1->size())); | 1645 ASSERT_TRUE(AppendData(video_id, cluster_v1->data(), cluster_v1->size())); |
1676 ASSERT_TRUE(AppendData(video_id, cluster_v3->data(), cluster_v3->size())); | 1646 ASSERT_TRUE(AppendData(video_id, cluster_v3->data(), cluster_v3->size())); |
1677 | 1647 |
1678 CheckExpectedRanges(audio_id, "{ [0,15) }"); | 1648 CheckExpectedRanges(audio_id, "{ [0,35) }"); |
1679 CheckExpectedRanges(video_id, "{ [0,5) [10,20) }"); | 1649 CheckExpectedRanges(video_id, "{ [0,10) [30,50) }"); |
1680 | 1650 |
1681 // Make sure that end of stream fails because there is a gap between | 1651 // Make sure that end of stream fails because there is a gap between |
1682 // the current position(0) and the end of the appended data. | 1652 // the current position(0) and the end of the appended data. |
1683 ASSERT_FALSE(demuxer_->EndOfStream(PIPELINE_OK)); | 1653 ASSERT_FALSE(demuxer_->EndOfStream(PIPELINE_OK)); |
1684 | 1654 |
1685 // Seek to an time that is inside the last ranges for both streams | 1655 // Seek to an time that is inside the last ranges for both streams |
1686 // and verify that the EndOfStream() is successful. | 1656 // and verify that the EndOfStream() is successful. |
1687 demuxer_->StartWaitingForSeek(); | 1657 demuxer_->StartWaitingForSeek(); |
1688 demuxer_->Seek(base::TimeDelta::FromMilliseconds(10), | 1658 demuxer_->Seek(base::TimeDelta::FromMilliseconds(30), |
1689 NewExpectedStatusCB(PIPELINE_OK)); | 1659 NewExpectedStatusCB(PIPELINE_OK)); |
1690 | 1660 |
1691 ASSERT_TRUE(demuxer_->EndOfStream(PIPELINE_OK)); | 1661 ASSERT_TRUE(demuxer_->EndOfStream(PIPELINE_OK)); |
1692 | 1662 |
1693 // Seek back to 0 and verify that EndOfStream() fails again. | 1663 // Seek back to 0 and verify that EndOfStream() fails again. |
1694 demuxer_->StartWaitingForSeek(); | 1664 demuxer_->StartWaitingForSeek(); |
1695 demuxer_->Seek(base::TimeDelta::FromMilliseconds(0), | 1665 demuxer_->Seek(base::TimeDelta::FromMilliseconds(0), |
1696 NewExpectedStatusCB(PIPELINE_OK)); | 1666 NewExpectedStatusCB(PIPELINE_OK)); |
1697 | 1667 |
1698 ASSERT_FALSE(demuxer_->EndOfStream(PIPELINE_OK)); | 1668 ASSERT_FALSE(demuxer_->EndOfStream(PIPELINE_OK)); |
1699 | 1669 |
1700 // Append the missing range and verify that EndOfStream() succeeds now. | 1670 // Append the missing range and verify that EndOfStream() succeeds now. |
1701 ASSERT_TRUE(AppendData(video_id, cluster_v2->data(), cluster_v2->size())); | 1671 ASSERT_TRUE(AppendData(video_id, cluster_v2->data(), cluster_v2->size())); |
1702 | 1672 |
1703 CheckExpectedRanges(audio_id, "{ [0,15) }"); | 1673 CheckExpectedRanges(audio_id, "{ [0,35) }"); |
1704 CheckExpectedRanges(video_id, "{ [0,20) }"); | 1674 CheckExpectedRanges(video_id, "{ [0,50) }"); |
1705 | 1675 |
1706 ASSERT_TRUE(demuxer_->EndOfStream(PIPELINE_OK)); | 1676 ASSERT_TRUE(demuxer_->EndOfStream(PIPELINE_OK)); |
1707 } | 1677 } |
1708 | 1678 |
1709 TEST_F(ChunkDemuxerTest, TestGetBufferedRangesBeforeInitSegment) { | 1679 TEST_F(ChunkDemuxerTest, TestGetBufferedRangesBeforeInitSegment) { |
1710 EXPECT_CALL(*client_, DemuxerOpened(_)); | 1680 EXPECT_CALL(*client_, DemuxerOpened(_)); |
1711 demuxer_->Initialize(&host_, CreateInitDoneCB(PIPELINE_OK)); | 1681 demuxer_->Initialize(&host_, CreateInitDoneCB(PIPELINE_OK)); |
1712 ASSERT_EQ(AddId("audio", true, false), ChunkDemuxer::kOk); | 1682 ASSERT_EQ(AddId("audio", true, false), ChunkDemuxer::kOk); |
1713 ASSERT_EQ(AddId("video", false, true), ChunkDemuxer::kOk); | 1683 ASSERT_EQ(AddId("video", false, true), ChunkDemuxer::kOk); |
1714 | 1684 |
1715 CheckExpectedRanges("audio", "{ }"); | 1685 CheckExpectedRanges("audio", "{ }"); |
1716 CheckExpectedRanges("video", "{ }"); | 1686 CheckExpectedRanges("video", "{ }"); |
1717 } | 1687 } |
1718 | 1688 |
1719 } // namespace media | 1689 } // namespace media |
OLD | NEW |