Bug 1453127 - Make sure decoder-captured tracks end when changing src. r=jya
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user