Index: media/filters/chunk_demuxer_unittest.cc |
diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc |
index 2326de2de6600ef7c2c204cccb38b2f1a1d5aae7..770f28423be05d6bf4cccd8e9d1c18aa38ff5971 100644 |
--- a/media/filters/chunk_demuxer_unittest.cc |
+++ b/media/filters/chunk_demuxer_unittest.cc |
@@ -436,6 +436,49 @@ class ChunkDemuxerTest : public ::testing::Test { |
AppendCluster(source_id, cb.Finish()); |
} |
+ struct MuxedStreamInfo { |
+ MuxedStreamInfo() |
+ : track_number(0), |
+ cluster_description("") |
+ {} |
+ |
+ MuxedStreamInfo(int track_num, const char* cluster_desc) |
+ : track_number(track_num), |
+ cluster_description(cluster_desc) { |
+ } |
+ |
+ int track_number; |
+ // The cluster description passed to AppendSingleStreamCluster(). |
+ // See the documentation for that method for details on the string format. |
+ const char* cluster_description; |
+ }; |
+ |
+ void AppendMuxedCluster(const MuxedStreamInfo& msi_1, |
+ const MuxedStreamInfo& msi_2) { |
+ std::vector<MuxedStreamInfo> msi(2); |
+ msi[0] = msi_1; |
+ msi[1] = msi_2; |
+ AppendMuxedCluster(msi); |
+ } |
+ |
+ void AppendMuxedCluster(const MuxedStreamInfo& msi_1, |
+ const MuxedStreamInfo& msi_2, |
+ const MuxedStreamInfo& msi_3) { |
+ std::vector<MuxedStreamInfo> msi(3); |
+ msi[0] = msi_1; |
+ msi[1] = msi_2; |
+ msi[2] = msi_3; |
+ AppendMuxedCluster(msi); |
+ } |
+ |
+ void AppendMuxedCluster(const std::vector<MuxedStreamInfo> msi) { |
+ for (size_t i = 0; i < msi.size(); ++i) { |
+ AppendSingleStreamCluster(kSourceId, |
+ msi[i].track_number, |
+ msi[i].cluster_description); |
+ } |
+ } |
+ |
void AppendData(const std::string& source_id, |
const uint8* data, size_t length) { |
EXPECT_CALL(host_, AddBufferedTimeRange(_, _)).Times(AnyNumber()); |
@@ -1198,9 +1241,10 @@ TEST_F(ChunkDemuxerTest, SingleTextTrackIdChange) { |
ASSERT_TRUE(video_stream); |
ASSERT_TRUE(text_stream); |
- AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "0K 23K"); |
- AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "0K 30"); |
- AppendSingleStreamCluster(kSourceId, kTextTrackNum, "10K"); |
+ AppendMuxedCluster( |
+ MuxedStreamInfo(kAudioTrackNum, "0K 23K"), |
+ MuxedStreamInfo(kVideoTrackNum, "0K 30"), |
+ MuxedStreamInfo(kTextTrackNum, "10K")); |
CheckExpectedRanges(kSourceId, "{ [0,46) }"); |
scoped_ptr<uint8[]> info_tracks; |
@@ -1213,9 +1257,10 @@ TEST_F(ChunkDemuxerTest, SingleTextTrackIdChange) { |
append_window_end_for_next_append_, |
×tamp_offset_map_[kSourceId]); |
- AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "46K 69K"); |
- AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "60K"); |
- AppendSingleStreamCluster(kSourceId, kAlternateTextTrackNum, "45K"); |
+ AppendMuxedCluster( |
+ MuxedStreamInfo(kAudioTrackNum, "46K 69K"), |
+ MuxedStreamInfo(kVideoTrackNum, "60K"), |
+ MuxedStreamInfo(kAlternateTextTrackNum, "45K")); |
CheckExpectedRanges(kSourceId, "{ [0,92) }"); |
CheckExpectedBuffers(audio_stream, "0 23 46 69"); |
@@ -1242,15 +1287,17 @@ TEST_F(ChunkDemuxerTest, InitSegmentSetsNeedRandomAccessPointFlag) { |
DemuxerStream* video_stream = demuxer_->GetStream(DemuxerStream::VIDEO); |
ASSERT_TRUE(audio_stream && video_stream && text_stream); |
- AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "0 23K"); |
- AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "0 30K"); |
- AppendSingleStreamCluster(kSourceId, kTextTrackNum, "0 40K"); |
+ AppendMuxedCluster( |
+ MuxedStreamInfo(kAudioTrackNum, "0 23K"), |
+ MuxedStreamInfo(kVideoTrackNum, "0 30K"), |
+ MuxedStreamInfo(kTextTrackNum, "0 40K")); |
CheckExpectedRanges(kSourceId, "{ [30,46) }"); |
AppendInitSegment(HAS_TEXT | HAS_AUDIO | HAS_VIDEO); |
- AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "46 69K"); |
- AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "60 90K"); |
- AppendSingleStreamCluster(kSourceId, kTextTrackNum, "80 90K"); |
+ AppendMuxedCluster( |
+ MuxedStreamInfo(kAudioTrackNum, "46 69K"), |
+ MuxedStreamInfo(kVideoTrackNum, "60 90K"), |
+ MuxedStreamInfo(kTextTrackNum, "80 90K")); |
CheckExpectedRanges(kSourceId, "{ [30,92) }"); |
CheckExpectedBuffers(audio_stream, "23 69"); |
@@ -1730,8 +1777,9 @@ TEST_F(ChunkDemuxerTest, EndOfStreamRangeChanges) { |
.WillOnce(SaveArg<0>(&text_stream)); |
ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO | HAS_TEXT)); |
- AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "0K 33"); |
- AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "0K 23K"); |
+ AppendMuxedCluster( |
+ MuxedStreamInfo(kVideoTrackNum, "0K 33"), |
+ MuxedStreamInfo(kAudioTrackNum, "0K 23K")); |
// Check expected ranges and verify that an empty text track does not |
// affect the expected ranges. |
@@ -1752,7 +1800,10 @@ TEST_F(ChunkDemuxerTest, EndOfStreamRangeChanges) { |
// Add text track data and verify that the buffered ranges don't change |
// since the intersection of all the tracks doesn't change. |
EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(200))); |
- AppendSingleStreamCluster(kSourceId, kTextTrackNum, "0K 100K"); |
+ AppendMuxedCluster( |
+ MuxedStreamInfo(kVideoTrackNum, "0K 33"), |
+ MuxedStreamInfo(kAudioTrackNum, "0K 23K"), |
+ MuxedStreamInfo(kTextTrackNum, "0K 100K")); |
CheckExpectedRanges(kSourceId, "{ [0,46) }"); |
// Mark end of stream and verify that text track data is reflected in |
@@ -2369,22 +2420,26 @@ TEST_F(ChunkDemuxerTest, GetBufferedRanges_AudioVideoText) { |
ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO | HAS_TEXT)); |
// Append audio & video data |
- AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "0K 23"); |
- AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "0K 33"); |
+ AppendMuxedCluster( |
+ MuxedStreamInfo(kAudioTrackNum, "0K 23"), |
+ MuxedStreamInfo(kVideoTrackNum, "0K 33")); |
// Verify that a text track with no cues does not result in an empty buffered |
// range. |
CheckExpectedRanges("{ [0,46) }"); |
// Add some text cues. |
- AppendSingleStreamCluster(kSourceId, kTextTrackNum, "0K 100K"); |
+ AppendMuxedCluster( |
+ MuxedStreamInfo(kAudioTrackNum, "100K 123"), |
+ MuxedStreamInfo(kVideoTrackNum, "100K 133"), |
+ MuxedStreamInfo(kTextTrackNum, "100K 200K")); |
- // Verify that the new cues did not affect the buffered ranges. |
- CheckExpectedRanges("{ [0,46) }"); |
+ // Verify that the text cues are not reflected in the buffered ranges. |
+ CheckExpectedRanges("{ [0,46) [100,146) }"); |
- // Remove the buffered range. |
+ // Remove the buffered ranges. |
demuxer_->Remove(kSourceId, base::TimeDelta(), |
- base::TimeDelta::FromMilliseconds(46)); |
+ base::TimeDelta::FromMilliseconds(250)); |
CheckExpectedRanges("{ }"); |
} |
@@ -2394,8 +2449,9 @@ TEST_F(ChunkDemuxerTest, GetBufferedRanges_AudioVideoText) { |
TEST_F(ChunkDemuxerTest, GetBufferedRanges_EndOfStream) { |
ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); |
- AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "0K 23K"); |
- AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "0K 33"); |
+ AppendMuxedCluster( |
+ MuxedStreamInfo(kAudioTrackNum, "0K 23K"), |
+ MuxedStreamInfo(kVideoTrackNum, "0K 33")); |
CheckExpectedRanges("{ [0,46) }"); |
@@ -2414,9 +2470,9 @@ TEST_F(ChunkDemuxerTest, GetBufferedRanges_EndOfStream) { |
EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(246))); |
EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(398))); |
- AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "200K 223K"); |
- AppendSingleStreamCluster(kSourceId, kVideoTrackNum, |
- "200K 233 266 299 332K 365"); |
+ AppendMuxedCluster( |
+ MuxedStreamInfo(kAudioTrackNum, "200K 223K"), |
+ MuxedStreamInfo(kVideoTrackNum, "200K 233 266 299 332K 365")); |
// At this point, the per-stream ranges are as follows: |
// Audio: [0,46) [200,246) |
@@ -2431,8 +2487,9 @@ TEST_F(ChunkDemuxerTest, GetBufferedRanges_EndOfStream) { |
// Video: [0,66) [332,398) |
CheckExpectedRanges("{ [0,46) }"); |
- AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "200K 223K"); |
- AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "200K 233"); |
+ AppendMuxedCluster( |
+ MuxedStreamInfo(kAudioTrackNum, "200K 223K"), |
+ MuxedStreamInfo(kVideoTrackNum, "200K 233")); |
// At this point, the per-stream ranges are as follows: |
// Audio: [0,46) [200,246) |
@@ -3288,9 +3345,10 @@ TEST_F(ChunkDemuxerTest, AppendWindow_Text) { |
// Append a cluster that starts before and ends after the append |
// window. |
- AppendSingleStreamCluster(kSourceId, kVideoTrackNum, |
- "0K 30 60 90 120K 150 180 210 240K 270 300 330K"); |
- AppendSingleStreamCluster(kSourceId, kTextTrackNum, "0K 100K 200K 300K"); |
+ AppendMuxedCluster( |
+ MuxedStreamInfo(kVideoTrackNum, |
+ "0K 30 60 90 120K 150 180 210 240K 270 300 330K"), |
+ MuxedStreamInfo(kTextTrackNum, "0K 100K 200K 300K" )); |
// Verify that text cues that start outside the window are not included |
// in the buffer. Also verify that cues that extend beyond the |
@@ -3303,9 +3361,10 @@ TEST_F(ChunkDemuxerTest, AppendWindow_Text) { |
append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(650); |
// Append more data and verify that a new range is created. |
- AppendSingleStreamCluster(kSourceId, kVideoTrackNum, |
- "360 390 420K 450 480 510 540K 570 600 630K"); |
- AppendSingleStreamCluster(kSourceId, kTextTrackNum, "400K 500K 600K 700K"); |
+ AppendMuxedCluster( |
+ MuxedStreamInfo(kVideoTrackNum, |
+ "360 390 420K 450 480 510 540K 570 600 630K"), |
+ MuxedStreamInfo(kTextTrackNum, "400K 500K 600K 700K" )); |
CheckExpectedRanges(kSourceId, "{ [120,270) [420,630) }"); |
// Seek to the new range and verify that the expected buffers are returned. |
@@ -3331,11 +3390,10 @@ TEST_F(ChunkDemuxerTest, Remove_AudioVideoText) { |
DemuxerStream* audio_stream = demuxer_->GetStream(DemuxerStream::AUDIO); |
DemuxerStream* video_stream = demuxer_->GetStream(DemuxerStream::VIDEO); |
- AppendSingleStreamCluster(kSourceId, kAudioTrackNum, |
- "0K 20K 40K 60K 80K 100K 120K 140K"); |
- AppendSingleStreamCluster(kSourceId, kVideoTrackNum, |
- "0K 30 60 90 120K 150 180"); |
- AppendSingleStreamCluster(kSourceId, kTextTrackNum, "0K 100K 200K"); |
+ AppendMuxedCluster( |
+ MuxedStreamInfo(kAudioTrackNum, "0K 20K 40K 60K 80K 100K 120K 140K"), |
+ MuxedStreamInfo(kVideoTrackNum, "0K 30 60 90 120K 150 180"), |
+ MuxedStreamInfo(kTextTrackNum, "0K 100K 200K")); |
CheckExpectedBuffers(audio_stream, "0 20 40 60 80 100 120 140"); |
CheckExpectedBuffers(video_stream, "0 30 60 90 120 150 180"); |
@@ -3350,11 +3408,10 @@ TEST_F(ChunkDemuxerTest, Remove_AudioVideoText) { |
// Append new buffers that are clearly different than the original |
// ones and verify that only the new buffers are returned. |
- AppendSingleStreamCluster(kSourceId, kAudioTrackNum, |
- "1K 21K 41K 61K 81K 101K 121K 141K"); |
- AppendSingleStreamCluster(kSourceId, kVideoTrackNum, |
- "1K 31 61 91 121K 151 181"); |
- AppendSingleStreamCluster(kSourceId, kTextTrackNum, "1K 101K 201K"); |
+ AppendMuxedCluster( |
+ MuxedStreamInfo(kAudioTrackNum, "1K 21K 41K 61K 81K 101K 121K 141K"), |
+ MuxedStreamInfo(kVideoTrackNum, "1K 31 61 91 121K 151 181"), |
+ MuxedStreamInfo(kTextTrackNum, "1K 101K 201K")); |
Seek(base::TimeDelta()); |
CheckExpectedBuffers(audio_stream, "1 21 41 61 81 101 121 141"); |
@@ -3412,14 +3469,14 @@ TEST_F(ChunkDemuxerTest, SeekCompletesWithoutTextCues) { |
bool text_read_done = false; |
text_stream->Read(base::Bind(&OnReadDone, |
- base::TimeDelta::FromMilliseconds(125), |
+ base::TimeDelta::FromMilliseconds(225), |
&text_read_done)); |
// Append audio & video data so the seek completes. |
- AppendSingleStreamCluster(kSourceId, kAudioTrackNum, |
- "0K 20K 40K 60K 80K 100K 120K 140K 160K 180K"); |
- AppendSingleStreamCluster(kSourceId, kVideoTrackNum, |
- "0K 30 60 90 120K 150 180 210"); |
+ AppendMuxedCluster( |
+ MuxedStreamInfo(kAudioTrackNum, |
+ "0K 20K 40K 60K 80K 100K 120K 140K 160K 180K 200K"), |
+ MuxedStreamInfo(kVideoTrackNum, "0K 30 60 90 120K 150 180 210")); |
message_loop_.RunUntilIdle(); |
EXPECT_TRUE(seek_cb_was_called); |
@@ -3433,14 +3490,17 @@ TEST_F(ChunkDemuxerTest, SeekCompletesWithoutTextCues) { |
// Append text cues that start after the seek point and verify that |
// they are returned by Read() calls. |
- AppendSingleStreamCluster(kSourceId, kTextTrackNum, "125K 175K 225K"); |
+ AppendMuxedCluster( |
+ MuxedStreamInfo(kAudioTrackNum, "220K 240K 260K 280K"), |
+ MuxedStreamInfo(kVideoTrackNum, "240K 270 300 330"), |
+ MuxedStreamInfo(kTextTrackNum, "225K 275K 325K")); |
message_loop_.RunUntilIdle(); |
EXPECT_TRUE(text_read_done); |
// NOTE: we start at 175 here because the buffer at 125 was returned |
// to the pending read initiated above. |
- CheckExpectedBuffers(text_stream, "175 225"); |
+ CheckExpectedBuffers(text_stream, "275 325"); |
// Verify that audio & video streams continue to return expected values. |
CheckExpectedBuffers(audio_stream, "160 180"); |