Bug 1258410: [MSE] P2. Disconnect init promise if any pending. r=gerald
MozReview-Commit-ID: 9iOPqSeDzdH
--- a/dom/media/mediasource/TrackBuffersManager.cpp
+++ b/dom/media/mediasource/TrackBuffersManager.cpp
@@ -297,16 +297,23 @@ TrackBuffersManager::Detach()
}
void
TrackBuffersManager::CompleteResetParserState()
{
MOZ_ASSERT(OnTaskQueue());
MSE_DEBUG("");
+ // We shouldn't change mInputDemuxer while a demuxer init/reset request is
+ // being processed. See bug 1239983.
+ NS_ASSERTION(!mDemuxerInitRequest.Exists(), "Previous AppendBuffer didn't complete");
+ if (mDemuxerInitRequest.Exists()) {
+ mDemuxerInitRequest.Disconnect();
+ }
+
for (auto& track : GetTracksList()) {
// 2. Unset the last decode timestamp on all track buffers.
// 3. Unset the last frame duration on all track buffers.
// 4. Unset the highest end timestamp on all track buffers.
// 5. Set the need random access point flag on all track buffers to true.
track->ResetAppendState();
// if we have been aborted, we may have pending frames that we are going
@@ -863,17 +870,17 @@ void
TrackBuffersManager::OnDemuxerInitDone(nsresult)
{
MOZ_ASSERT(OnTaskQueue());
mDemuxerInitRequest.Complete();
if (!mInputDemuxer) {
// mInputDemuxer shouldn't have been destroyed while a demuxer init/reset
// request was being processed. See bug 1239983.
- NS_WARNING("mInputDemuxer has been destroyed");
+ NS_ASSERTION(false, "mInputDemuxer has been destroyed");
RejectAppend(NS_ERROR_ABORT, __func__);
}
MediaInfo info;
uint32_t numVideos = mInputDemuxer->GetNumberTracks(TrackInfo::kVideoTrack);
if (numVideos) {
// We currently only handle the first video track.