MediaStreamTrackPrivate::MediaStreamTrackPrivate(const MediaStreamTrackPrivate& other) : RefCounted() , m_source(other.source()) , m_id(createCanonicalUUIDString()) , m_isEnabled(other.enabled()) , m_isEnded(other.ended()) { m_source->addObserver(this); }
void MediaStreamPrivate::removeTrack(MediaStreamTrackPrivate& track, NotifyClientOption notifyClientOption) { if (!m_trackSet.remove(track.id())) return; track.removeObserver(*this); if (notifyClientOption == NotifyClientOption::Notify) { for (auto& observer : m_observers) observer->didRemoveTrack(track); } updateActiveState(NotifyClientOption::Notify); }
void MediaStreamWebRTCObserver::findAndRemoveTrack(Vector<RefPtr<MediaStreamTrackWebRTCObserver>>& observers) { for (unsigned i = 0; i < observers.size(); i++) { const std::string id = observers[i]->webRTCTrack()->id(); MediaStreamTrackPrivate* track = observers[i]->track(); if (track->type() == MediaStreamSource::Audio && m_stream->FindAudioTrack(id)) continue; if (track->type() == MediaStreamSource::Video && m_stream->FindVideoTrack(id)) continue; observers.remove(i); m_descriptor->removeRemoteTrack(track); return; } }
void MediaStream::didAddTrack(MediaStreamTrackPrivate& trackPrivate) { ScriptExecutionContext* context = scriptExecutionContext(); if (!context) return; if (!getTrackById(trackPrivate.id())) internalAddTrack(MediaStreamTrack::create(*context, trackPrivate), StreamModifier::Platform); }
void MediaStream::didRemoveTrack(MediaStreamTrackPrivate& trackPrivate) { RefPtr<MediaStreamTrack> track = getTrackById(trackPrivate.id()); ASSERT(track); internalRemoveTrack(WTF::move(track), StreamModifier::Platform); }