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 1629 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1640 dst += cluster_a->size(); | 1640 dst += cluster_a->size(); |
1641 | 1641 |
1642 memcpy(dst, cluster_b->data(), cluster_b->size()); | 1642 memcpy(dst, cluster_b->data(), cluster_b->size()); |
1643 dst += cluster_b->size(); | 1643 dst += cluster_b->size(); |
1644 | 1644 |
1645 AppendDataInPieces(buffer.get(), buffer_size); | 1645 AppendDataInPieces(buffer.get(), buffer_size); |
1646 | 1646 |
1647 GenerateExpectedReads(0, 9); | 1647 GenerateExpectedReads(0, 9); |
1648 } | 1648 } |
1649 | 1649 |
1650 TEST_F(ChunkDemuxerTest, WebMFile_AudioAndVideo) { | 1650 // TODO(acolwell/wolenetz): Re-enable for use with compliant coded frame |
1651 // processor (see http://crbug.com/249422) once WebM stream parser fixed to | |
1652 // always emit frames with valid durations (see http://crbug.com/351166). | |
1653 TEST_F(ChunkDemuxerTest, DISABLED_WebMFile_AudioAndVideo) { | |
1651 struct BufferTimestamps buffer_timestamps[] = { | 1654 struct BufferTimestamps buffer_timestamps[] = { |
1652 {0, 0}, | 1655 {0, 0}, |
1653 {33, 3}, | 1656 {33, 3}, |
1654 {67, 6}, | 1657 {67, 6}, |
1655 {100, 9}, | 1658 {100, 9}, |
1656 {133, 12}, | 1659 {133, 12}, |
1657 {kSkip, kSkip}, | 1660 {kSkip, kSkip}, |
1658 }; | 1661 }; |
1659 | 1662 |
1660 // TODO(wolenetz/acolwell): Remove this SetDuration expectation once the | 1663 // TODO(wolenetz/acolwell): Remove this SetDuration expectation once the |
1661 // file is fixed to have the correct duration in the init segment. | 1664 // file is fixed to have the correct duration in the init segment. |
1662 // See http://crbug.com/354284. | 1665 // See http://crbug.com/354284. |
1663 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2744))); | 1666 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2744))); |
1664 | 1667 |
1665 ASSERT_TRUE(ParseWebMFile("bear-320x240.webm", buffer_timestamps, | 1668 ASSERT_TRUE(ParseWebMFile("bear-320x240.webm", buffer_timestamps, |
1666 base::TimeDelta::FromMilliseconds(2768))); | 1669 base::TimeDelta::FromMilliseconds(2768))); |
1667 } | 1670 } |
1668 | 1671 |
1669 TEST_F(ChunkDemuxerTest, WebMFile_LiveAudioAndVideo) { | 1672 // TODO(acolwell/wolenetz): Re-enable for use with compliant coded frame |
1673 // processor (see http://crbug.com/249422) once WebM stream parser fixed to | |
1674 // always emit frames with valid durations (see http://crbug.com/351166). | |
1675 TEST_F(ChunkDemuxerTest, DISABLED_WebMFile_LiveAudioAndVideo) { | |
1670 struct BufferTimestamps buffer_timestamps[] = { | 1676 struct BufferTimestamps buffer_timestamps[] = { |
1671 {0, 0}, | 1677 {0, 0}, |
1672 {33, 3}, | 1678 {33, 3}, |
1673 {67, 6}, | 1679 {67, 6}, |
1674 {100, 9}, | 1680 {100, 9}, |
1675 {133, 12}, | 1681 {133, 12}, |
1676 {kSkip, kSkip}, | 1682 {kSkip, kSkip}, |
1677 }; | 1683 }; |
1678 | 1684 |
1679 ASSERT_TRUE(ParseWebMFile("bear-320x240-live.webm", buffer_timestamps, | 1685 ASSERT_TRUE(ParseWebMFile("bear-320x240-live.webm", buffer_timestamps, |
1680 kInfiniteDuration())); | 1686 kInfiniteDuration())); |
1681 } | 1687 } |
1682 | 1688 |
1683 TEST_F(ChunkDemuxerTest, WebMFile_AudioOnly) { | 1689 // TODO(acolwell/wolenetz): Re-enable for use with compliant coded frame |
1690 // processor (see http://crbug.com/249422) once WebM stream parser fixed to | |
1691 // always emit frames with valid durations (see http://crbug.com/351166). | |
1692 TEST_F(ChunkDemuxerTest, DISABLED_WebMFile_AudioOnly) { | |
1684 struct BufferTimestamps buffer_timestamps[] = { | 1693 struct BufferTimestamps buffer_timestamps[] = { |
1685 {kSkip, 0}, | 1694 {kSkip, 0}, |
1686 {kSkip, 3}, | 1695 {kSkip, 3}, |
1687 {kSkip, 6}, | 1696 {kSkip, 6}, |
1688 {kSkip, 9}, | 1697 {kSkip, 9}, |
1689 {kSkip, 12}, | 1698 {kSkip, 12}, |
1690 {kSkip, kSkip}, | 1699 {kSkip, kSkip}, |
1691 }; | 1700 }; |
1692 | 1701 |
1693 // TODO(wolenetz/acolwell): Remove this SetDuration expectation once the | 1702 // TODO(wolenetz/acolwell): Remove this SetDuration expectation once the |
1694 // file is fixed to have the correct duration in the init segment. | 1703 // file is fixed to have the correct duration in the init segment. |
1695 // See http://crbug.com/354284. | 1704 // See http://crbug.com/354284. |
1696 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2744))); | 1705 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2744))); |
1697 | 1706 |
1698 ASSERT_TRUE(ParseWebMFile("bear-320x240-audio-only.webm", buffer_timestamps, | 1707 ASSERT_TRUE(ParseWebMFile("bear-320x240-audio-only.webm", buffer_timestamps, |
1699 base::TimeDelta::FromMilliseconds(2768), | 1708 base::TimeDelta::FromMilliseconds(2768), |
1700 HAS_AUDIO)); | 1709 HAS_AUDIO)); |
1701 } | 1710 } |
1702 | 1711 |
1703 TEST_F(ChunkDemuxerTest, WebMFile_VideoOnly) { | 1712 // TODO(acolwell/wolenetz): Re-enable for use with compliant coded frame |
1713 // processor (see http://crbug.com/249422) once WebM stream parser fixed to | |
1714 // always emit frames with valid durations (see http://crbug.com/351166). | |
1715 TEST_F(ChunkDemuxerTest, DISABLED_WebMFile_VideoOnly) { | |
1704 struct BufferTimestamps buffer_timestamps[] = { | 1716 struct BufferTimestamps buffer_timestamps[] = { |
1705 {0, kSkip}, | 1717 {0, kSkip}, |
1706 {33, kSkip}, | 1718 {33, kSkip}, |
1707 {67, kSkip}, | 1719 {67, kSkip}, |
1708 {100, kSkip}, | 1720 {100, kSkip}, |
1709 {133, kSkip}, | 1721 {133, kSkip}, |
1710 {kSkip, kSkip}, | 1722 {kSkip, kSkip}, |
1711 }; | 1723 }; |
1712 | 1724 |
1713 // TODO(wolenetz/acolwell): Remove this SetDuration expectation once the | 1725 // TODO(wolenetz/acolwell): Remove this SetDuration expectation once the |
1714 // file is fixed to have the correct duration in the init segment. | 1726 // file is fixed to have the correct duration in the init segment. |
1715 // See http://crbug.com/354284. | 1727 // See http://crbug.com/354284. |
1716 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2703))); | 1728 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2703))); |
1717 | 1729 |
1718 ASSERT_TRUE(ParseWebMFile("bear-320x240-video-only.webm", buffer_timestamps, | 1730 ASSERT_TRUE(ParseWebMFile("bear-320x240-video-only.webm", buffer_timestamps, |
1719 base::TimeDelta::FromMilliseconds(2737), | 1731 base::TimeDelta::FromMilliseconds(2737), |
1720 HAS_VIDEO)); | 1732 HAS_VIDEO)); |
1721 } | 1733 } |
1722 | 1734 |
1723 TEST_F(ChunkDemuxerTest, WebMFile_AltRefFrames) { | 1735 // TODO(acolwell/wolenetz): Re-enable for use with compliant coded frame |
1736 // processor (see http://crbug.com/249422) once WebM stream parser fixed to | |
1737 // always emit frames with valid durations (see http://crbug.com/351166). | |
1738 TEST_F(ChunkDemuxerTest, DISABLED_WebMFile_AltRefFrames) { | |
1724 struct BufferTimestamps buffer_timestamps[] = { | 1739 struct BufferTimestamps buffer_timestamps[] = { |
1725 {0, 0}, | 1740 {0, 0}, |
1726 {33, 3}, | 1741 {33, 3}, |
1727 {33, 6}, | 1742 {33, 6}, |
1728 {67, 9}, | 1743 {67, 9}, |
1729 {100, 12}, | 1744 {100, 12}, |
1730 {kSkip, kSkip}, | 1745 {kSkip, kSkip}, |
1731 }; | 1746 }; |
1732 | 1747 |
1733 // TODO(wolenetz/acolwell): Remove this SetDuration expectation once the | 1748 // TODO(wolenetz/acolwell): Remove this SetDuration expectation once the |
(...skipping 761 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2495 demuxer_->Seek(seek_time, NewExpectedStatusCB(PIPELINE_OK)); | 2510 demuxer_->Seek(seek_time, NewExpectedStatusCB(PIPELINE_OK)); |
2496 | 2511 |
2497 GenerateExpectedReads(0, 4); | 2512 GenerateExpectedReads(0, 4); |
2498 GenerateExpectedReads(46, 66, 5); | 2513 GenerateExpectedReads(46, 66, 5); |
2499 | 2514 |
2500 EndOfStreamHelper end_of_stream_helper(demuxer_.get()); | 2515 EndOfStreamHelper end_of_stream_helper(demuxer_.get()); |
2501 end_of_stream_helper.RequestReads(); | 2516 end_of_stream_helper.RequestReads(); |
2502 end_of_stream_helper.CheckIfReadDonesWereCalled(true); | 2517 end_of_stream_helper.CheckIfReadDonesWereCalled(true); |
2503 } | 2518 } |
2504 | 2519 |
2505 TEST_F(ChunkDemuxerTest, ConfigChange_Video) { | 2520 // TODO(acolwell/wolenetz): Re-enable for use with compliant coded frame |
2521 // processor (see http://crbug.com/249422) once WebM stream parser fixed to | |
2522 // always emit frames with valid durations (see http://crbug.com/351166). | |
2523 TEST_F(ChunkDemuxerTest, DISABLED_ConfigChange_Video) { | |
2506 InSequence s; | 2524 InSequence s; |
2507 | 2525 |
2508 ASSERT_TRUE(InitDemuxerWithConfigChangeData()); | 2526 ASSERT_TRUE(InitDemuxerWithConfigChangeData()); |
2509 | 2527 |
2510 DemuxerStream::Status status; | 2528 DemuxerStream::Status status; |
2511 base::TimeDelta last_timestamp; | 2529 base::TimeDelta last_timestamp; |
2512 | 2530 |
2513 DemuxerStream* video = demuxer_->GetStream(DemuxerStream::VIDEO); | 2531 DemuxerStream* video = demuxer_->GetStream(DemuxerStream::VIDEO); |
2514 | 2532 |
2515 // Fetch initial video config and verify it matches what we expect. | 2533 // Fetch initial video config and verify it matches what we expect. |
(...skipping 26 matching lines...) Expand all Loading... | |
2542 ASSERT_TRUE(video_config_1.Matches(video->video_decoder_config())); | 2560 ASSERT_TRUE(video_config_1.Matches(video->video_decoder_config())); |
2543 | 2561 |
2544 ExpectRead(DemuxerStream::VIDEO, 801); | 2562 ExpectRead(DemuxerStream::VIDEO, 801); |
2545 | 2563 |
2546 // Read until the end of the stream just to make sure there aren't any other | 2564 // Read until the end of the stream just to make sure there aren't any other |
2547 // config changes. | 2565 // config changes. |
2548 ReadUntilNotOkOrEndOfStream(DemuxerStream::VIDEO, &status, &last_timestamp); | 2566 ReadUntilNotOkOrEndOfStream(DemuxerStream::VIDEO, &status, &last_timestamp); |
2549 ASSERT_EQ(status, DemuxerStream::kOk); | 2567 ASSERT_EQ(status, DemuxerStream::kOk); |
2550 } | 2568 } |
2551 | 2569 |
2552 TEST_F(ChunkDemuxerTest, ConfigChange_Audio) { | 2570 // TODO(acolwell/wolenetz): Re-enable for use with compliant coded frame |
2571 // processor (see http://crbug.com/249422) once WebM stream parser fixed to | |
2572 // always emit frames with valid durations (see http://crbug.com/351166). | |
2573 TEST_F(ChunkDemuxerTest, DISABLED_ConfigChange_Audio) { | |
2553 InSequence s; | 2574 InSequence s; |
2554 | 2575 |
2555 ASSERT_TRUE(InitDemuxerWithConfigChangeData()); | 2576 ASSERT_TRUE(InitDemuxerWithConfigChangeData()); |
2556 | 2577 |
2557 DemuxerStream::Status status; | 2578 DemuxerStream::Status status; |
2558 base::TimeDelta last_timestamp; | 2579 base::TimeDelta last_timestamp; |
2559 | 2580 |
2560 DemuxerStream* audio = demuxer_->GetStream(DemuxerStream::AUDIO); | 2581 DemuxerStream* audio = demuxer_->GetStream(DemuxerStream::AUDIO); |
2561 | 2582 |
2562 // Fetch initial audio config and verify it matches what we expect. | 2583 // Fetch initial audio config and verify it matches what we expect. |
(...skipping 26 matching lines...) Expand all Loading... | |
2589 ASSERT_TRUE(audio_config_1.Matches(audio->audio_decoder_config())); | 2610 ASSERT_TRUE(audio_config_1.Matches(audio->audio_decoder_config())); |
2590 | 2611 |
2591 ExpectRead(DemuxerStream::AUDIO, 779); | 2612 ExpectRead(DemuxerStream::AUDIO, 779); |
2592 | 2613 |
2593 // Read until the end of the stream just to make sure there aren't any other | 2614 // Read until the end of the stream just to make sure there aren't any other |
2594 // config changes. | 2615 // config changes. |
2595 ReadUntilNotOkOrEndOfStream(DemuxerStream::AUDIO, &status, &last_timestamp); | 2616 ReadUntilNotOkOrEndOfStream(DemuxerStream::AUDIO, &status, &last_timestamp); |
2596 ASSERT_EQ(status, DemuxerStream::kOk); | 2617 ASSERT_EQ(status, DemuxerStream::kOk); |
2597 } | 2618 } |
2598 | 2619 |
2599 TEST_F(ChunkDemuxerTest, ConfigChange_Seek) { | 2620 // TODO(acolwell/wolenetz): Re-enable for use with compliant coded frame |
2621 // processor (see http://crbug.com/249422) once WebM stream parser fixed to | |
2622 // always emit frames with valid durations (see http://crbug.com/351166). | |
2623 TEST_F(ChunkDemuxerTest, DISABLED_ConfigChange_Seek) { | |
2600 InSequence s; | 2624 InSequence s; |
2601 | 2625 |
2602 ASSERT_TRUE(InitDemuxerWithConfigChangeData()); | 2626 ASSERT_TRUE(InitDemuxerWithConfigChangeData()); |
2603 | 2627 |
2604 DemuxerStream* video = demuxer_->GetStream(DemuxerStream::VIDEO); | 2628 DemuxerStream* video = demuxer_->GetStream(DemuxerStream::VIDEO); |
2605 | 2629 |
2606 // Fetch initial video config and verify it matches what we expect. | 2630 // Fetch initial video config and verify it matches what we expect. |
2607 const VideoDecoderConfig& video_config_1 = video->video_decoder_config(); | 2631 const VideoDecoderConfig& video_config_1 = video->video_decoder_config(); |
2608 ASSERT_TRUE(video_config_1.IsValidConfig()); | 2632 ASSERT_TRUE(video_config_1.IsValidConfig()); |
2609 EXPECT_EQ(video_config_1.natural_size().width(), 320); | 2633 EXPECT_EQ(video_config_1.natural_size().width(), 320); |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2746 // Add data leading up to the currently set duration. | 2770 // Add data leading up to the currently set duration. |
2747 AppendCluster(GenerateCluster(kStreamDuration - kAudioBlockDuration, | 2771 AppendCluster(GenerateCluster(kStreamDuration - kAudioBlockDuration, |
2748 kStreamDuration - kVideoBlockDuration, | 2772 kStreamDuration - kVideoBlockDuration, |
2749 2)); | 2773 2)); |
2750 | 2774 |
2751 CheckExpectedRanges(kSourceId, "{ [201191,201224) }"); | 2775 CheckExpectedRanges(kSourceId, "{ [201191,201224) }"); |
2752 | 2776 |
2753 // Add data beginning at the currently set duration and expect a new duration | 2777 // Add data beginning at the currently set duration and expect a new duration |
2754 // to be signaled. Note that the last video block will have a higher end | 2778 // to be signaled. Note that the last video block will have a higher end |
2755 // timestamp than the last audio block. | 2779 // timestamp than the last audio block. |
2756 // TODO(wolenetz): Compliant coded frame processor will emit a max of one | |
2757 // duration change per each ProcessFrames(). Remove the first expectation here | |
2758 // once compliant coded frame processor is used. See http://crbug.com/249422. | |
2759 const int kNewStreamDurationAudio = kStreamDuration + kAudioBlockDuration; | |
2760 EXPECT_CALL(host_, SetDuration( | |
2761 base::TimeDelta::FromMilliseconds(kNewStreamDurationAudio))); | |
2762 const int kNewStreamDurationVideo = kStreamDuration + kVideoBlockDuration; | 2780 const int kNewStreamDurationVideo = kStreamDuration + kVideoBlockDuration; |
2763 EXPECT_CALL(host_, SetDuration( | 2781 EXPECT_CALL(host_, SetDuration( |
2764 base::TimeDelta::FromMilliseconds(kNewStreamDurationVideo))); | 2782 base::TimeDelta::FromMilliseconds(kNewStreamDurationVideo))); |
2765 AppendCluster(GenerateCluster(kDefaultDuration().InMilliseconds(), 2)); | 2783 AppendCluster(GenerateCluster(kDefaultDuration().InMilliseconds(), 2)); |
2766 | 2784 |
2767 CheckExpectedRanges(kSourceId, "{ [201191,201247) }"); | 2785 CheckExpectedRanges(kSourceId, "{ [201191,201247) }"); |
2768 | 2786 |
2769 // Add more data to the end of each media type. Note that the last audio block | 2787 // Add more data to the end of each media type. Note that the last audio block |
2770 // will have a higher end timestamp than the last video block. | 2788 // will have a higher end timestamp than the last video block. |
2771 const int kFinalStreamDuration = kStreamDuration + kAudioBlockDuration * 3; | 2789 const int kFinalStreamDuration = kStreamDuration + kAudioBlockDuration * 3; |
2772 EXPECT_CALL(host_, SetDuration( | 2790 EXPECT_CALL(host_, SetDuration( |
2773 base::TimeDelta::FromMilliseconds(kFinalStreamDuration))); | 2791 base::TimeDelta::FromMilliseconds(kFinalStreamDuration))); |
2774 AppendCluster(GenerateCluster(kStreamDuration + kAudioBlockDuration, | 2792 AppendCluster(GenerateCluster(kStreamDuration + kAudioBlockDuration, |
2775 kStreamDuration + kVideoBlockDuration, | 2793 kStreamDuration + kVideoBlockDuration, |
2776 3)); | 2794 3)); |
2777 | 2795 |
2778 // See that the range has increased appropriately (but not to the full | 2796 // See that the range has increased appropriately (but not to the full |
2779 // duration of 201293, since there is not enough video appended for that). | 2797 // duration of 201293, since there is not enough video appended for that). |
2780 CheckExpectedRanges(kSourceId, "{ [201191,201290) }"); | 2798 CheckExpectedRanges(kSourceId, "{ [201191,201290) }"); |
2781 } | 2799 } |
2782 | 2800 |
2783 TEST_F(ChunkDemuxerTest, DurationChangeTimestampOffset) { | 2801 TEST_F(ChunkDemuxerTest, DurationChangeTimestampOffset) { |
2784 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); | 2802 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); |
2785 | 2803 |
2786 ASSERT_TRUE(SetTimestampOffset(kSourceId, kDefaultDuration())); | 2804 ASSERT_TRUE(SetTimestampOffset(kSourceId, kDefaultDuration())); |
2787 | 2805 |
2788 // TODO(wolenetz): Compliant coded frame processor will emit a max of one | |
2789 // duration change per each ProcessFrames(). Remove the first expectation here | |
2790 // once compliant coded frame processor is used. See http://crbug.com/249422. | |
2791 EXPECT_CALL(host_, SetDuration( | |
2792 kDefaultDuration() + base::TimeDelta::FromMilliseconds( | |
2793 kAudioBlockDuration * 2))); | |
2794 EXPECT_CALL(host_, SetDuration( | 2806 EXPECT_CALL(host_, SetDuration( |
2795 kDefaultDuration() + base::TimeDelta::FromMilliseconds( | 2807 kDefaultDuration() + base::TimeDelta::FromMilliseconds( |
2796 kVideoBlockDuration * 2))); | 2808 kVideoBlockDuration * 2))); |
2797 AppendCluster(GenerateCluster(0, 4)); | 2809 AppendCluster(GenerateCluster(0, 4)); |
2798 } | 2810 } |
2799 | 2811 |
2800 TEST_F(ChunkDemuxerTest, EndOfStreamTruncateDuration) { | 2812 TEST_F(ChunkDemuxerTest, EndOfStreamTruncateDuration) { |
2801 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); | 2813 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); |
2802 | 2814 |
2803 AppendCluster(kDefaultFirstCluster()); | 2815 AppendCluster(kDefaultFirstCluster()); |
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3165 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, | 3177 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, |
3166 "0K 20K 40K 60K 80K 100K 120K 140K 160K 180K"); | 3178 "0K 20K 40K 60K 80K 100K 120K 140K 160K 180K"); |
3167 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, | 3179 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, |
3168 "0K 30 60 90K 120K 150 180 210"); | 3180 "0K 30 60 90K 120K 150 180 210"); |
3169 | 3181 |
3170 message_loop_.RunUntilIdle(); | 3182 message_loop_.RunUntilIdle(); |
3171 EXPECT_TRUE(seek_cb_was_called); | 3183 EXPECT_TRUE(seek_cb_was_called); |
3172 EXPECT_FALSE(text_read_done); | 3184 EXPECT_FALSE(text_read_done); |
3173 | 3185 |
3174 // Read some audio & video buffers to further verify seek completion. | 3186 // Read some audio & video buffers to further verify seek completion. |
3175 CheckExpectedBuffers(audio_stream, "120 140"); | 3187 // Note that audio frame duration is 23ms, so post-seek, the first audio |
wolenetz
2014/03/20 19:36:40
acolwell@: Note, this is the interesting discrepan
wolenetz
2014/03/28 19:36:38
Once rebased onto my webm frame duration deriver/e
| |
3176 CheckExpectedBuffers(video_stream, "120 150"); | 3188 // frame returned is the one beginning at time 100 (that is end-overlapped |
3189 // by the next frame at time 120). Similarly, the first video frame returned | |
3190 // is the one beginning at time 90 (that is end-overlapped by the next frame | |
3191 // at time 120). | |
3192 CheckExpectedBuffers(audio_stream, "100 120 140"); | |
3193 CheckExpectedBuffers(video_stream, "90 120 150"); | |
3177 | 3194 |
3178 EXPECT_FALSE(text_read_done); | 3195 EXPECT_FALSE(text_read_done); |
3179 | 3196 |
3180 // Append text cues that start after the seek point and verify that | 3197 // Append text cues that start after the seek point and verify that |
3181 // they are returned by Read() calls. | 3198 // they are returned by Read() calls. |
3182 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "125K 175K 225K"); | 3199 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "125K 175K 225K"); |
3183 | 3200 |
3184 message_loop_.RunUntilIdle(); | 3201 message_loop_.RunUntilIdle(); |
3185 EXPECT_TRUE(text_read_done); | 3202 EXPECT_TRUE(text_read_done); |
3186 | 3203 |
3187 // NOTE: we start at 175 here because the buffer at 125 was returned | 3204 // NOTE: we start at 175 here because the buffer at 125 was returned |
3188 // to the pending read initiated above. | 3205 // to the pending read initiated above. |
3189 CheckExpectedBuffers(text_stream, "175 225"); | 3206 CheckExpectedBuffers(text_stream, "175 225"); |
3190 | 3207 |
3191 // Verify that audio & video streams continue to return expected values. | 3208 // Verify that audio & video streams continue to return expected values. |
3192 CheckExpectedBuffers(audio_stream, "160 180"); | 3209 CheckExpectedBuffers(audio_stream, "160 180"); |
3193 CheckExpectedBuffers(video_stream, "180 210"); | 3210 CheckExpectedBuffers(video_stream, "180 210"); |
3194 } | 3211 } |
3195 | 3212 |
3196 } // namespace media | 3213 } // namespace media |
OLD | NEW |