Index: media/filters/source_buffer_stream_unittest.cc |
diff --git a/media/filters/source_buffer_stream_unittest.cc b/media/filters/source_buffer_stream_unittest.cc |
index 610e78d75866dcca5ada51b9333b61fdbf80f040..cd7faafae1ccd16bfb5b6027d1d62a3e9b63a9e6 100644 |
--- a/media/filters/source_buffer_stream_unittest.cc |
+++ b/media/filters/source_buffer_stream_unittest.cc |
@@ -4041,6 +4041,52 @@ TEST_F(SourceBufferStreamTest, RefinedDurationEstimates_FrontOverlap) { |
CheckNoNextBuffer(); |
} |
+TEST_F(SourceBufferStreamTest, LeadingNonKeyframes_Kept) { |
+ // Append a media segment that begins with a keyframe. |
+ NewSegmentAppend("0K 10D10"); |
+ |
+ // Append another (continuous) media segment that begins with non-keyframes. |
+ NewSegmentAppend("20 30 40K 50 60D10"); |
+ |
+ CheckExpectedRangesByTimestamp("{ [0,70) }"); |
+ Seek(0); |
+ CheckExpectedBuffers("0K 10D10 20 30 40K 50 60D10"); |
+ CheckNoNextBuffer(); |
+} |
+ |
+TEST_F(SourceBufferStreamTest, LeadingNonKeyframes_Dropped) { |
+ // Append a media segment that has some initial non-keyframes. |
+ NewSegmentAppend("0 10 20 30K 40 50 60 70D10K"); |
+ |
+ CheckExpectedRangesByTimestamp("{ [30,80) }"); |
+ SeekToTimestamp(base::TimeDelta::FromMilliseconds(30)); |
+ CheckExpectedBuffers("30K 40 50 60 70K"); |
+ CheckNoNextBuffer(); |
+} |
+ |
+TEST_F(SourceBufferStreamTest, |
+ NonKeyframesDirectlyFollowingRemovedRange_Dropped) { |
+ // Append a media segment containing decode dependencies for subsequent |
+ // append. |
+ NewSegmentAppend("0K 10 20 30 40D10K"); |
+ CheckExpectedRangesByTimestamp("{ [0,50) }"); |
+ |
+ // Remove the decode dependency that subsequent append will depend upon. |
+ RemoveInMs(40, 41, 50); |
+ CheckExpectedRangesByTimestamp("{ [0,40) }"); |
+ |
+ // Append more media, leading with non-keyframes that supposedly might have |
+ // depended upon the now-removed keyframe from time 40ms. |
+ AppendBuffers("50 60 70K 80D10"); |
+ CheckExpectedRangesByTimestamp("{ [0,40) [70,90) }"); |
+ Seek(0); |
+ CheckExpectedBuffers("0K 10 20 30D10"); |
+ CheckNoNextBuffer(); |
+ SeekToTimestamp(base::TimeDelta::FromMilliseconds(70)); |
+ CheckExpectedBuffers("70K 80D10"); |
+ CheckNoNextBuffer(); |
+} |
+ |
// TODO(vrk): Add unit tests where keyframes are unaligned between streams. |
// (crbug.com/133557) |