Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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);
}