Index: media/filters/chunk_demuxer_unittest.cc |
diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc |
index 294d7692535b9f9a7ae0b78c969a4cce7811867b..74f2a01176fccd1e1e327f7c31699ea370043462 100644 |
--- a/media/filters/chunk_demuxer_unittest.cc |
+++ b/media/filters/chunk_demuxer_unittest.cc |
@@ -673,6 +673,13 @@ class ChunkDemuxerTest : public ::testing::TestWithParam<bool> { |
scoped_ptr<Cluster> GenerateCluster(int first_audio_timecode, |
int first_video_timecode, |
int block_count) { |
+ return GenerateCluster(first_audio_timecode, first_video_timecode, |
+ block_count, false); |
+ } |
+ scoped_ptr<Cluster> GenerateCluster(int first_audio_timecode, |
+ int first_video_timecode, |
+ int block_count, |
+ bool unknown_size) { |
CHECK_GT(block_count, 0); |
int size = 10; |
@@ -722,7 +729,7 @@ class ChunkDemuxerTest : public ::testing::TestWithParam<bool> { |
kWebMFlagKeyframe, data.get(), size); |
} |
- return cb.Finish(); |
+ return unknown_size ? cb.FinishWithUnknownSize() : cb.Finish(); |
} |
scoped_ptr<Cluster> GenerateSingleStreamCluster(int timecode, |
@@ -2893,11 +2900,14 @@ TEST_P(ChunkDemuxerTest, EmitBuffersDuringAbort) { |
#endif |
TEST_P(ChunkDemuxerTest, WebMIsParsingMediaSegmentDetection) { |
- // TODO(wolenetz): Also test 'unknown' sized clusters. |
- // See http://crbug.com/335676. |
const uint8 kBuffer[] = { |
0x1F, 0x43, 0xB6, 0x75, 0x83, // CLUSTER (size = 3) |
0xE7, 0x81, 0x01, // Cluster TIMECODE (value = 1) |
+ |
+ 0x1F, 0x43, 0xB6, 0x75, 0xFF, // CLUSTER (size = unknown; really 3 due to:) |
+ 0xE7, 0x81, 0x02, // Cluster TIMECODE (value = 2) |
+ /* e.g. put some blocks here... */ |
+ 0x1A, 0x45, 0xDF, 0xA3, 0x8A, // EBMLHEADER (size = 10, not fully appended) |
}; |
// This array indicates expected return value of IsParsingMediaSegment() |
@@ -2905,6 +2915,11 @@ TEST_P(ChunkDemuxerTest, WebMIsParsingMediaSegmentDetection) { |
const bool kExpectedReturnValues[] = { |
false, false, false, false, true, |
true, true, false, |
+ |
+ false, false, false, false, true, |
+ true, true, true, |
+ |
+ true, true, true, true, false, |
}; |
COMPILE_ASSERT(arraysize(kBuffer) == arraysize(kExpectedReturnValues), |
@@ -3454,6 +3469,17 @@ TEST_P(ChunkDemuxerTest, SeekCompletesWithoutTextCues) { |
CheckExpectedBuffers(video_stream, "180 210"); |
} |
+TEST_P(ChunkDemuxerTest, ClusterWithUnknownSize) { |
+ ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); |
+ |
+ AppendCluster(GenerateCluster(0, 0, 4, true)); |
+ CheckExpectedRanges(kSourceId, "{ [0,46) }"); |
+ |
+ // A new cluster indicates end of the previous cluster with unknown size. |
+ AppendCluster(GenerateCluster(46, 66, 5, true)); |
+ CheckExpectedRanges(kSourceId, "{ [0,115) }"); |
+} |
+ |
// Generate two sets of tests: one using FrameProcessor, and one using |
// LegacyFrameProcessor. |
INSTANTIATE_TEST_CASE_P(NewFrameProcessor, ChunkDemuxerTest, Values(false)); |