SampleMap::iterator SampleMap::findSyncSampleAfterPresentationTime(const MediaTime& time, const MediaTime& threshold) { iterator currentSamplePTS = findSampleAfterPresentationTime(time); if (currentSamplePTS == presentationEnd()) return decodeEnd(); iterator currentSampleDTS = findSampleWithDecodeTime(currentSamplePTS->second->decodeTime()); MediaTime upperBound = time + threshold; iterator foundSample = std::find_if(currentSampleDTS, decodeEnd(), SampleIsRandomAccess()); if (foundSample == decodeEnd()) return decodeEnd(); if (foundSample->second->presentationTime() > upperBound) return decodeEnd(); return foundSample; }
DecodeOrderSampleMap::iterator DecodeOrderSampleMap::findSyncSampleAfterPresentationTime(const MediaTime& time, const MediaTime& threshold) { PresentationOrderSampleMap::iterator currentSamplePTS = m_presentationOrder.findSampleOnOrAfterPresentationTime(time); if (currentSamplePTS == m_presentationOrder.end()) return end(); const RefPtr<MediaSample>& sample = currentSamplePTS->second; iterator currentSampleDTS = findSampleWithDecodeKey(KeyType(sample->decodeTime(), sample->presentationTime())); MediaTime upperBound = time + threshold; iterator foundSample = std::find_if(currentSampleDTS, end(), SampleIsRandomAccess()); if (foundSample == end()) return end(); if (foundSample->second->presentationTime() > upperBound) return end(); return foundSample; }
DecodeOrderSampleMap::iterator DecodeOrderSampleMap::findSyncSampleAfterDecodeIterator(iterator currentSampleDTS) { if (currentSampleDTS == end()) return end(); return std::find_if(++currentSampleDTS, end(), SampleIsRandomAccess()); }
DecodeOrderSampleMap::reverse_iterator DecodeOrderSampleMap::findSyncSamplePriorToDecodeIterator(reverse_iterator iterator) { return std::find_if(iterator, rend(), SampleIsRandomAccess()); }
SampleMap::iterator SampleMap::findSyncSampleAfterDecodeIterator(iterator currentSampleDTS) { return std::find_if(currentSampleDTS, decodeEnd(), SampleIsRandomAccess()); }