void TrackUnionStream::EndTrack(uint32_t aIndex) { StreamTracks::Track* outputTrack = mTracks.FindTrack(mTrackMap[aIndex].mOutputTrackID); if (!outputTrack || outputTrack->IsEnded()) return; STREAM_LOG(LogLevel::Debug, ("TrackUnionStream %p ending track %d", this, outputTrack->GetID())); outputTrack->SetEnded(); }
void AudioNodeStream::FinishOutput() { StreamTracks::Track* track = EnsureTrack(AUDIO_TRACK); track->SetEnded(); for (uint32_t j = 0; j < mListeners.Length(); ++j) { MediaStreamListener* l = mListeners[j]; AudioSegment emptySegment; l->NotifyQueuedTrackChanges(Graph(), AUDIO_TRACK, track->GetSegment()->GetDuration(), TrackEventCommand::TRACK_EVENT_ENDED, emptySegment); } }
void TrackUnionStream::EndTrack(uint32_t aIndex) { StreamTracks::Track* outputTrack = mTracks.FindTrack(mTrackMap[aIndex].mOutputTrackID); if (!outputTrack || outputTrack->IsEnded()) return; STREAM_LOG(LogLevel::Debug, ("TrackUnionStream %p ending track %d", this, outputTrack->GetID())); for (uint32_t j = 0; j < mListeners.Length(); ++j) { MediaStreamListener* l = mListeners[j]; StreamTime offset = outputTrack->GetSegment()->GetDuration(); nsAutoPtr<MediaSegment> segment; segment = outputTrack->GetSegment()->CreateEmptyClone(); l->NotifyQueuedTrackChanges(Graph(), outputTrack->GetID(), offset, TrackEventCommand::TRACK_EVENT_ENDED, *segment, mTrackMap[aIndex].mInputPort->GetSource(), mTrackMap[aIndex].mInputTrackID); } for (TrackBound<MediaStreamTrackListener>& b : mTrackListeners) { if (b.mTrackID == outputTrack->GetID()) { b.mListener->NotifyEnded(); } } outputTrack->SetEnded(); }