Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(812)

Unified Diff: media/filters/source_buffer_stream_unittest.cc

Issue 10879056: Support setting an explicit duration on MediaSource objects (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: response to CR Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/filters/source_buffer_stream.cc ('k') | webkit/media/webmediaplayer_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 0512aea3a85a41c5d0b1309a86a5e5e12225544c..10084ccca709974cc142922ae0c676246905b433 100644
--- a/media/filters/source_buffer_stream_unittest.cc
+++ b/media/filters/source_buffer_stream_unittest.cc
@@ -1919,6 +1919,129 @@ TEST_F(SourceBufferStreamTest, ConfigChange_Seek) {
CheckExpectedBuffers(0, 4, &kDataA);
}
+TEST_F(SourceBufferStreamTest, SetExplicitDuration) {
+ // Append 2 buffers at positions 5 through 6.
+ NewSegmentAppend(5, 2);
+
+ // Append 2 buffers at positions 10 through 11.
+ NewSegmentAppend(10, 2);
+
+ // Append 2 buffers at positions 15 through 16.
+ NewSegmentAppend(15, 2);
+
+ // Check expected ranges.
+ CheckExpectedRanges("{ [5,6) [10,11) [15,16) }");
+
+ // Set duration to be between buffers 6 and 10.
+ stream_->OnSetDuration(frame_duration() * 8);
+
+ // Should truncate the data after 6.
+ CheckExpectedRanges("{ [5,6) }");
+
+ // Adding data past the previous duration should still work.
+ NewSegmentAppend(0, 20);
+ CheckExpectedRanges("{ [0,19) }");
+}
+
+TEST_F(SourceBufferStreamTest, SetExplicitDuration_EdgeCase) {
+ // Append 10 buffers at positions 10 through 19.
+ NewSegmentAppend(10, 10);
+
+ // Append 5 buffers at positions 25 through 29.
+ NewSegmentAppend(25, 5);
+
+ // Check expected ranges.
+ CheckExpectedRanges("{ [10,19) [25,29) }");
+
+ // Set duration to be right before buffer 25.
+ stream_->OnSetDuration(frame_duration() * 25);
+
+ // Should truncate the last range.
+ CheckExpectedRanges("{ [10,19) }");
+}
+
+TEST_F(SourceBufferStreamTest, SetExplicitDuration_DeletePartialRange) {
+ // Append 5 buffers at positions 0 through 4.
+ NewSegmentAppend(0, 5);
+
+ // Append 10 buffers at positions 10 through 19.
+ NewSegmentAppend(10, 10);
+
+ // Append 5 buffers at positions 25 through 29.
+ NewSegmentAppend(25, 5);
+
+ // Check expected ranges.
+ CheckExpectedRanges("{ [0,4) [10,19) [25,29) }");
+
+ // Set duration to be between buffers 13 and 14.
+ stream_->OnSetDuration(frame_duration() * 14);
+
+ // Should truncate the data after 13.
+ CheckExpectedRanges("{ [0,4) [10,13) }");
+}
+
+TEST_F(SourceBufferStreamTest, SetExplicitDuration_DeleteSelectedRange) {
+ // Append 2 buffers at positions 5 through 6.
+ NewSegmentAppend(5, 2);
+
+ // Append 2 buffers at positions 10 through 11.
+ NewSegmentAppend(10, 2);
+
+ // Append 2 buffers at positions 15 through 16.
+ NewSegmentAppend(15, 2);
+
+ // Check expected ranges.
+ CheckExpectedRanges("{ [5,6) [10,11) [15,16) }");
+
+ // Seek to 10.
+ Seek(10);
+
+ // Set duration to be after position 3.
+ stream_->OnSetDuration(frame_duration() * 4);
+
+ // Expect everything to be deleted, and should not have next buffer anymore.
+ CheckNoNextBuffer();
+ CheckExpectedRanges("{ }");
+
+ // Appending data at position 10 should not fulfill the seek.
+ // (If the duration is set to be something smaller than the current seek
+ // point, then the seek point is reset and the SourceBufferStream waits
+ // for a new seek request. Therefore even if the data is re-appended, it
+ // should not fulfill the old seek.)
+ NewSegmentAppend(0, 15);
+ CheckNoNextBuffer();
+ CheckExpectedRanges("{ [0,14) }");
+}
+
+TEST_F(SourceBufferStreamTest, SetExplicitDuration_DeletePartialSelectedRange) {
+ // Append 5 buffers at positions 0 through 4.
+ NewSegmentAppend(0, 5);
+
+ // Append 20 buffers at positions 10 through 29.
+ NewSegmentAppend(10, 20);
+
+ // Check expected ranges.
+ CheckExpectedRanges("{ [0,4) [10,29) }");
+
+ // Seek to position 10.
+ Seek(10);
+
+ // Set duration to be between buffers 24 and 25.
+ stream_->OnSetDuration(frame_duration() * 25);
+
+ // Should truncate the data after 24.
+ CheckExpectedRanges("{ [0,4) [10,24) }");
+
+ // The seek position should not be lost.
+ CheckExpectedBuffers(10, 10);
+
+ // Now set the duration immediately after buffer 10.
+ stream_->OnSetDuration(frame_duration() * 11);
+
+ // Seek position should be reset.
+ CheckNoNextBuffer();
+ CheckExpectedRanges("{ [0,4) [10,10) }");
+}
// TODO(vrk): Add unit tests where keyframes are unaligned between streams.
// (crbug.com/133557)
« no previous file with comments | « media/filters/source_buffer_stream.cc ('k') | webkit/media/webmediaplayer_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698