void StreamBuffer::ForgetUpTo(StreamTime aTime) { // Round to nearest 50ms so we don't spend too much time pruning segments. const int roundTo = MillisecondsToMediaTime(50); StreamTime forget = (aTime/roundTo)*roundTo; if (forget <= mForgottenTime) { return; } mForgottenTime = forget; for (PRUint32 i = 0; i < mTracks.Length(); ++i) { Track* track = mTracks[i]; if (track->IsEnded() && track->GetEndTimeRoundDown() <= forget) { mTracks.RemoveElementAt(i); --i; continue; } TrackTicks forgetTo = NS_MIN(track->GetEnd() - 1, track->TimeToTicksRoundDown(forget)); track->ForgetUpTo(forgetTo); } }
void StreamBuffer::ForgetUpTo(StreamTime aTime) { // Only prune if there is a reasonable chunk (50ms @ 48kHz) to forget, so we // don't spend too much time pruning segments. const StreamTime minChunkSize = 2400; if (aTime < mForgottenTime + minChunkSize) { return; } mForgottenTime = aTime; for (uint32_t i = 0; i < mTracks.Length(); ++i) { Track* track = mTracks[i]; if (track->IsEnded() && track->GetEnd() <= aTime) { mTracks.RemoveElementAt(i); --i; continue; } StreamTime forgetTo = std::min(track->GetEnd() - 1, aTime); track->ForgetUpTo(forgetTo); } }