Bug 1401147 - part1 : empty track buffer content upon detach.
After detached the source buffer, we would reset all its resource and shutdown
demuxer.
MozReview-Commit-ID: 7xEJ7q00aeF
--- a/dom/media/mediasource/TrackBuffersManager.cpp
+++ b/dom/media/mediasource/TrackBuffersManager.cpp
@@ -206,16 +206,19 @@ TrackBuffersManager::ProcessTasks()
case Type::Reset:
CompleteResetParserState();
break;
case Type::Detach:
mCurrentInputBuffer = nullptr;
mTaskQueue = nullptr;
MOZ_DIAGNOSTIC_ASSERT(mQueue.Length() == 0,
"Detach task must be the last");
+ mVideoTracks.Reset();
+ mAudioTracks.Reset();
+ ShutdownDemuxers();
return;
default:
NS_WARNING("Invalid Task");
}
GetTaskQueue()->Dispatch(
NewRunnableMethod("TrackBuffersManager::ProcessTasks",
this,
&TrackBuffersManager::ProcessTasks));
--- a/dom/media/mediasource/TrackBuffersManager.h
+++ b/dom/media/mediasource/TrackBuffersManager.h
@@ -371,18 +371,30 @@ private:
EvictionIndex mEvictionIndex;
void ResetAppendState()
{
mLastDecodeTimestamp.reset();
mLastFrameDuration.reset();
mHighestEndTimestamp.reset();
mNeedRandomAccessPoint = true;
+ mNextInsertionIndex.reset();
+ }
- mNextInsertionIndex.reset();
+ void Reset()
+ {
+ ResetAppendState();
+ mEvictionIndex.Reset();
+ for (auto& buffer : mBuffers) {
+ buffer.Clear();
+ }
+ mSizeBuffer = 0;
+ mNextGetSampleIndex.reset();
+ mBufferedRanges.Clear();
+ mSanitizedBufferedRanges.Clear();
}
void AddSizeOfResources(MediaSourceDecoder::ResourceSizes* aSizes) const;
};
void CheckSequenceDiscontinuity(const media::TimeUnit& aPresentationTime);
void ProcessFrames(TrackBuffer& aSamples, TrackData& aTrackData);
media::TimeInterval PresentationInterval(const TrackBuffer& aSamples) const;