Changeset 172007 in webkit


Ignore:
Timestamp:
Aug 4, 2014 2:58:13 PM (10 years ago)
Author:
jer.noble@apple.com
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

Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r172006 r172007  
     12014-08-04  Jer Noble  <jer.noble@apple.com>
     2
     3        Unreviewed, rolling out r171992, r171995, & r172000.
     4
     5        The cumulative effect of those revisions was to cause decoding errors when switching resolutions on YouTube.
     6
     7        Reverted changesets:
     8
     9        https://bugs.webkit.org/show_bug.cgi?id=135422 / http://trac.webkit.org/changeset/171992
     10        https://bugs.webkit.org/show_bug.cgi?id=135424 / http://trac.webkit.org/changeset/171995
     11        https://bugs.webkit.org/show_bug.cgi?id=135572 / http://trac.webkit.org/changeset/172000
     12
    1132014-08-04  Joseph Pecoraro  <pecoraro@apple.com>
    214
  • trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp

    r172000 r172007  
    318318        const AtomicString& trackID = trackBufferPair.key;
    319319
    320         trackBuffer.decodeQueue.clear();
    321320        reenqueueMediaForTime(trackBuffer, trackID, time);
    322321    }
     
    500499        m_source->monitorSourceBuffers();
    501500
     501    MediaTime currentMediaTime = MediaTime::createWithDouble(m_source->currentTime());
    502502    for (auto& trackBufferPair : m_trackBufferMap) {
    503503        TrackBuffer& trackBuffer = trackBufferPair.value;
     
    505505
    506506        if (trackBuffer.needsReenqueueing) {
    507             LOG(MediaSource, "SourceBuffer::sourceBufferPrivateAppendComplete(%p) - reenqueuing", this);
    508             reenqueueMediaForCurrentTime(trackBuffer, trackID);
     507            LOG(MediaSource, "SourceBuffer::sourceBufferPrivateAppendComplete(%p) - reenqueuing at time (%s)", this, toString(currentMediaTime).utf8().data());
     508            reenqueueMediaForTime(trackBuffer, trackID, currentMediaTime);
    509509        } else
    510510            provideMediaData(trackBuffer, trackID);
     
    12091209        trackBuffer.samples.addSample(sample);
    12101210
    1211         if (frameEndTimestamp > MediaTime::createWithDouble(m_source->currentTime())) {
    1212             DecodeOrderSampleMap::KeyType decodeKey(decodeTimestamp, presentationTimestamp);
    1213             trackBuffer.decodeQueue.insert(DecodeOrderSampleMap::MapType::value_type(decodeKey, sample));
    1214         }
     1211        DecodeOrderSampleMap::KeyType decodeKey(decodeTimestamp, presentationTimestamp);
     1212        trackBuffer.decodeQueue.insert(DecodeOrderSampleMap::MapType::value_type(decodeKey, sample));
    12151213
    12161214        // 1.18 Set last decode timestamp for track buffer to decode timestamp.
     
    13651363        return;
    13661364
    1367     TrackBuffer& trackBuffer = it->value;
    1368     if (!trackBuffer.needsReenqueueing)
    1369         provideMediaData(trackBuffer, trackID);
     1365    provideMediaData(it->value, trackID);
    13701366}
    13711367
     
    13961392}
    13971393
    1398 void SourceBuffer::reenqueueMediaForCurrentTime(TrackBuffer& trackBuffer, AtomicString trackID)
    1399 {
    1400     if (!trackBuffer.decodeQueue.empty()) {
    1401         // If the decodeQueue is not empty, attempt to find the next sync sample after the last enqueued presentation time.
    1402         auto nextSyncSampleIter = trackBuffer.samples.decodeOrder().findSyncSampleAfterPresentationTime(trackBuffer.lastEnqueuedPresentationTime);
    1403 
    1404         auto decodeEnd = trackBuffer.samples.decodeOrder().end();
    1405         if (nextSyncSampleIter != decodeEnd) {
    1406             // If a sync sample is found, remove all existing samples from the decode queue whose decodeTimestamps are
    1407             // greater-than-or-equal-to the sync sample's decodeTimestamp.
    1408             auto firstEnqueuedSampleToRemoveIter = trackBuffer.decodeQueue.lower_bound(nextSyncSampleIter->first);
    1409             trackBuffer.decodeQueue.erase(firstEnqueuedSampleToRemoveIter, trackBuffer.decodeQueue.end());
    1410 
    1411             // Add the replacement samples, starting from the sync sample, to the decode queue.
    1412             for (auto iter = nextSyncSampleIter; iter != decodeEnd; ++iter)
    1413                 trackBuffer.decodeQueue.insert(*iter);
    1414             trackBuffer.needsReenqueueing = false;
    1415 
    1416             // And provide those replacement samples to the decoder.
    1417             provideMediaData(trackBuffer, trackID);
    1418             return;
    1419         }
    1420     }
    1421 
    1422     reenqueueMediaForTime(trackBuffer, trackID, MediaTime::createWithDouble(m_source->currentTime()));
    1423 }
    1424 
    14251394void SourceBuffer::reenqueueMediaForTime(TrackBuffer& trackBuffer, AtomicString trackID, const MediaTime& time)
    14261395{
     
    14521421
    14531422    m_private->flushAndEnqueueNonDisplayingSamples(nonDisplayingSamples, trackID);
    1454     if (!nonDisplayingSamples.isEmpty())
    1455         trackBuffer.lastEnqueuedPresentationTime = nonDisplayingSamples.last()->presentationTime();
    14561423
    14571424    // Fill the decode queue with the remaining samples.
  • trunk/Source/WebCore/Modules/mediasource/SourceBuffer.h

    r171995 r172007  
    151151
    152152    struct TrackBuffer;
    153     void reenqueueMediaForCurrentTime(TrackBuffer&, AtomicString trackID);
    154153    void reenqueueMediaForTime(TrackBuffer&, AtomicString trackID, const MediaTime&);
    155154    void provideMediaData(TrackBuffer&, AtomicString trackID);
Note: See TracChangeset for help on using the changeset viewer.