Changeset 172007 in webkit
- Timestamp:
- Aug 4, 2014 2:58:13 PM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r172006 r172007 1 2014-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 1 13 2014-08-04 Joseph Pecoraro <pecoraro@apple.com> 2 14 -
trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp
r172000 r172007 318 318 const AtomicString& trackID = trackBufferPair.key; 319 319 320 trackBuffer.decodeQueue.clear();321 320 reenqueueMediaForTime(trackBuffer, trackID, time); 322 321 } … … 500 499 m_source->monitorSourceBuffers(); 501 500 501 MediaTime currentMediaTime = MediaTime::createWithDouble(m_source->currentTime()); 502 502 for (auto& trackBufferPair : m_trackBufferMap) { 503 503 TrackBuffer& trackBuffer = trackBufferPair.value; … … 505 505 506 506 if (trackBuffer.needsReenqueueing) { 507 LOG(MediaSource, "SourceBuffer::sourceBufferPrivateAppendComplete(%p) - reenqueuing ", this);508 reenqueueMediaFor CurrentTime(trackBuffer, trackID);507 LOG(MediaSource, "SourceBuffer::sourceBufferPrivateAppendComplete(%p) - reenqueuing at time (%s)", this, toString(currentMediaTime).utf8().data()); 508 reenqueueMediaForTime(trackBuffer, trackID, currentMediaTime); 509 509 } else 510 510 provideMediaData(trackBuffer, trackID); … … 1209 1209 trackBuffer.samples.addSample(sample); 1210 1210 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)); 1215 1213 1216 1214 // 1.18 Set last decode timestamp for track buffer to decode timestamp. … … 1365 1363 return; 1366 1364 1367 TrackBuffer& trackBuffer = it->value; 1368 if (!trackBuffer.needsReenqueueing) 1369 provideMediaData(trackBuffer, trackID); 1365 provideMediaData(it->value, trackID); 1370 1366 } 1371 1367 … … 1396 1392 } 1397 1393 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 are1407 // 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 1425 1394 void SourceBuffer::reenqueueMediaForTime(TrackBuffer& trackBuffer, AtomicString trackID, const MediaTime& time) 1426 1395 { … … 1452 1421 1453 1422 m_private->flushAndEnqueueNonDisplayingSamples(nonDisplayingSamples, trackID); 1454 if (!nonDisplayingSamples.isEmpty())1455 trackBuffer.lastEnqueuedPresentationTime = nonDisplayingSamples.last()->presentationTime();1456 1423 1457 1424 // Fill the decode queue with the remaining samples. -
trunk/Source/WebCore/Modules/mediasource/SourceBuffer.h
r171995 r172007 151 151 152 152 struct TrackBuffer; 153 void reenqueueMediaForCurrentTime(TrackBuffer&, AtomicString trackID);154 153 void reenqueueMediaForTime(TrackBuffer&, AtomicString trackID, const MediaTime&); 155 154 void provideMediaData(TrackBuffer&, AtomicString trackID);
Note: See TracChangeset
for help on using the changeset viewer.