Log Message
[MSE] Overwritten samples are removed from buffered ranges using decode times; added samples using presentation times https://bugs.webkit.org/show_bug.cgi?id=133959
Reviewed by Eric Carlson. Source/WebCore: Test: media/media-source/media-source-overlapping-append-buffered.html Explicitly call presentationTime() on removed samples, rather than implicitly asking for the iterator's "first" member. When iterating over samples, "first" can either be presentation time, or decode time, depending on which iteration method is called. In the case of removing samples, this was using the decode time incorrectly. * Modules/mediasource/SourceBuffer.cpp: (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): LayoutTests: * media/media-source/media-source-overlapping-append-buffered-expected.txt: Added. * media/media-source/media-source-overlapping-append-buffered.html: Added.
Modified Paths
- trunk/LayoutTests/ChangeLog
- trunk/Source/WebCore/ChangeLog
- trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (170048 => 170049)
--- trunk/LayoutTests/ChangeLog 2014-06-17 07:42:32 UTC (rev 170048)
+++ trunk/LayoutTests/ChangeLog 2014-06-17 07:43:53 UTC (rev 170049)
@@ -1,3 +1,13 @@
+2014-06-17 Jer Noble <[email protected]>
+
+ [MSE] Overwritten samples are removed from buffered ranges using decode times; added samples using presentation times
+ https://bugs.webkit.org/show_bug.cgi?id=133959
+
+ Reviewed by Eric Carlson.
+
+ * media/media-source/media-source-overlapping-append-buffered-expected.txt: Added.
+ * media/media-source/media-source-overlapping-append-buffered.html: Added.
+
2014-06-16 Mihnea Ovidenie <[email protected]>
[CSS Regions] Move the overflow tests to a separate folder
Added: trunk/LayoutTests/media/media-source/media-source-overlapping-append-buffered-expected.txt (0 => 170049)
--- trunk/LayoutTests/media/media-source/media-source-overlapping-append-buffered-expected.txt (rev 0)
+++ trunk/LayoutTests/media/media-source/media-source-overlapping-append-buffered-expected.txt 2014-06-17 07:43:53 UTC (rev 170049)
@@ -0,0 +1,15 @@
+
+EXPECTED (source.readyState == 'closed') OK
+EVENT(sourceopen)
+RUN(sourceBuffer = source.addSourceBuffer("video/mock; codecs=mock"))
+RUN(sourceBuffer.appendBuffer(initSegment))
+EVENT(updateend)
+RUN(sourceBuffer.appendBuffer(samples))
+EVENT(updateend)
+RUN(sourceBuffer.appendBuffer(samples))
+EVENT(updateend)
+EXPECTED (video.buffered.length == '1') OK
+EXPECTED (video.buffered.start(0).toFixed(3) == '1') OK
+EXPECTED (video.buffered.end(0).toFixed(3) == '7') OK
+END OF TEST
+
Added: trunk/LayoutTests/media/media-source/media-source-overlapping-append-buffered.html (0 => 170049)
--- trunk/LayoutTests/media/media-source/media-source-overlapping-append-buffered.html (rev 0)
+++ trunk/LayoutTests/media/media-source/media-source-overlapping-append-buffered.html 2014-06-17 07:43:53 UTC (rev 170049)
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>mock-media-source</title>
+ <script src=""
+ <script src=""
+ <script>
+ var source;
+ var sourceBuffer;
+ var initSegment;
+ var samples;
+
+ if (window.internals)
+ internals.initializeMockMediaSource();
+
+ function runTest() {
+ findMediaElement();
+
+ source = new MediaSource();
+ testExpected('source.readyState', 'closed');
+
+ waitForEventOn(source, 'sourceopen', sourceOpen);
+ var videoSource = document.createElement('source');
+ videoSource.type = 'video/mock; codecs=mock';
+ videoSource.src = ""
+ video.appendChild(videoSource);
+ }
+
+ function sourceOpen() {
+ run('sourceBuffer = source.addSourceBuffer("video/mock; codecs=mock")');
+ waitForEventOn(sourceBuffer, 'updateend', loadSamples, false, true);
+ initSegment = makeAInit(8, [makeATrack(1, 'mock', TRACK_KIND.VIDEO)]);
+ run('sourceBuffer.appendBuffer(initSegment)');
+ }
+
+ function loadSamples() {
+ samples = concatenateSamples([
+ makeASample(1, 0, 1, 1, SAMPLE_FLAG.SYNC),
+ makeASample(2, 1, 1, 1, SAMPLE_FLAG.NONE),
+ makeASample(3, 2, 1, 1, SAMPLE_FLAG.NONE),
+ makeASample(4, 3, 1, 1, SAMPLE_FLAG.SYNC),
+ makeASample(6, 4, 1, 1, SAMPLE_FLAG.NONE),
+ makeASample(5, 5, 1, 1, SAMPLE_FLAG.NONE),
+ ]);
+ waitForEventOn(sourceBuffer, 'updateend', loadMoreSamples, false, true);
+ run('sourceBuffer.appendBuffer(samples)');
+ }
+
+ function loadMoreSamples() {
+ samples = concatenateSamples([
+ makeASample(1, 0, 1, 1, SAMPLE_FLAG.SYNC),
+ makeASample(2, 1, 1, 1, SAMPLE_FLAG.NONE),
+ makeASample(3, 2, 1, 1, SAMPLE_FLAG.NONE),
+ makeASample(4, 3, 1, 1, SAMPLE_FLAG.SYNC),
+ makeASample(6, 4, 1, 1, SAMPLE_FLAG.NONE),
+ makeASample(5, 5, 1, 1, SAMPLE_FLAG.NONE),
+ ]);
+ waitForEventOn(sourceBuffer, 'updateend', loadComplete, false, true);
+ run('sourceBuffer.appendBuffer(samples)');
+ }
+
+ function loadComplete() {
+ testExpected('video.buffered.length', 1);
+ testExpected('video.buffered.start(0).toFixed(3)', 1);
+ testExpected('video.buffered.end(0).toFixed(3)', 7);
+ endTest();
+ }
+
+ </script>
+</head>
+<body _onload_="runTest()">
+ <video></video>
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (170048 => 170049)
--- trunk/Source/WebCore/ChangeLog 2014-06-17 07:42:32 UTC (rev 170048)
+++ trunk/Source/WebCore/ChangeLog 2014-06-17 07:43:53 UTC (rev 170049)
@@ -1,3 +1,19 @@
+2014-06-17 Jer Noble <[email protected]>
+
+ [MSE] Overwritten samples are removed from buffered ranges using decode times; added samples using presentation times
+ https://bugs.webkit.org/show_bug.cgi?id=133959
+
+ Reviewed by Eric Carlson.
+
+ Test: media/media-source/media-source-overlapping-append-buffered.html
+
+ Explicitly call presentationTime() on removed samples, rather than implicitly asking for the iterator's "first"
+ member. When iterating over samples, "first" can either be presentation time, or decode time, depending on which
+ iteration method is called. In the case of removing samples, this was using the decode time incorrectly.
+
+ * Modules/mediasource/SourceBuffer.cpp:
+ (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
+
2014-06-16 Mihnea Ovidenie <[email protected]>
[CSSRegions] Region with border radius and overflow:hidden does not clip content
Modified: trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp (170048 => 170049)
--- trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp 2014-06-17 07:42:32 UTC (rev 170048)
+++ trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp 2014-06-17 07:43:53 UTC (rev 170049)
@@ -1158,16 +1158,16 @@
RefPtr<TimeRanges> erasedRanges = TimeRanges::create();
for (auto erasedIt = erasedSamples.begin(), end = erasedSamples.end(); erasedIt != end; ++erasedIt) {
- double startTime = erasedIt->first.toDouble();
- double endTime = ((erasedIt->first + erasedIt->second->duration()) + microsecond).toDouble();
- erasedRanges->add(startTime, endTime);
+ MediaTime startTime = erasedIt->second->presentationTime();
+ MediaTime endTime = startTime + erasedIt->second->duration() + microsecond;
+ erasedRanges->add(startTime.toDouble(), endTime.toDouble());
trackBuffer.samples.removeSample(erasedIt->second.get());
}
for (auto dependentIt = dependentSamples.begin(), end = dependentSamples.end(); dependentIt != end; ++dependentIt) {
- double startTime = dependentIt->first.toDouble();
- double endTime = ((dependentIt->first + dependentIt->second->duration()) + microsecond).toDouble();
- erasedRanges->add(startTime, endTime);
+ MediaTime startTime = dependentIt->second->presentationTime();
+ MediaTime endTime = startTime + dependentIt->second->duration() + microsecond;
+ erasedRanges->add(startTime.toDouble(), endTime.toDouble());
trackBuffer.samples.removeSample(dependentIt->second.get());
}
_______________________________________________ webkit-changes mailing list [email protected] https://lists.webkit.org/mailman/listinfo/webkit-changes
