MediaStreamTrackPrivateVector MediaStreamPrivate::tracks() const { MediaStreamTrackPrivateVector tracks; tracks.reserveCapacity(m_trackSet.size()); copyValuesToVector(m_trackSet, tracks); return tracks; }
RefPtr<MediaStreamPrivate> MediaStreamPrivate::create(const Vector<RefPtr<RealtimeMediaSource>>& audioSources, const Vector<RefPtr<RealtimeMediaSource>>& videoSources) { MediaStreamTrackPrivateVector tracks; tracks.reserveCapacity(audioSources.size() + videoSources.size()); for (auto source : audioSources) tracks.append(MediaStreamTrackPrivate::create(WTFMove(source))); for (auto source : videoSources) tracks.append(MediaStreamTrackPrivate::create(WTFMove(source))); return MediaStreamPrivate::create(tracks); }
MediaStream::MediaStream(ScriptExecutionContext& context, const MediaStreamTrackVector& tracks) : ContextDestructionObserver(&context) , m_activityEventTimer(*this, &MediaStream::activityEventTimerFired) { // This constructor preserves MediaStreamTrack instances and must be used by calls originating // from the JavaScript MediaStream constructor. MediaStreamTrackPrivateVector trackPrivates; trackPrivates.reserveCapacity(tracks.size()); for (auto& track : tracks) { track->addObserver(this); m_trackSet.add(track->id(), track); trackPrivates.append(&track->privateTrack()); } m_private = MediaStreamPrivate::create(trackPrivates); setIsActive(m_private->active()); m_private->addObserver(*this); MediaStreamRegistry::shared().registerStream(*this); }