Bug 1296531 - Don't notify of ended tracks when adding a direct listener. r?jesup
There were some cases where these tracks were detected as ended when they were
in fact not. That result in problems in the MediaRecorder.
MozReview-Commit-ID: 4CNUYRvzOgK
--- a/dom/media/MediaStreamGraph.cpp
+++ b/dom/media/MediaStreamGraph.cpp
@@ -2427,16 +2427,20 @@ MediaStream::AddTrackListenerImpl(alread
StreamTracks::Track* track = FindTrack(aTrackID);
if (!track) {
return;
}
PrincipalHandle lastPrincipalHandle =
track->GetSegment()->GetLastPrincipalHandle();
l->mListener->NotifyPrincipalHandleChanged(Graph(), lastPrincipalHandle);
+ if (track->IsEnded() &&
+ track->GetEnd() <= GraphTimeToStreamTime(GraphImpl()->mStateComputedTime)) {
+ l->mListener->NotifyEnded();
+ }
}
void
MediaStream::AddTrackListener(MediaStreamTrackListener* aListener,
TrackID aTrackID)
{
class Message : public ControlMessage {
public:
@@ -3030,31 +3034,23 @@ SourceMediaStream::AddDirectTrackListene
if (!isAudio && !isVideo) {
LOG(
LogLevel::Warning,
("Source track for direct track listener %p is unknown", listener.get()));
// It is not a video or audio track.
MOZ_ASSERT(false);
return;
}
- LOG(
- LogLevel::Debug,
- ("Added direct track listener %p. ended=%d", listener.get(), !updateData));
+ LOG(LogLevel::Debug, ("Added direct track listener %p", listener.get()));
listener->NotifyDirectListenerInstalled(
DirectMediaStreamTrackListener::InstallationResult::SUCCESS);
if (bufferedData.GetDuration() != 0) {
listener->NotifyRealtimeTrackData(Graph(), 0, bufferedData);
}
-
- if (!updateData) {
- // The track exists but the mUpdateTracks entry was removed.
- // This means that the track has ended.
- listener->NotifyEnded();
- }
}
void
SourceMediaStream::RemoveDirectTrackListenerImpl(DirectMediaStreamTrackListener* aListener,
TrackID aTrackID)
{
MutexAutoLock lock(mMutex);
for (int32_t i = mDirectTrackListeners.Length() - 1; i >= 0; --i) {