Bug 1453127 - Make sure decoder-captured tracks end when changing src. r=jya

This commit is contained in:
Andreas Pehrson
2018-05-29 10:13:14 +02:00
parent 6025bdab02
commit 8addfac774
2 changed files with 23 additions and 0 deletions

View File

@@ -1478,6 +1478,7 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(HTMLMediaElement,
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mErrorSink->mError)
for (uint32_t i = 0; i < tmp->mOutputStreams.Length(); ++i) {
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mOutputStreams[i].mStream)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mOutputStreams[i].mPreCreatedTracks)
}
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mPlayed);
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mTextTrackManager)
@@ -3556,6 +3557,7 @@ HTMLMediaElement::CaptureStreamInternal(StreamCaptureBehavior aFinishBehavior,
getter->GetMediaStreamTrackSource(audioTrackId);
RefPtr<MediaStreamTrack> track = out->mStream->CreateDOMTrack(
audioTrackId, MediaSegment::AUDIO, trackSource);
out->mPreCreatedTracks.AppendElement(track);
out->mStream->AddTrackInternal(track);
LOG(LogLevel::Debug,
("Created audio track %d for captured decoder", audioTrackId));
@@ -3566,6 +3568,7 @@ HTMLMediaElement::CaptureStreamInternal(StreamCaptureBehavior aFinishBehavior,
getter->GetMediaStreamTrackSource(videoTrackId);
RefPtr<MediaStreamTrack> track = out->mStream->CreateDOMTrack(
videoTrackId, MediaSegment::VIDEO, trackSource);
out->mPreCreatedTracks.AppendElement(track);
out->mStream->AddTrackInternal(track);
LOG(LogLevel::Debug,
("Created video track %d for captured decoder", videoTrackId));
@@ -7944,6 +7947,21 @@ HTMLMediaElement::RemoveMediaTracks()
}
mMediaTracksConstructed = false;
for (OutputMediaStream& ms : mOutputStreams) {
if (!ms.mCapturingDecoder) {
continue;
}
for (RefPtr<MediaStreamTrack>& t : ms.mPreCreatedTracks) {
if (t->Ended()) {
continue;
}
mAbstractMainThread->Dispatch(NewRunnableMethod(
"dom::HTMLMediaElement::RemoveMediaTracks",
t, &MediaStreamTrack::OverrideEnded));
}
ms.mPreCreatedTracks.Clear();
}
}
class MediaElementGMPCrashHelper : public GMPCrashHelper