| Index: media/filters/chunk_demuxer_unittest.cc
|
| diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc
|
| index 8f3be9a97c8910e6d19d1906400a5f6620234ce9..a8fdc4b4a8ef78e82fd2da499903c13e32d68d58 100644
|
| --- a/media/filters/chunk_demuxer_unittest.cc
|
| +++ b/media/filters/chunk_demuxer_unittest.cc
|
| @@ -556,6 +556,7 @@ class ChunkDemuxerTest : public testing::Test {
|
| scoped_refptr<DecoderBuffer> bear2 = ReadTestDataFile("bear-640x360.webm");
|
|
|
| EXPECT_CALL(*this, DemuxerOpened());
|
| +
|
| demuxer_->Initialize(
|
| &host_, CreateInitDoneCB(base::TimeDelta::FromMilliseconds(2744),
|
| PIPELINE_OK), true);
|
| @@ -564,6 +565,11 @@ class ChunkDemuxerTest : public testing::Test {
|
| return false;
|
|
|
| // Append the whole bear1 file.
|
| + // TODO(wolenetz/acolwell): Remove this extra SetDuration expectation once
|
| + // the files are fixed to have the correct duration in their init segments,
|
| + // and the CreateInitDoneCB() call, above, is fixed to used that duration.
|
| + // See http://crbug.com/354284.
|
| + EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2768)));
|
| AppendData(bear1->data(), bear1->data_size());
|
| // Last audio frame has timestamp 2721 and duration 24 (estimated from max
|
| // seen so far for audio track).
|
| @@ -685,14 +691,12 @@ class ChunkDemuxerTest : public testing::Test {
|
| cb.SetClusterTimecode(timecode);
|
|
|
| // Create simple blocks for everything except the last block.
|
| - for (int i = 0; timecode < (end_timecode - block_duration); i++) {
|
| + while (timecode < (end_timecode - block_duration)) {
|
| cb.AddSimpleBlock(track_number, timecode, kWebMFlagKeyframe,
|
| &data[0], data.size());
|
| timecode += block_duration;
|
| }
|
|
|
| - // Make the last block a BlockGroup so that it doesn't get delayed by the
|
| - // block duration calculation logic.
|
| if (track_number == kVideoTrackNum) {
|
| AddVideoBlockGroup(&cb, track_number, timecode, block_duration,
|
| kWebMFlagKeyframe);
|
| @@ -700,6 +704,7 @@ class ChunkDemuxerTest : public testing::Test {
|
| cb.AddBlockGroup(track_number, timecode, block_duration,
|
| kWebMFlagKeyframe, &data[0], data.size());
|
| }
|
| +
|
| return cb.Finish();
|
| }
|
|
|
| @@ -1580,19 +1585,19 @@ TEST_F(ChunkDemuxerTest, EndOfStreamRangeChanges) {
|
| .WillOnce(SaveArg<0>(&text_stream));
|
| ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO | HAS_TEXT));
|
|
|
| - AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "0K 30");
|
| + AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "0K 33");
|
| AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "0K 23K");
|
|
|
| // Check expected ranges and verify that an empty text track does not
|
| // affect the expected ranges.
|
| CheckExpectedRanges(kSourceId, "{ [0,46) }");
|
|
|
| - EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(60)));
|
| + EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(66)));
|
| MarkEndOfStream(PIPELINE_OK);
|
|
|
| // Check expected ranges and verify that an empty text track does not
|
| // affect the expected ranges.
|
| - CheckExpectedRanges(kSourceId, "{ [0,60) }");
|
| + CheckExpectedRanges(kSourceId, "{ [0,66) }");
|
|
|
| // Unmark end of stream state and verify that the ranges return to
|
| // their pre-"end of stream" values.
|
| @@ -1654,6 +1659,11 @@ TEST_F(ChunkDemuxerTest, WebMFile_AudioAndVideo) {
|
| {kSkip, kSkip},
|
| };
|
|
|
| + // TODO(wolenetz/acolwell): Remove this SetDuration expectation and update the
|
| + // ParseWebMFile() call's expected duration, below, once the file is fixed to
|
| + // have the correct duration in the init segment. See http://crbug.com/354284.
|
| + EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2768)));
|
| +
|
| ASSERT_TRUE(ParseWebMFile("bear-320x240.webm", buffer_timestamps,
|
| base::TimeDelta::FromMilliseconds(2744)));
|
| }
|
| @@ -1682,6 +1692,11 @@ TEST_F(ChunkDemuxerTest, WebMFile_AudioOnly) {
|
| {kSkip, kSkip},
|
| };
|
|
|
| + // TODO(wolenetz/acolwell): Remove this SetDuration expectation and update the
|
| + // ParseWebMFile() call's expected duration, below, once the file is fixed to
|
| + // have the correct duration in the init segment. See http://crbug.com/354284.
|
| + EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2768)));
|
| +
|
| ASSERT_TRUE(ParseWebMFile("bear-320x240-audio-only.webm", buffer_timestamps,
|
| base::TimeDelta::FromMilliseconds(2744),
|
| HAS_AUDIO));
|
| @@ -1697,6 +1712,11 @@ TEST_F(ChunkDemuxerTest, WebMFile_VideoOnly) {
|
| {kSkip, kSkip},
|
| };
|
|
|
| + // TODO(wolenetz/acolwell): Remove this SetDuration expectation and update the
|
| + // ParseWebMFile() call's expected duration, below, once the file is fixed to
|
| + // have the correct duration in the init segment. See http://crbug.com/354284.
|
| + EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2736)));
|
| +
|
| ASSERT_TRUE(ParseWebMFile("bear-320x240-video-only.webm", buffer_timestamps,
|
| base::TimeDelta::FromMilliseconds(2703),
|
| HAS_VIDEO));
|
| @@ -1712,6 +1732,11 @@ TEST_F(ChunkDemuxerTest, WebMFile_AltRefFrames) {
|
| {kSkip, kSkip},
|
| };
|
|
|
| + // TODO(wolenetz/acolwell): Remove this SetDuration expectation and update the
|
| + // ParseWebMFile() call's expected duration, below, once the file is fixed to
|
| + // have the correct duration in the init segment. See http://crbug.com/354284.
|
| + EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2768)));
|
| +
|
| ASSERT_TRUE(ParseWebMFile("bear-320x240-altref.webm", buffer_timestamps,
|
| base::TimeDelta::FromMilliseconds(2767)));
|
| }
|
| @@ -2727,22 +2752,34 @@ TEST_F(ChunkDemuxerTest, DurationChange) {
|
|
|
| CheckExpectedRanges(kSourceId, "{ [201191,201224) }");
|
|
|
| - // Add data at the currently set duration. The duration should not increase.
|
| + // Add data beginning at the currently set duration and expect a new duration
|
| + // to be signaled. Note that the last video block will have a higher end
|
| + // timestamp than the last audio block.
|
| + // TODO(wolenetz): Compliant coded frame processor will emit a max of one
|
| + // duration change per each ProcessFrames(). Remove the first expectation here
|
| + // once compliant coded frame processor is used. See http://crbug.com/249422.
|
| + const int kNewStreamDurationAudio = kStreamDuration + kAudioBlockDuration;
|
| + EXPECT_CALL(host_, SetDuration(
|
| + base::TimeDelta::FromMilliseconds(kNewStreamDurationAudio)));
|
| + const int kNewStreamDurationVideo = kStreamDuration + kVideoBlockDuration;
|
| + EXPECT_CALL(host_, SetDuration(
|
| + base::TimeDelta::FromMilliseconds(kNewStreamDurationVideo)));
|
| AppendCluster(GenerateCluster(kDefaultDuration().InMilliseconds(), 2));
|
|
|
| - // Range should not be affected.
|
| - CheckExpectedRanges(kSourceId, "{ [201191,201224) }");
|
| + CheckExpectedRanges(kSourceId, "{ [201191,201247) }");
|
|
|
| - // Now add data past the duration and expect a new duration to be signalled.
|
| - const int kNewStreamDuration = kStreamDuration + kAudioBlockDuration * 2;
|
| + // Add more data to the end of each media type. Note that the last audio block
|
| + // will have a higher end timestamp than the last video block.
|
| + const int kFinalStreamDuration = kStreamDuration + kAudioBlockDuration * 3;
|
| EXPECT_CALL(host_, SetDuration(
|
| - base::TimeDelta::FromMilliseconds(kNewStreamDuration)));
|
| + base::TimeDelta::FromMilliseconds(kFinalStreamDuration)));
|
| AppendCluster(GenerateCluster(kStreamDuration + kAudioBlockDuration,
|
| kStreamDuration + kVideoBlockDuration,
|
| - 2));
|
| + 3));
|
|
|
| - // See that the range has increased appropriately.
|
| - CheckExpectedRanges(kSourceId, "{ [201191,201270) }");
|
| + // See that the range has increased appropriately (but not to the full
|
| + // duration of 201293, since there is not enough video appended for that).
|
| + CheckExpectedRanges(kSourceId, "{ [201191,201290) }");
|
| }
|
|
|
| TEST_F(ChunkDemuxerTest, DurationChangeTimestampOffset) {
|
| @@ -2750,9 +2787,15 @@ TEST_F(ChunkDemuxerTest, DurationChangeTimestampOffset) {
|
|
|
| ASSERT_TRUE(SetTimestampOffset(kSourceId, kDefaultDuration()));
|
|
|
| + // TODO(wolenetz): Compliant coded frame processor will emit a max of one
|
| + // duration change per each ProcessFrames(). Remove the first expectation here
|
| + // once compliant coded frame processor is used. See http://crbug.com/249422.
|
| EXPECT_CALL(host_, SetDuration(
|
| kDefaultDuration() + base::TimeDelta::FromMilliseconds(
|
| kAudioBlockDuration * 2)));
|
| + EXPECT_CALL(host_, SetDuration(
|
| + kDefaultDuration() + base::TimeDelta::FromMilliseconds(
|
| + kVideoBlockDuration * 2)));
|
| AppendCluster(GenerateCluster(0, 4));
|
| }
|
|
|
| @@ -2817,7 +2860,7 @@ TEST_F(ChunkDemuxerTest, ReadAfterAudioDisabled) {
|
| EXPECT_TRUE(audio_read_done);
|
| }
|
|
|
| -// Verifies that signalling end of stream while stalled at a gap
|
| +// Verifies that signaling end of stream while stalled at a gap
|
| // boundary does not trigger end of stream buffers to be returned.
|
| TEST_F(ChunkDemuxerTest, EndOfStreamWhileWaitingForGapToBeFilled) {
|
| ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO));
|
| @@ -2826,7 +2869,6 @@ TEST_F(ChunkDemuxerTest, EndOfStreamWhileWaitingForGapToBeFilled) {
|
| AppendCluster(300, 10);
|
| CheckExpectedRanges(kSourceId, "{ [0,132) [300,432) }");
|
|
|
| -
|
| GenerateExpectedReads(0, 10);
|
|
|
| bool audio_read_done = false;
|
| @@ -2851,18 +2893,18 @@ TEST_F(ChunkDemuxerTest, EndOfStreamWhileWaitingForGapToBeFilled) {
|
|
|
| demuxer_->UnmarkEndOfStream();
|
|
|
| - AppendCluster(138, 24);
|
| + AppendCluster(138, 22);
|
|
|
| message_loop_.RunUntilIdle();
|
|
|
| - CheckExpectedRanges(kSourceId, "{ [0,438) }");
|
| + CheckExpectedRanges(kSourceId, "{ [0,435) }");
|
|
|
| // Verify that the reads have completed.
|
| EXPECT_TRUE(audio_read_done);
|
| EXPECT_TRUE(video_read_done);
|
|
|
| // Read the rest of the buffers.
|
| - GenerateExpectedReads(161, 171, 22);
|
| + GenerateExpectedReads(161, 171, 20);
|
|
|
| // Verify that reads block because the append cleared the end of stream state.
|
| audio_read_done = false;
|
| @@ -2876,6 +2918,7 @@ TEST_F(ChunkDemuxerTest, EndOfStreamWhileWaitingForGapToBeFilled) {
|
| EXPECT_FALSE(audio_read_done);
|
| EXPECT_FALSE(video_read_done);
|
|
|
| + EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(437)));
|
| MarkEndOfStream(PIPELINE_OK);
|
|
|
| EXPECT_TRUE(audio_read_done);
|
| @@ -2964,9 +3007,9 @@ TEST_F(ChunkDemuxerTest, AppendWindow_Video) {
|
|
|
| // Verify that GOPs that start outside the window are not included
|
| // in the buffer. Also verify that buffers that start inside the
|
| - // window and extend beyond the end of the window are included.
|
| - CheckExpectedRanges(kSourceId, "{ [120,300) }");
|
| - CheckExpectedBuffers(stream, "120 150 180 210 240 270");
|
| + // window and extend beyond the end of the window are not included.
|
| + CheckExpectedRanges(kSourceId, "{ [120,270) }");
|
| + CheckExpectedBuffers(stream, "120 150 180 210 240");
|
|
|
| // Extend the append window to [20,650).
|
| append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(650);
|
| @@ -2975,7 +3018,7 @@ TEST_F(ChunkDemuxerTest, AppendWindow_Video) {
|
| // keyframe.
|
| AppendSingleStreamCluster(kSourceId, kVideoTrackNum,
|
| "360 390 420K 450 480 510 540K 570 600 630K");
|
| - CheckExpectedRanges(kSourceId, "{ [120,300) [420,660) }");
|
| + CheckExpectedRanges(kSourceId, "{ [120,270) [420,630) }");
|
| }
|
|
|
| TEST_F(ChunkDemuxerTest, AppendWindow_Audio) {
|
| @@ -2993,9 +3036,9 @@ TEST_F(ChunkDemuxerTest, AppendWindow_Audio) {
|
|
|
| // Verify that frames that start outside the window are not included
|
| // in the buffer. Also verify that buffers that start inside the
|
| - // window and extend beyond the end of the window are included.
|
| - CheckExpectedRanges(kSourceId, "{ [30,300) }");
|
| - CheckExpectedBuffers(stream, "30 60 90 120 150 180 210 240 270");
|
| + // window and extend beyond the end of the window are not included.
|
| + CheckExpectedRanges(kSourceId, "{ [30,270) }");
|
| + CheckExpectedBuffers(stream, "30 60 90 120 150 180 210 240");
|
|
|
| // Extend the append window to [20,650).
|
| append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(650);
|
| @@ -3004,7 +3047,7 @@ TEST_F(ChunkDemuxerTest, AppendWindow_Audio) {
|
| AppendSingleStreamCluster(
|
| kSourceId, kAudioTrackNum,
|
| "360K 390K 420K 450K 480K 510K 540K 570K 600K 630K");
|
| - CheckExpectedRanges(kSourceId, "{ [30,300) [360,660) }");
|
| + CheckExpectedRanges(kSourceId, "{ [30,270) [360,630) }");
|
| }
|
|
|
| TEST_F(ChunkDemuxerTest, AppendWindow_Text) {
|
| @@ -3026,10 +3069,10 @@ TEST_F(ChunkDemuxerTest, AppendWindow_Text) {
|
|
|
| // Verify that text cues that start outside the window are not included
|
| // in the buffer. Also verify that cues that extend beyond the
|
| - // window are included.
|
| - CheckExpectedRanges(kSourceId, "{ [120,300) }");
|
| - CheckExpectedBuffers(video_stream, "120 150 180 210 240 270");
|
| - CheckExpectedBuffers(text_stream, "100 200");
|
| + // window are not included.
|
| + CheckExpectedRanges(kSourceId, "{ [120,270) }");
|
| + CheckExpectedBuffers(video_stream, "120 150 180 210 240");
|
| + CheckExpectedBuffers(text_stream, "100");
|
|
|
| // Extend the append window to [20,650).
|
| append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(650);
|
| @@ -3038,12 +3081,12 @@ TEST_F(ChunkDemuxerTest, AppendWindow_Text) {
|
| AppendSingleStreamCluster(kSourceId, kVideoTrackNum,
|
| "360 390 420K 450 480 510 540K 570 600 630K");
|
| AppendSingleStreamCluster(kSourceId, kTextTrackNum, "400K 500K 600K 700K");
|
| - CheckExpectedRanges(kSourceId, "{ [120,300) [420,660) }");
|
| + CheckExpectedRanges(kSourceId, "{ [120,270) [420,630) }");
|
|
|
| // Seek to the new range and verify that the expected buffers are returned.
|
| Seek(base::TimeDelta::FromMilliseconds(420));
|
| - CheckExpectedBuffers(video_stream, "420 450 480 510 540 570 600 630");
|
| - CheckExpectedBuffers(text_stream, "400 500 600");
|
| + CheckExpectedBuffers(video_stream, "420 450 480 510 540 570 600");
|
| + CheckExpectedBuffers(text_stream, "400 500");
|
| }
|
|
|
| TEST_F(ChunkDemuxerTest, StartWaitingForSeekAfterParseError) {
|
| @@ -3147,7 +3190,7 @@ TEST_F(ChunkDemuxerTest, SeekCompletesWithoutTextCues) {
|
| // to the pending read initiated above.
|
| CheckExpectedBuffers(text_stream, "175 225");
|
|
|
| - // Verify that audio & video streams contiue to return expected values.
|
| + // Verify that audio & video streams continue to return expected values.
|
| CheckExpectedBuffers(audio_stream, "160 180");
|
| CheckExpectedBuffers(video_stream, "180 210");
|
| }
|
|
|