Chromium Code Reviews| 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 <algorithm> | 5 #include <algorithm> |
| 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 "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "base/strings/string_split.h" | 10 #include "base/strings/string_split.h" |
| (...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 549 // bear-640x360.webm AudioDecoderConfig returns 3935 for its extra_data_size() | 549 // bear-640x360.webm AudioDecoderConfig returns 3935 for its extra_data_size() |
| 550 // The resulting audio stream returns data from each file for the following | 550 // The resulting audio stream returns data from each file for the following |
| 551 // time ranges. | 551 // time ranges. |
| 552 // bear-320x240.webm : [0-524) [779-2736) | 552 // bear-320x240.webm : [0-524) [779-2736) |
| 553 // bear-640x360.webm : [527-759) | 553 // bear-640x360.webm : [527-759) |
| 554 bool InitDemuxerWithConfigChangeData() { | 554 bool InitDemuxerWithConfigChangeData() { |
| 555 scoped_refptr<DecoderBuffer> bear1 = ReadTestDataFile("bear-320x240.webm"); | 555 scoped_refptr<DecoderBuffer> bear1 = ReadTestDataFile("bear-320x240.webm"); |
| 556 scoped_refptr<DecoderBuffer> bear2 = ReadTestDataFile("bear-640x360.webm"); | 556 scoped_refptr<DecoderBuffer> bear2 = ReadTestDataFile("bear-640x360.webm"); |
| 557 | 557 |
| 558 EXPECT_CALL(*this, DemuxerOpened()); | 558 EXPECT_CALL(*this, DemuxerOpened()); |
| 559 | |
| 559 demuxer_->Initialize( | 560 demuxer_->Initialize( |
| 560 &host_, CreateInitDoneCB(base::TimeDelta::FromMilliseconds(2744), | 561 &host_, CreateInitDoneCB(base::TimeDelta::FromMilliseconds(2744), |
| 561 PIPELINE_OK), true); | 562 PIPELINE_OK), true); |
| 562 | 563 |
| 563 if (AddId(kSourceId, HAS_AUDIO | HAS_VIDEO) != ChunkDemuxer::kOk) | 564 if (AddId(kSourceId, HAS_AUDIO | HAS_VIDEO) != ChunkDemuxer::kOk) |
| 564 return false; | 565 return false; |
| 565 | 566 |
| 566 // Append the whole bear1 file. | 567 // Append the whole bear1 file. |
| 568 // TODO(wolenetz/acolwell): Remove this extra SetDuration expectation once | |
| 569 // the files are fixed to have the correct duration in their init segments, | |
| 570 // and the CreateInitDoneCB() call, above, is fixed to used that duration. | |
| 571 // See http://crbug.com/354284. | |
| 572 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2768))); | |
| 567 AppendData(bear1->data(), bear1->data_size()); | 573 AppendData(bear1->data(), bear1->data_size()); |
| 568 // Last audio frame has timestamp 2721 and duration 24 (estimated from max | 574 // Last audio frame has timestamp 2721 and duration 24 (estimated from max |
| 569 // seen so far for audio track). | 575 // seen so far for audio track). |
| 570 // Last video frame has timestamp 2703 and duration 33 (from TrackEntry | 576 // Last video frame has timestamp 2703 and duration 33 (from TrackEntry |
| 571 // DefaultDuration for video track). | 577 // DefaultDuration for video track). |
| 572 CheckExpectedRanges(kSourceId, "{ [0,2736) }"); | 578 CheckExpectedRanges(kSourceId, "{ [0,2736) }"); |
| 573 | 579 |
| 574 // Append initialization segment for bear2. | 580 // Append initialization segment for bear2. |
| 575 // Note: Offsets here and below are derived from | 581 // Note: Offsets here and below are derived from |
| 576 // media/test/data/bear-640x360-manifest.js and | 582 // media/test/data/bear-640x360-manifest.js and |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 678 int track_number, | 684 int track_number, |
| 679 int block_duration) { | 685 int block_duration) { |
| 680 CHECK_GT(end_timecode, timecode); | 686 CHECK_GT(end_timecode, timecode); |
| 681 | 687 |
| 682 std::vector<uint8> data(kBlockSize); | 688 std::vector<uint8> data(kBlockSize); |
| 683 | 689 |
| 684 ClusterBuilder cb; | 690 ClusterBuilder cb; |
| 685 cb.SetClusterTimecode(timecode); | 691 cb.SetClusterTimecode(timecode); |
| 686 | 692 |
| 687 // Create simple blocks for everything except the last block. | 693 // Create simple blocks for everything except the last block. |
| 688 for (int i = 0; timecode < (end_timecode - block_duration); i++) { | 694 while (timecode < (end_timecode - block_duration)) { |
| 689 cb.AddSimpleBlock(track_number, timecode, kWebMFlagKeyframe, | 695 cb.AddSimpleBlock(track_number, timecode, kWebMFlagKeyframe, |
| 690 &data[0], data.size()); | 696 &data[0], data.size()); |
| 691 timecode += block_duration; | 697 timecode += block_duration; |
| 692 } | 698 } |
| 693 | 699 |
| 694 // Make the last block a BlockGroup so that it doesn't get delayed by the | |
| 695 // block duration calculation logic. | |
| 696 if (track_number == kVideoTrackNum) { | 700 if (track_number == kVideoTrackNum) { |
| 697 AddVideoBlockGroup(&cb, track_number, timecode, block_duration, | 701 AddVideoBlockGroup(&cb, track_number, timecode, block_duration, |
| 698 kWebMFlagKeyframe); | 702 kWebMFlagKeyframe); |
| 699 } else { | 703 } else { |
| 700 cb.AddBlockGroup(track_number, timecode, block_duration, | 704 cb.AddBlockGroup(track_number, timecode, block_duration, |
| 701 kWebMFlagKeyframe, &data[0], data.size()); | 705 kWebMFlagKeyframe, &data[0], data.size()); |
| 702 } | 706 } |
| 707 | |
| 703 return cb.Finish(); | 708 return cb.Finish(); |
| 704 } | 709 } |
| 705 | 710 |
| 706 void Read(DemuxerStream::Type type, const DemuxerStream::ReadCB& read_cb) { | 711 void Read(DemuxerStream::Type type, const DemuxerStream::ReadCB& read_cb) { |
| 707 demuxer_->GetStream(type)->Read(read_cb); | 712 demuxer_->GetStream(type)->Read(read_cb); |
| 708 message_loop_.RunUntilIdle(); | 713 message_loop_.RunUntilIdle(); |
| 709 } | 714 } |
| 710 | 715 |
| 711 void ReadAudio(const DemuxerStream::ReadCB& read_cb) { | 716 void ReadAudio(const DemuxerStream::ReadCB& read_cb) { |
| 712 Read(DemuxerStream::AUDIO, read_cb); | 717 Read(DemuxerStream::AUDIO, read_cb); |
| (...skipping 860 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1573 } | 1578 } |
| 1574 | 1579 |
| 1575 // Verify buffered range change behavior for audio/video/text tracks. | 1580 // Verify buffered range change behavior for audio/video/text tracks. |
| 1576 TEST_F(ChunkDemuxerTest, EndOfStreamRangeChanges) { | 1581 TEST_F(ChunkDemuxerTest, EndOfStreamRangeChanges) { |
| 1577 DemuxerStream* text_stream = NULL; | 1582 DemuxerStream* text_stream = NULL; |
| 1578 | 1583 |
| 1579 EXPECT_CALL(host_, AddTextStream(_, _)) | 1584 EXPECT_CALL(host_, AddTextStream(_, _)) |
| 1580 .WillOnce(SaveArg<0>(&text_stream)); | 1585 .WillOnce(SaveArg<0>(&text_stream)); |
| 1581 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO | HAS_TEXT)); | 1586 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO | HAS_TEXT)); |
| 1582 | 1587 |
| 1583 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "0K 30"); | 1588 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "0K 33"); |
| 1584 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "0K 23K"); | 1589 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "0K 23K"); |
| 1585 | 1590 |
| 1586 // Check expected ranges and verify that an empty text track does not | 1591 // Check expected ranges and verify that an empty text track does not |
| 1587 // affect the expected ranges. | 1592 // affect the expected ranges. |
| 1588 CheckExpectedRanges(kSourceId, "{ [0,46) }"); | 1593 CheckExpectedRanges(kSourceId, "{ [0,46) }"); |
| 1589 | 1594 |
| 1590 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(60))); | 1595 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(66))); |
| 1591 MarkEndOfStream(PIPELINE_OK); | 1596 MarkEndOfStream(PIPELINE_OK); |
| 1592 | 1597 |
| 1593 // Check expected ranges and verify that an empty text track does not | 1598 // Check expected ranges and verify that an empty text track does not |
| 1594 // affect the expected ranges. | 1599 // affect the expected ranges. |
| 1595 CheckExpectedRanges(kSourceId, "{ [0,60) }"); | 1600 CheckExpectedRanges(kSourceId, "{ [0,66) }"); |
| 1596 | 1601 |
| 1597 // Unmark end of stream state and verify that the ranges return to | 1602 // Unmark end of stream state and verify that the ranges return to |
| 1598 // their pre-"end of stream" values. | 1603 // their pre-"end of stream" values. |
| 1599 demuxer_->UnmarkEndOfStream(); | 1604 demuxer_->UnmarkEndOfStream(); |
| 1600 CheckExpectedRanges(kSourceId, "{ [0,46) }"); | 1605 CheckExpectedRanges(kSourceId, "{ [0,46) }"); |
| 1601 | 1606 |
| 1602 // Add text track data and verify that the buffered ranges don't change | 1607 // Add text track data and verify that the buffered ranges don't change |
| 1603 // since the intersection of all the tracks doesn't change. | 1608 // since the intersection of all the tracks doesn't change. |
| 1604 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(200))); | 1609 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(200))); |
| 1605 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "0K 100K"); | 1610 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "0K 100K"); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1647 TEST_F(ChunkDemuxerTest, WebMFile_AudioAndVideo) { | 1652 TEST_F(ChunkDemuxerTest, WebMFile_AudioAndVideo) { |
| 1648 struct BufferTimestamps buffer_timestamps[] = { | 1653 struct BufferTimestamps buffer_timestamps[] = { |
| 1649 {0, 0}, | 1654 {0, 0}, |
| 1650 {33, 3}, | 1655 {33, 3}, |
| 1651 {67, 6}, | 1656 {67, 6}, |
| 1652 {100, 9}, | 1657 {100, 9}, |
| 1653 {133, 12}, | 1658 {133, 12}, |
| 1654 {kSkip, kSkip}, | 1659 {kSkip, kSkip}, |
| 1655 }; | 1660 }; |
| 1656 | 1661 |
| 1662 // TODO(wolenetz/acolwell): Remove this SetDuration expectation and update the | |
| 1663 // ParseWebMFile() call's expected duration, below, once the file is fixed to | |
| 1664 // have the correct duration in the init segment. See http://crbug.com/354284. | |
| 1665 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2768))); | |
| 1666 | |
| 1657 ASSERT_TRUE(ParseWebMFile("bear-320x240.webm", buffer_timestamps, | 1667 ASSERT_TRUE(ParseWebMFile("bear-320x240.webm", buffer_timestamps, |
| 1658 base::TimeDelta::FromMilliseconds(2744))); | 1668 base::TimeDelta::FromMilliseconds(2744))); |
| 1659 } | 1669 } |
| 1660 | 1670 |
| 1661 TEST_F(ChunkDemuxerTest, WebMFile_LiveAudioAndVideo) { | 1671 TEST_F(ChunkDemuxerTest, WebMFile_LiveAudioAndVideo) { |
| 1662 struct BufferTimestamps buffer_timestamps[] = { | 1672 struct BufferTimestamps buffer_timestamps[] = { |
| 1663 {0, 0}, | 1673 {0, 0}, |
| 1664 {33, 3}, | 1674 {33, 3}, |
| 1665 {67, 6}, | 1675 {67, 6}, |
| 1666 {100, 9}, | 1676 {100, 9}, |
| 1667 {133, 12}, | 1677 {133, 12}, |
| 1668 {kSkip, kSkip}, | 1678 {kSkip, kSkip}, |
| 1669 }; | 1679 }; |
| 1670 | 1680 |
| 1671 ASSERT_TRUE(ParseWebMFile("bear-320x240-live.webm", buffer_timestamps, | 1681 ASSERT_TRUE(ParseWebMFile("bear-320x240-live.webm", buffer_timestamps, |
| 1672 kInfiniteDuration())); | 1682 kInfiniteDuration())); |
| 1673 } | 1683 } |
| 1674 | 1684 |
| 1675 TEST_F(ChunkDemuxerTest, WebMFile_AudioOnly) { | 1685 TEST_F(ChunkDemuxerTest, WebMFile_AudioOnly) { |
| 1676 struct BufferTimestamps buffer_timestamps[] = { | 1686 struct BufferTimestamps buffer_timestamps[] = { |
| 1677 {kSkip, 0}, | 1687 {kSkip, 0}, |
| 1678 {kSkip, 3}, | 1688 {kSkip, 3}, |
| 1679 {kSkip, 6}, | 1689 {kSkip, 6}, |
| 1680 {kSkip, 9}, | 1690 {kSkip, 9}, |
| 1681 {kSkip, 12}, | 1691 {kSkip, 12}, |
| 1682 {kSkip, kSkip}, | 1692 {kSkip, kSkip}, |
| 1683 }; | 1693 }; |
| 1684 | 1694 |
| 1695 // TODO(wolenetz/acolwell): Remove this SetDuration expectation and update the | |
| 1696 // ParseWebMFile() call's expected duration, below, once the file is fixed to | |
| 1697 // have the correct duration in the init segment. See http://crbug.com/354284. | |
| 1698 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2768))); | |
| 1699 | |
| 1685 ASSERT_TRUE(ParseWebMFile("bear-320x240-audio-only.webm", buffer_timestamps, | 1700 ASSERT_TRUE(ParseWebMFile("bear-320x240-audio-only.webm", buffer_timestamps, |
| 1686 base::TimeDelta::FromMilliseconds(2744), | 1701 base::TimeDelta::FromMilliseconds(2744), |
| 1687 HAS_AUDIO)); | 1702 HAS_AUDIO)); |
| 1688 } | 1703 } |
| 1689 | 1704 |
| 1690 TEST_F(ChunkDemuxerTest, WebMFile_VideoOnly) { | 1705 TEST_F(ChunkDemuxerTest, WebMFile_VideoOnly) { |
| 1691 struct BufferTimestamps buffer_timestamps[] = { | 1706 struct BufferTimestamps buffer_timestamps[] = { |
| 1692 {0, kSkip}, | 1707 {0, kSkip}, |
| 1693 {33, kSkip}, | 1708 {33, kSkip}, |
| 1694 {67, kSkip}, | 1709 {67, kSkip}, |
| 1695 {100, kSkip}, | 1710 {100, kSkip}, |
| 1696 {133, kSkip}, | 1711 {133, kSkip}, |
| 1697 {kSkip, kSkip}, | 1712 {kSkip, kSkip}, |
| 1698 }; | 1713 }; |
| 1699 | 1714 |
| 1715 // TODO(wolenetz/acolwell): Remove this SetDuration expectation and update the | |
| 1716 // ParseWebMFile() call's expected duration, below, once the file is fixed to | |
| 1717 // have the correct duration in the init segment. See http://crbug.com/354284. | |
| 1718 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2736))); | |
| 1719 | |
| 1700 ASSERT_TRUE(ParseWebMFile("bear-320x240-video-only.webm", buffer_timestamps, | 1720 ASSERT_TRUE(ParseWebMFile("bear-320x240-video-only.webm", buffer_timestamps, |
| 1701 base::TimeDelta::FromMilliseconds(2703), | 1721 base::TimeDelta::FromMilliseconds(2703), |
| 1702 HAS_VIDEO)); | 1722 HAS_VIDEO)); |
| 1703 } | 1723 } |
| 1704 | 1724 |
| 1705 TEST_F(ChunkDemuxerTest, WebMFile_AltRefFrames) { | 1725 TEST_F(ChunkDemuxerTest, WebMFile_AltRefFrames) { |
| 1706 struct BufferTimestamps buffer_timestamps[] = { | 1726 struct BufferTimestamps buffer_timestamps[] = { |
| 1707 {0, 0}, | 1727 {0, 0}, |
| 1708 {33, 3}, | 1728 {33, 3}, |
| 1709 {33, 6}, | 1729 {33, 6}, |
| 1710 {67, 9}, | 1730 {67, 9}, |
| 1711 {100, 12}, | 1731 {100, 12}, |
| 1712 {kSkip, kSkip}, | 1732 {kSkip, kSkip}, |
| 1713 }; | 1733 }; |
| 1714 | 1734 |
| 1735 // TODO(wolenetz/acolwell): Remove this SetDuration expectation and update the | |
| 1736 // ParseWebMFile() call's expected duration, below, once the file is fixed to | |
| 1737 // have the correct duration in the init segment. See http://crbug.com/354284. | |
| 1738 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2768))); | |
| 1739 | |
| 1715 ASSERT_TRUE(ParseWebMFile("bear-320x240-altref.webm", buffer_timestamps, | 1740 ASSERT_TRUE(ParseWebMFile("bear-320x240-altref.webm", buffer_timestamps, |
| 1716 base::TimeDelta::FromMilliseconds(2767))); | 1741 base::TimeDelta::FromMilliseconds(2767))); |
| 1717 } | 1742 } |
| 1718 | 1743 |
| 1719 // Verify that we output buffers before the entire cluster has been parsed. | 1744 // Verify that we output buffers before the entire cluster has been parsed. |
| 1720 TEST_F(ChunkDemuxerTest, IncrementalClusterParsing) { | 1745 TEST_F(ChunkDemuxerTest, IncrementalClusterParsing) { |
| 1721 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); | 1746 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); |
| 1722 AppendEmptyCluster(0); | 1747 AppendEmptyCluster(0); |
| 1723 | 1748 |
| 1724 scoped_ptr<Cluster> cluster(GenerateCluster(0, 6)); | 1749 scoped_ptr<Cluster> cluster(GenerateCluster(0, 6)); |
| (...skipping 995 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2720 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); | 2745 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); |
| 2721 const int kStreamDuration = kDefaultDuration().InMilliseconds(); | 2746 const int kStreamDuration = kDefaultDuration().InMilliseconds(); |
| 2722 | 2747 |
| 2723 // Add data leading up to the currently set duration. | 2748 // Add data leading up to the currently set duration. |
| 2724 AppendCluster(GenerateCluster(kStreamDuration - kAudioBlockDuration, | 2749 AppendCluster(GenerateCluster(kStreamDuration - kAudioBlockDuration, |
| 2725 kStreamDuration - kVideoBlockDuration, | 2750 kStreamDuration - kVideoBlockDuration, |
| 2726 2)); | 2751 2)); |
| 2727 | 2752 |
| 2728 CheckExpectedRanges(kSourceId, "{ [201191,201224) }"); | 2753 CheckExpectedRanges(kSourceId, "{ [201191,201224) }"); |
| 2729 | 2754 |
| 2730 // Add data at the currently set duration. The duration should not increase. | 2755 // Add data beginning at the currently set duration and expect a new duration |
| 2756 // to be signaled. Note that the last video block will have a higher end | |
| 2757 // timestamp than the last audio block. | |
| 2758 // TODO(wolenetz): Compliant coded frame processor will emit a max of one | |
| 2759 // duration change per each ProcessFrames(). Remove the first expectation here | |
| 2760 // once compliant coded frame processor is used. See http://crbug.com/249422. | |
| 2761 const int kNewStreamDurationAudio = kStreamDuration + kAudioBlockDuration; | |
| 2762 EXPECT_CALL(host_, SetDuration( | |
| 2763 base::TimeDelta::FromMilliseconds(kNewStreamDurationAudio))); | |
| 2764 const int kNewStreamDurationVideo = kStreamDuration + kVideoBlockDuration; | |
| 2765 EXPECT_CALL(host_, SetDuration( | |
| 2766 base::TimeDelta::FromMilliseconds(kNewStreamDurationVideo))); | |
| 2731 AppendCluster(GenerateCluster(kDefaultDuration().InMilliseconds(), 2)); | 2767 AppendCluster(GenerateCluster(kDefaultDuration().InMilliseconds(), 2)); |
| 2732 | 2768 |
| 2733 // Range should not be affected. | 2769 CheckExpectedRanges(kSourceId, "{ [201191,201247) }"); |
| 2734 CheckExpectedRanges(kSourceId, "{ [201191,201224) }"); | |
| 2735 | 2770 |
| 2736 // Now add data past the duration and expect a new duration to be signalled. | 2771 // Add more data to the end of each media type. Note that the last audio block |
| 2737 const int kNewStreamDuration = kStreamDuration + kAudioBlockDuration * 2; | 2772 // will have a higher end timestamp than the last video block. |
| 2773 const int kFinalStreamDuration = kStreamDuration + kAudioBlockDuration * 3; | |
| 2738 EXPECT_CALL(host_, SetDuration( | 2774 EXPECT_CALL(host_, SetDuration( |
| 2739 base::TimeDelta::FromMilliseconds(kNewStreamDuration))); | 2775 base::TimeDelta::FromMilliseconds(kFinalStreamDuration))); |
| 2740 AppendCluster(GenerateCluster(kStreamDuration + kAudioBlockDuration, | 2776 AppendCluster(GenerateCluster(kStreamDuration + kAudioBlockDuration, |
| 2741 kStreamDuration + kVideoBlockDuration, | 2777 kStreamDuration + kVideoBlockDuration, |
| 2742 2)); | 2778 3)); |
| 2743 | 2779 |
| 2744 // See that the range has increased appropriately. | 2780 // See that the range has increased appropriately (but not to the full |
| 2745 CheckExpectedRanges(kSourceId, "{ [201191,201270) }"); | 2781 // duration of 201293, since there is not enough video appended for that). |
| 2782 CheckExpectedRanges(kSourceId, "{ [201191,201290) }"); | |
| 2746 } | 2783 } |
| 2747 | 2784 |
| 2748 TEST_F(ChunkDemuxerTest, DurationChangeTimestampOffset) { | 2785 TEST_F(ChunkDemuxerTest, DurationChangeTimestampOffset) { |
| 2749 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); | 2786 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); |
| 2750 | 2787 |
| 2751 ASSERT_TRUE(SetTimestampOffset(kSourceId, kDefaultDuration())); | 2788 ASSERT_TRUE(SetTimestampOffset(kSourceId, kDefaultDuration())); |
| 2752 | 2789 |
| 2790 // TODO(wolenetz): Compliant coded frame processor will emit a max of one | |
| 2791 // duration change per each ProcessFrames(). Remove the first expectation here | |
| 2792 // once compliant coded frame processor is used. See http://crbug.com/249422. | |
| 2753 EXPECT_CALL(host_, SetDuration( | 2793 EXPECT_CALL(host_, SetDuration( |
| 2754 kDefaultDuration() + base::TimeDelta::FromMilliseconds( | 2794 kDefaultDuration() + base::TimeDelta::FromMilliseconds( |
| 2755 kAudioBlockDuration * 2))); | 2795 kAudioBlockDuration * 2))); |
| 2796 EXPECT_CALL(host_, SetDuration( | |
| 2797 kDefaultDuration() + base::TimeDelta::FromMilliseconds( | |
| 2798 kVideoBlockDuration * 2))); | |
| 2756 AppendCluster(GenerateCluster(0, 4)); | 2799 AppendCluster(GenerateCluster(0, 4)); |
| 2757 } | 2800 } |
| 2758 | 2801 |
| 2759 TEST_F(ChunkDemuxerTest, EndOfStreamTruncateDuration) { | 2802 TEST_F(ChunkDemuxerTest, EndOfStreamTruncateDuration) { |
| 2760 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); | 2803 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); |
| 2761 | 2804 |
| 2762 AppendCluster(kDefaultFirstCluster()); | 2805 AppendCluster(kDefaultFirstCluster()); |
| 2763 | 2806 |
| 2764 EXPECT_CALL(host_, SetDuration( | 2807 EXPECT_CALL(host_, SetDuration( |
| 2765 base::TimeDelta::FromMilliseconds(kDefaultFirstClusterEndTimestamp))); | 2808 base::TimeDelta::FromMilliseconds(kDefaultFirstClusterEndTimestamp))); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2810 | 2853 |
| 2811 // Normally this would return an audio buffer at timestamp zero, but | 2854 // Normally this would return an audio buffer at timestamp zero, but |
| 2812 // all reads should return EOS buffers when disabled. | 2855 // all reads should return EOS buffers when disabled. |
| 2813 bool audio_read_done = false; | 2856 bool audio_read_done = false; |
| 2814 stream->Read(base::Bind(&OnReadDone_EOSExpected, &audio_read_done)); | 2857 stream->Read(base::Bind(&OnReadDone_EOSExpected, &audio_read_done)); |
| 2815 message_loop_.RunUntilIdle(); | 2858 message_loop_.RunUntilIdle(); |
| 2816 | 2859 |
| 2817 EXPECT_TRUE(audio_read_done); | 2860 EXPECT_TRUE(audio_read_done); |
| 2818 } | 2861 } |
| 2819 | 2862 |
| 2820 // Verifies that signalling end of stream while stalled at a gap | 2863 // Verifies that signaling end of stream while stalled at a gap |
| 2821 // boundary does not trigger end of stream buffers to be returned. | 2864 // boundary does not trigger end of stream buffers to be returned. |
| 2822 TEST_F(ChunkDemuxerTest, EndOfStreamWhileWaitingForGapToBeFilled) { | 2865 TEST_F(ChunkDemuxerTest, EndOfStreamWhileWaitingForGapToBeFilled) { |
| 2823 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); | 2866 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); |
| 2824 | 2867 |
| 2825 AppendCluster(0, 10); | 2868 AppendCluster(0, 10); |
| 2826 AppendCluster(300, 10); | 2869 AppendCluster(300, 10); |
| 2827 CheckExpectedRanges(kSourceId, "{ [0,132) [300,432) }"); | 2870 CheckExpectedRanges(kSourceId, "{ [0,132) [300,432) }"); |
| 2828 | 2871 |
| 2829 | |
| 2830 GenerateExpectedReads(0, 10); | 2872 GenerateExpectedReads(0, 10); |
| 2831 | 2873 |
| 2832 bool audio_read_done = false; | 2874 bool audio_read_done = false; |
| 2833 bool video_read_done = false; | 2875 bool video_read_done = false; |
| 2834 ReadAudio(base::Bind(&OnReadDone, | 2876 ReadAudio(base::Bind(&OnReadDone, |
| 2835 base::TimeDelta::FromMilliseconds(138), | 2877 base::TimeDelta::FromMilliseconds(138), |
| 2836 &audio_read_done)); | 2878 &audio_read_done)); |
| 2837 ReadVideo(base::Bind(&OnReadDone, | 2879 ReadVideo(base::Bind(&OnReadDone, |
| 2838 base::TimeDelta::FromMilliseconds(138), | 2880 base::TimeDelta::FromMilliseconds(138), |
| 2839 &video_read_done)); | 2881 &video_read_done)); |
| 2840 | 2882 |
| 2841 // Verify that the reads didn't complete | 2883 // Verify that the reads didn't complete |
| 2842 EXPECT_FALSE(audio_read_done); | 2884 EXPECT_FALSE(audio_read_done); |
| 2843 EXPECT_FALSE(video_read_done); | 2885 EXPECT_FALSE(video_read_done); |
| 2844 | 2886 |
| 2845 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(438))); | 2887 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(438))); |
| 2846 MarkEndOfStream(PIPELINE_OK); | 2888 MarkEndOfStream(PIPELINE_OK); |
| 2847 | 2889 |
| 2848 // Verify that the reads still haven't completed. | 2890 // Verify that the reads still haven't completed. |
| 2849 EXPECT_FALSE(audio_read_done); | 2891 EXPECT_FALSE(audio_read_done); |
| 2850 EXPECT_FALSE(video_read_done); | 2892 EXPECT_FALSE(video_read_done); |
| 2851 | 2893 |
| 2852 demuxer_->UnmarkEndOfStream(); | 2894 demuxer_->UnmarkEndOfStream(); |
| 2853 | 2895 |
| 2854 AppendCluster(138, 24); | 2896 AppendCluster(138, 22); |
| 2855 | 2897 |
| 2856 message_loop_.RunUntilIdle(); | 2898 message_loop_.RunUntilIdle(); |
| 2857 | 2899 |
| 2858 CheckExpectedRanges(kSourceId, "{ [0,438) }"); | 2900 CheckExpectedRanges(kSourceId, "{ [0,435) }"); |
| 2859 | 2901 |
| 2860 // Verify that the reads have completed. | 2902 // Verify that the reads have completed. |
| 2861 EXPECT_TRUE(audio_read_done); | 2903 EXPECT_TRUE(audio_read_done); |
| 2862 EXPECT_TRUE(video_read_done); | 2904 EXPECT_TRUE(video_read_done); |
| 2863 | 2905 |
| 2864 // Read the rest of the buffers. | 2906 // Read the rest of the buffers. |
| 2865 GenerateExpectedReads(161, 171, 22); | 2907 GenerateExpectedReads(161, 171, 20); |
| 2866 | 2908 |
| 2867 // Verify that reads block because the append cleared the end of stream state. | 2909 // Verify that reads block because the append cleared the end of stream state. |
| 2868 audio_read_done = false; | 2910 audio_read_done = false; |
| 2869 video_read_done = false; | 2911 video_read_done = false; |
| 2870 ReadAudio(base::Bind(&OnReadDone_EOSExpected, | 2912 ReadAudio(base::Bind(&OnReadDone_EOSExpected, |
| 2871 &audio_read_done)); | 2913 &audio_read_done)); |
| 2872 ReadVideo(base::Bind(&OnReadDone_EOSExpected, | 2914 ReadVideo(base::Bind(&OnReadDone_EOSExpected, |
| 2873 &video_read_done)); | 2915 &video_read_done)); |
| 2874 | 2916 |
| 2875 // Verify that the reads don't complete. | 2917 // Verify that the reads don't complete. |
| 2876 EXPECT_FALSE(audio_read_done); | 2918 EXPECT_FALSE(audio_read_done); |
| 2877 EXPECT_FALSE(video_read_done); | 2919 EXPECT_FALSE(video_read_done); |
| 2878 | 2920 |
| 2921 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(437))); | |
| 2879 MarkEndOfStream(PIPELINE_OK); | 2922 MarkEndOfStream(PIPELINE_OK); |
| 2880 | 2923 |
| 2881 EXPECT_TRUE(audio_read_done); | 2924 EXPECT_TRUE(audio_read_done); |
| 2882 EXPECT_TRUE(video_read_done); | 2925 EXPECT_TRUE(video_read_done); |
| 2883 } | 2926 } |
| 2884 | 2927 |
| 2885 TEST_F(ChunkDemuxerTest, CanceledSeekDuringInitialPreroll) { | 2928 TEST_F(ChunkDemuxerTest, CanceledSeekDuringInitialPreroll) { |
| 2886 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); | 2929 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); |
| 2887 | 2930 |
| 2888 // Cancel preroll. | 2931 // Cancel preroll. |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2957 // Set the append window to [20,280). | 3000 // Set the append window to [20,280). |
| 2958 append_window_start_for_next_append_ = base::TimeDelta::FromMilliseconds(20); | 3001 append_window_start_for_next_append_ = base::TimeDelta::FromMilliseconds(20); |
| 2959 append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(280); | 3002 append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(280); |
| 2960 | 3003 |
| 2961 // Append a cluster that starts before and ends after the append window. | 3004 // Append a cluster that starts before and ends after the append window. |
| 2962 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, | 3005 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, |
| 2963 "0K 30 60 90 120K 150 180 210 240K 270 300 330K"); | 3006 "0K 30 60 90 120K 150 180 210 240K 270 300 330K"); |
| 2964 | 3007 |
| 2965 // Verify that GOPs that start outside the window are not included | 3008 // Verify that GOPs that start outside the window are not included |
| 2966 // in the buffer. Also verify that buffers that start inside the | 3009 // in the buffer. Also verify that buffers that start inside the |
| 2967 // window and extend beyond the end of the window are included. | 3010 // window and extend beyond the end of the window are not included. |
| 2968 CheckExpectedRanges(kSourceId, "{ [120,300) }"); | 3011 CheckExpectedRanges(kSourceId, "{ [120,270) }"); |
| 2969 CheckExpectedBuffers(stream, "120 150 180 210 240 270"); | 3012 CheckExpectedBuffers(stream, "120 150 180 210 240"); |
| 2970 | 3013 |
| 2971 // Extend the append window to [20,650). | 3014 // Extend the append window to [20,650). |
| 2972 append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(650); | 3015 append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(650); |
| 2973 | 3016 |
| 2974 // Append more data and verify that adding buffers start at the next | 3017 // Append more data and verify that adding buffers start at the next |
| 2975 // keyframe. | 3018 // keyframe. |
| 2976 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, | 3019 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, |
| 2977 "360 390 420K 450 480 510 540K 570 600 630K"); | 3020 "360 390 420K 450 480 510 540K 570 600 630K"); |
| 2978 CheckExpectedRanges(kSourceId, "{ [120,300) [420,660) }"); | 3021 CheckExpectedRanges(kSourceId, "{ [120,270) [420,630) }"); |
| 2979 } | 3022 } |
| 2980 | 3023 |
| 2981 TEST_F(ChunkDemuxerTest, AppendWindow_Audio) { | 3024 TEST_F(ChunkDemuxerTest, AppendWindow_Audio) { |
| 2982 ASSERT_TRUE(InitDemuxer(HAS_AUDIO)); | 3025 ASSERT_TRUE(InitDemuxer(HAS_AUDIO)); |
| 2983 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::AUDIO); | 3026 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::AUDIO); |
| 2984 | 3027 |
| 2985 // Set the append window to [20,280). | 3028 // Set the append window to [20,280). |
| 2986 append_window_start_for_next_append_ = base::TimeDelta::FromMilliseconds(20); | 3029 append_window_start_for_next_append_ = base::TimeDelta::FromMilliseconds(20); |
| 2987 append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(280); | 3030 append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(280); |
| 2988 | 3031 |
| 2989 // Append a cluster that starts before and ends after the append window. | 3032 // Append a cluster that starts before and ends after the append window. |
| 2990 AppendSingleStreamCluster( | 3033 AppendSingleStreamCluster( |
| 2991 kSourceId, kAudioTrackNum, | 3034 kSourceId, kAudioTrackNum, |
| 2992 "0K 30K 60K 90K 120K 150K 180K 210K 240K 270K 300K 330K"); | 3035 "0K 30K 60K 90K 120K 150K 180K 210K 240K 270K 300K 330K"); |
| 2993 | 3036 |
| 2994 // Verify that frames that start outside the window are not included | 3037 // Verify that frames that start outside the window are not included |
| 2995 // in the buffer. Also verify that buffers that start inside the | 3038 // in the buffer. Also verify that buffers that start inside the |
| 2996 // window and extend beyond the end of the window are included. | 3039 // window and extend beyond the end of the window are not included. |
| 2997 CheckExpectedRanges(kSourceId, "{ [30,300) }"); | 3040 CheckExpectedRanges(kSourceId, "{ [30,270) }"); |
| 2998 CheckExpectedBuffers(stream, "30 60 90 120 150 180 210 240 270"); | 3041 CheckExpectedBuffers(stream, "30 60 90 120 150 180 210 240"); |
| 2999 | 3042 |
| 3000 // Extend the append window to [20,650). | 3043 // Extend the append window to [20,650). |
| 3001 append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(650); | 3044 append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(650); |
| 3002 | 3045 |
| 3003 // Append more data and verify that a new range is created. | 3046 // Append more data and verify that a new range is created. |
| 3004 AppendSingleStreamCluster( | 3047 AppendSingleStreamCluster( |
| 3005 kSourceId, kAudioTrackNum, | 3048 kSourceId, kAudioTrackNum, |
| 3006 "360K 390K 420K 450K 480K 510K 540K 570K 600K 630K"); | 3049 "360K 390K 420K 450K 480K 510K 540K 570K 600K 630K"); |
| 3007 CheckExpectedRanges(kSourceId, "{ [30,300) [360,660) }"); | 3050 CheckExpectedRanges(kSourceId, "{ [30,270) [360,630) }"); |
| 3008 } | 3051 } |
| 3009 | 3052 |
| 3010 TEST_F(ChunkDemuxerTest, AppendWindow_Text) { | 3053 TEST_F(ChunkDemuxerTest, AppendWindow_Text) { |
| 3011 DemuxerStream* text_stream = NULL; | 3054 DemuxerStream* text_stream = NULL; |
| 3012 EXPECT_CALL(host_, AddTextStream(_, _)) | 3055 EXPECT_CALL(host_, AddTextStream(_, _)) |
| 3013 .WillOnce(SaveArg<0>(&text_stream)); | 3056 .WillOnce(SaveArg<0>(&text_stream)); |
| 3014 ASSERT_TRUE(InitDemuxer(HAS_VIDEO | HAS_TEXT)); | 3057 ASSERT_TRUE(InitDemuxer(HAS_VIDEO | HAS_TEXT)); |
| 3015 DemuxerStream* video_stream = demuxer_->GetStream(DemuxerStream::VIDEO); | 3058 DemuxerStream* video_stream = demuxer_->GetStream(DemuxerStream::VIDEO); |
| 3016 | 3059 |
| 3017 // Set the append window to [20,280). | 3060 // Set the append window to [20,280). |
| 3018 append_window_start_for_next_append_ = base::TimeDelta::FromMilliseconds(20); | 3061 append_window_start_for_next_append_ = base::TimeDelta::FromMilliseconds(20); |
| 3019 append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(280); | 3062 append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(280); |
| 3020 | 3063 |
| 3021 // Append a cluster that starts before and ends after the append | 3064 // Append a cluster that starts before and ends after the append |
| 3022 // window. | 3065 // window. |
| 3023 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, | 3066 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, |
| 3024 "0K 30 60 90 120K 150 180 210 240K 270 300 330K"); | 3067 "0K 30 60 90 120K 150 180 210 240K 270 300 330K"); |
| 3025 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "0K 100K 200K 300K"); | 3068 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "0K 100K 200K 300K"); |
| 3026 | 3069 |
| 3027 // Verify that text cues that start outside the window are not included | 3070 // Verify that text cues that start outside the window are not included |
| 3028 // in the buffer. Also verify that cues that extend beyond the | 3071 // in the buffer. Also verify that cues that extend beyond the |
| 3029 // window are included. | 3072 // window are not included. |
| 3030 CheckExpectedRanges(kSourceId, "{ [120,300) }"); | 3073 CheckExpectedRanges(kSourceId, "{ [120,270) }"); |
| 3031 CheckExpectedBuffers(video_stream, "120 150 180 210 240 270"); | 3074 CheckExpectedBuffers(video_stream, "120 150 180 210 240"); |
| 3032 CheckExpectedBuffers(text_stream, "100 200"); | 3075 CheckExpectedBuffers(text_stream, "100"); |
| 3033 | 3076 |
| 3034 // Extend the append window to [20,650). | 3077 // Extend the append window to [20,650). |
| 3035 append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(650); | 3078 append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(650); |
| 3036 | 3079 |
| 3037 // Append more data and verify that a new range is created. | 3080 // Append more data and verify that a new range is created. |
| 3038 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, | 3081 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, |
| 3039 "360 390 420K 450 480 510 540K 570 600 630K"); | 3082 "360 390 420K 450 480 510 540K 570 600 630K"); |
| 3040 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "400K 500K 600K 700K"); | 3083 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "400K 500K 600K 700K"); |
| 3041 CheckExpectedRanges(kSourceId, "{ [120,300) [420,660) }"); | 3084 CheckExpectedRanges(kSourceId, "{ [120,270) [420,630) }"); |
| 3042 | 3085 |
| 3043 // Seek to the new range and verify that the expected buffers are returned. | 3086 // Seek to the new range and verify that the expected buffers are returned. |
| 3044 Seek(base::TimeDelta::FromMilliseconds(420)); | 3087 Seek(base::TimeDelta::FromMilliseconds(420)); |
| 3045 CheckExpectedBuffers(video_stream, "420 450 480 510 540 570 600 630"); | 3088 CheckExpectedBuffers(video_stream, "420 450 480 510 540 570 600"); |
| 3046 CheckExpectedBuffers(text_stream, "400 500 600"); | 3089 CheckExpectedBuffers(text_stream, "400 500"); |
| 3047 } | 3090 } |
| 3048 | 3091 |
| 3049 TEST_F(ChunkDemuxerTest, StartWaitingForSeekAfterParseError) { | 3092 TEST_F(ChunkDemuxerTest, StartWaitingForSeekAfterParseError) { |
| 3050 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); | 3093 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); |
| 3051 EXPECT_CALL(host_, OnDemuxerError(PIPELINE_ERROR_DECODE)); | 3094 EXPECT_CALL(host_, OnDemuxerError(PIPELINE_ERROR_DECODE)); |
| 3052 AppendGarbage(); | 3095 AppendGarbage(); |
| 3053 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(50); | 3096 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(50); |
| 3054 demuxer_->StartWaitingForSeek(seek_time); | 3097 demuxer_->StartWaitingForSeek(seek_time); |
| 3055 } | 3098 } |
| 3056 | 3099 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3117 | 3160 |
| 3118 bool text_read_done = false; | 3161 bool text_read_done = false; |
| 3119 text_stream->Read(base::Bind(&OnReadDone, | 3162 text_stream->Read(base::Bind(&OnReadDone, |
| 3120 base::TimeDelta::FromMilliseconds(125), | 3163 base::TimeDelta::FromMilliseconds(125), |
| 3121 &text_read_done)); | 3164 &text_read_done)); |
| 3122 | 3165 |
| 3123 // Append audio & video data so the seek completes. | 3166 // Append audio & video data so the seek completes. |
| 3124 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, | 3167 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, |
| 3125 "0K 20K 40K 60K 80K 100K 120K 140K 160K 180K"); | 3168 "0K 20K 40K 60K 80K 100K 120K 140K 160K 180K"); |
| 3126 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, | 3169 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, |
| 3127 "0K 30 60 90 120K 150 180 210"); | 3170 "0K 30 60 90K 120K 150 180 210"); |
|
acolwell GONE FROM CHROMIUM
2014/03/28 21:01:34
Why did this become a keyframe?
wolenetz
2014/03/28 22:17:43
Thanks for catching that. It slipped through the r
| |
| 3128 | 3171 |
| 3129 message_loop_.RunUntilIdle(); | 3172 message_loop_.RunUntilIdle(); |
| 3130 EXPECT_TRUE(seek_cb_was_called); | 3173 EXPECT_TRUE(seek_cb_was_called); |
| 3131 EXPECT_FALSE(text_read_done); | 3174 EXPECT_FALSE(text_read_done); |
| 3132 | 3175 |
| 3133 // Read some audio & video buffers to further verify seek completion. | 3176 // Read some audio & video buffers to further verify seek completion. |
| 3134 CheckExpectedBuffers(audio_stream, "120 140"); | 3177 CheckExpectedBuffers(audio_stream, "120 140"); |
| 3135 CheckExpectedBuffers(video_stream, "120 150"); | 3178 CheckExpectedBuffers(video_stream, "120 150"); |
| 3136 | 3179 |
| 3137 EXPECT_FALSE(text_read_done); | 3180 EXPECT_FALSE(text_read_done); |
| 3138 | 3181 |
| 3139 // Append text cues that start after the seek point and verify that | 3182 // Append text cues that start after the seek point and verify that |
| 3140 // they are returned by Read() calls. | 3183 // they are returned by Read() calls. |
| 3141 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "125K 175K 225K"); | 3184 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "125K 175K 225K"); |
| 3142 | 3185 |
| 3143 message_loop_.RunUntilIdle(); | 3186 message_loop_.RunUntilIdle(); |
| 3144 EXPECT_TRUE(text_read_done); | 3187 EXPECT_TRUE(text_read_done); |
| 3145 | 3188 |
| 3146 // NOTE: we start at 175 here because the buffer at 125 was returned | 3189 // NOTE: we start at 175 here because the buffer at 125 was returned |
| 3147 // to the pending read initiated above. | 3190 // to the pending read initiated above. |
| 3148 CheckExpectedBuffers(text_stream, "175 225"); | 3191 CheckExpectedBuffers(text_stream, "175 225"); |
| 3149 | 3192 |
| 3150 // Verify that audio & video streams contiue to return expected values. | 3193 // Verify that audio & video streams continue to return expected values. |
| 3151 CheckExpectedBuffers(audio_stream, "160 180"); | 3194 CheckExpectedBuffers(audio_stream, "160 180"); |
| 3152 CheckExpectedBuffers(video_stream, "180 210"); | 3195 CheckExpectedBuffers(video_stream, "180 210"); |
| 3153 } | 3196 } |
| 3154 | 3197 |
| 3155 } // namespace media | 3198 } // namespace media |
| OLD | NEW |