Title: [172007] trunk/Source/WebCore
Revision
172007
Author
[email protected]
Date
2014-08-04 14:58:13 -0700 (Mon, 04 Aug 2014)

Log Message

Unreviewed, rolling out r171992, r171995, & r172000.

The cumulative effect of those revisions was to cause decoding errors when switching resolutions on YouTube.

Reverted changesets:

https://bugs.webkit.org/show_bug.cgi?id=135422 / http://trac.webkit.org/changeset/171992
https://bugs.webkit.org/show_bug.cgi?id=135424 / http://trac.webkit.org/changeset/171995
https://bugs.webkit.org/show_bug.cgi?id=135572 / http://trac.webkit.org/changeset/172000

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (172006 => 172007)


--- trunk/Source/WebCore/ChangeLog	2014-08-04 21:57:27 UTC (rev 172006)
+++ trunk/Source/WebCore/ChangeLog	2014-08-04 21:58:13 UTC (rev 172007)
@@ -1,3 +1,15 @@
+2014-08-04  Jer Noble  <[email protected]>
+
+        Unreviewed, rolling out r171992, r171995, & r172000.
+
+        The cumulative effect of those revisions was to cause decoding errors when switching resolutions on YouTube.
+
+        Reverted changesets:
+
+        https://bugs.webkit.org/show_bug.cgi?id=135422 / http://trac.webkit.org/changeset/171992
+        https://bugs.webkit.org/show_bug.cgi?id=135424 / http://trac.webkit.org/changeset/171995
+        https://bugs.webkit.org/show_bug.cgi?id=135572 / http://trac.webkit.org/changeset/172000
+
 2014-08-04  Joseph Pecoraro  <[email protected]>
 
         Always clear ConsoleClient when Page/WindowShell is destroyed

Modified: trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp (172006 => 172007)


--- trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp	2014-08-04 21:57:27 UTC (rev 172006)
+++ trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp	2014-08-04 21:58:13 UTC (rev 172007)
@@ -317,7 +317,6 @@
         TrackBuffer& trackBuffer = trackBufferPair.value;
         const AtomicString& trackID = trackBufferPair.key;
 
-        trackBuffer.decodeQueue.clear();
         reenqueueMediaForTime(trackBuffer, trackID, time);
     }
 }
@@ -499,13 +498,14 @@
     if (m_source)
         m_source->monitorSourceBuffers();
 
+    MediaTime currentMediaTime = MediaTime::createWithDouble(m_source->currentTime());
     for (auto& trackBufferPair : m_trackBufferMap) {
         TrackBuffer& trackBuffer = trackBufferPair.value;
         const AtomicString& trackID = trackBufferPair.key;
 
         if (trackBuffer.needsReenqueueing) {
-            LOG(MediaSource, "SourceBuffer::sourceBufferPrivateAppendComplete(%p) - reenqueuing", this);
-            reenqueueMediaForCurrentTime(trackBuffer, trackID);
+            LOG(MediaSource, "SourceBuffer::sourceBufferPrivateAppendComplete(%p) - reenqueuing at time (%s)", this, toString(currentMediaTime).utf8().data());
+            reenqueueMediaForTime(trackBuffer, trackID, currentMediaTime);
         } else
             provideMediaData(trackBuffer, trackID);
     }
@@ -1208,10 +1208,8 @@
         // Add the coded frame with the presentation timestamp, decode timestamp, and frame duration to the track buffer.
         trackBuffer.samples.addSample(sample);
 
-        if (frameEndTimestamp > MediaTime::createWithDouble(m_source->currentTime())) {
-            DecodeOrderSampleMap::KeyType decodeKey(decodeTimestamp, presentationTimestamp);
-            trackBuffer.decodeQueue.insert(DecodeOrderSampleMap::MapType::value_type(decodeKey, sample));
-        }
+        DecodeOrderSampleMap::KeyType decodeKey(decodeTimestamp, presentationTimestamp);
+        trackBuffer.decodeQueue.insert(DecodeOrderSampleMap::MapType::value_type(decodeKey, sample));
 
         // 1.18 Set last decode timestamp for track buffer to decode timestamp.
         trackBuffer.lastDecodeTimestamp = decodeTimestamp;
@@ -1364,9 +1362,7 @@
     if (it == m_trackBufferMap.end())
         return;
 
-    TrackBuffer& trackBuffer = it->value;
-    if (!trackBuffer.needsReenqueueing)
-        provideMediaData(trackBuffer, trackID);
+    provideMediaData(it->value, trackID);
 }
 
 void SourceBuffer::provideMediaData(TrackBuffer& trackBuffer, AtomicString trackID)
@@ -1395,33 +1391,6 @@
     LOG(MediaSource, "SourceBuffer::provideMediaData(%p) - Enqueued %u samples", this, enqueuedSamples);
 }
 
-void SourceBuffer::reenqueueMediaForCurrentTime(TrackBuffer& trackBuffer, AtomicString trackID)
-{
-    if (!trackBuffer.decodeQueue.empty()) {
-        // If the decodeQueue is not empty, attempt to find the next sync sample after the last enqueued presentation time.
-        auto nextSyncSampleIter = trackBuffer.samples.decodeOrder().findSyncSampleAfterPresentationTime(trackBuffer.lastEnqueuedPresentationTime);
-
-        auto decodeEnd = trackBuffer.samples.decodeOrder().end();
-        if (nextSyncSampleIter != decodeEnd) {
-            // If a sync sample is found, remove all existing samples from the decode queue whose decodeTimestamps are
-            // greater-than-or-equal-to the sync sample's decodeTimestamp.
-            auto firstEnqueuedSampleToRemoveIter = trackBuffer.decodeQueue.lower_bound(nextSyncSampleIter->first);
-            trackBuffer.decodeQueue.erase(firstEnqueuedSampleToRemoveIter, trackBuffer.decodeQueue.end());
-
-            // Add the replacement samples, starting from the sync sample, to the decode queue.
-            for (auto iter = nextSyncSampleIter; iter != decodeEnd; ++iter)
-                trackBuffer.decodeQueue.insert(*iter);
-            trackBuffer.needsReenqueueing = false;
-
-            // And provide those replacement samples to the decoder.
-            provideMediaData(trackBuffer, trackID);
-            return;
-        }
-    }
-
-    reenqueueMediaForTime(trackBuffer, trackID, MediaTime::createWithDouble(m_source->currentTime()));
-}
-
 void SourceBuffer::reenqueueMediaForTime(TrackBuffer& trackBuffer, AtomicString trackID, const MediaTime& time)
 {
     // Find the sample which contains the current presentation time.
@@ -1451,8 +1420,6 @@
         nonDisplayingSamples.append(iter->second);
 
     m_private->flushAndEnqueueNonDisplayingSamples(nonDisplayingSamples, trackID);
-    if (!nonDisplayingSamples.isEmpty())
-        trackBuffer.lastEnqueuedPresentationTime = nonDisplayingSamples.last()->presentationTime();
 
     // Fill the decode queue with the remaining samples.
     trackBuffer.decodeQueue.clear();

Modified: trunk/Source/WebCore/Modules/mediasource/SourceBuffer.h (172006 => 172007)


--- trunk/Source/WebCore/Modules/mediasource/SourceBuffer.h	2014-08-04 21:57:27 UTC (rev 172006)
+++ trunk/Source/WebCore/Modules/mediasource/SourceBuffer.h	2014-08-04 21:58:13 UTC (rev 172007)
@@ -150,7 +150,6 @@
     bool validateInitializationSegment(const InitializationSegment&);
 
     struct TrackBuffer;
-    void reenqueueMediaForCurrentTime(TrackBuffer&, AtomicString trackID);
     void reenqueueMediaForTime(TrackBuffer&, AtomicString trackID, const MediaTime&);
     void provideMediaData(TrackBuffer&, AtomicString trackID);
     void didDropSample();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to