Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2011)

Unified Diff: Source/modules/mediastream/MediaStream.cpp

Issue 650063002: Move MediaStream and MediaStreamTrack implementation from modules/mediastream to core/mediastream. Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebased. Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/modules/mediastream/MediaStream.h ('k') | Source/modules/mediastream/MediaStream.idl » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/modules/mediastream/MediaStream.cpp
diff --git a/Source/modules/mediastream/MediaStream.cpp b/Source/modules/mediastream/MediaStream.cpp
deleted file mode 100644
index 51399e64df32275cf2e62f71c58d7d68998ccc31..0000000000000000000000000000000000000000
--- a/Source/modules/mediastream/MediaStream.cpp
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- * Copyright (C) 2011, 2012 Ericsson AB. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "modules/mediastream/MediaStream.h"
-
-#include "bindings/core/v8/ExceptionState.h"
-#include "core/dom/ExceptionCode.h"
-#include "modules/mediastream/MediaStreamRegistry.h"
-#include "modules/mediastream/MediaStreamTrackEvent.h"
-#include "platform/mediastream/MediaStreamCenter.h"
-#include "platform/mediastream/MediaStreamSource.h"
-
-namespace blink {
-
-static bool containsSource(MediaStreamTrackVector& trackVector, MediaStreamSource* source)
-{
- for (size_t i = 0; i < trackVector.size(); ++i) {
- if (source->id() == trackVector[i]->component()->source()->id())
- return true;
- }
- return false;
-}
-
-static void processTrack(MediaStreamTrack* track, MediaStreamTrackVector& trackVector)
-{
- if (track->ended())
- return;
-
- MediaStreamSource* source = track->component()->source();
- if (!containsSource(trackVector, source))
- trackVector.append(track);
-}
-
-MediaStream* MediaStream::create(ExecutionContext* context)
-{
- MediaStreamTrackVector audioTracks;
- MediaStreamTrackVector videoTracks;
-
- return new MediaStream(context, audioTracks, videoTracks);
-}
-
-MediaStream* MediaStream::create(ExecutionContext* context, MediaStream* stream)
-{
- ASSERT(stream);
-
- MediaStreamTrackVector audioTracks;
- MediaStreamTrackVector videoTracks;
-
- for (size_t i = 0; i < stream->m_audioTracks.size(); ++i)
- processTrack(stream->m_audioTracks[i].get(), audioTracks);
-
- for (size_t i = 0; i < stream->m_videoTracks.size(); ++i)
- processTrack(stream->m_videoTracks[i].get(), videoTracks);
-
- return new MediaStream(context, audioTracks, videoTracks);
-}
-
-MediaStream* MediaStream::create(ExecutionContext* context, const MediaStreamTrackVector& tracks)
-{
- MediaStreamTrackVector audioTracks;
- MediaStreamTrackVector videoTracks;
-
- for (size_t i = 0; i < tracks.size(); ++i)
- processTrack(tracks[i].get(), tracks[i]->kind() == "audio" ? audioTracks : videoTracks);
-
- return new MediaStream(context, audioTracks, videoTracks);
-}
-
-MediaStream* MediaStream::create(ExecutionContext* context, MediaStreamDescriptor* streamDescriptor)
-{
- return new MediaStream(context, streamDescriptor);
-}
-
-MediaStream::MediaStream(ExecutionContext* context, MediaStreamDescriptor* streamDescriptor)
- : ContextLifecycleObserver(context)
- , m_stopped(false)
- , m_descriptor(streamDescriptor)
- , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired)
-{
- m_descriptor->setClient(this);
-
- size_t numberOfAudioTracks = m_descriptor->numberOfAudioComponents();
- m_audioTracks.reserveCapacity(numberOfAudioTracks);
- for (size_t i = 0; i < numberOfAudioTracks; i++) {
- MediaStreamTrack* newTrack = MediaStreamTrack::create(context, m_descriptor->audioComponent(i));
- newTrack->registerMediaStream(this);
- m_audioTracks.append(newTrack);
- }
-
- size_t numberOfVideoTracks = m_descriptor->numberOfVideoComponents();
- m_videoTracks.reserveCapacity(numberOfVideoTracks);
- for (size_t i = 0; i < numberOfVideoTracks; i++) {
- MediaStreamTrack* newTrack = MediaStreamTrack::create(context, m_descriptor->videoComponent(i));
- newTrack->registerMediaStream(this);
- m_videoTracks.append(newTrack);
- }
-}
-
-MediaStream::MediaStream(ExecutionContext* context, const MediaStreamTrackVector& audioTracks, const MediaStreamTrackVector& videoTracks)
- : ContextLifecycleObserver(context)
- , m_stopped(false)
- , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired)
-{
- MediaStreamComponentVector audioComponents;
- MediaStreamComponentVector videoComponents;
-
- MediaStreamTrackVector::const_iterator iter;
- for (iter = audioTracks.begin(); iter != audioTracks.end(); ++iter) {
- (*iter)->registerMediaStream(this);
- audioComponents.append((*iter)->component());
- }
- for (iter = videoTracks.begin(); iter != videoTracks.end(); ++iter) {
- (*iter)->registerMediaStream(this);
- videoComponents.append((*iter)->component());
- }
-
- m_descriptor = MediaStreamDescriptor::create(audioComponents, videoComponents);
- m_descriptor->setClient(this);
- MediaStreamCenter::instance().didCreateMediaStream(m_descriptor.get());
-
- m_audioTracks = audioTracks;
- m_videoTracks = videoTracks;
-}
-
-MediaStream::~MediaStream()
-{
-}
-
-bool MediaStream::ended() const
-{
- return m_stopped || m_descriptor->ended();
-}
-
-MediaStreamTrackVector MediaStream::getTracks()
-{
- MediaStreamTrackVector tracks;
- for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter)
- tracks.append(iter->get());
- for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter)
- tracks.append(iter->get());
- return tracks;
-}
-
-void MediaStream::addTrack(MediaStreamTrack* track, ExceptionState& exceptionState)
-{
- if (ended()) {
- exceptionState.throwDOMException(InvalidStateError, "The MediaStream is finished.");
- return;
- }
-
- if (!track) {
- exceptionState.throwDOMException(TypeMismatchError, "The MediaStreamTrack provided is invalid.");
- return;
- }
-
- if (getTrackById(track->id()))
- return;
-
- switch (track->component()->source()->type()) {
- case MediaStreamSource::TypeAudio:
- m_audioTracks.append(track);
- break;
- case MediaStreamSource::TypeVideo:
- m_videoTracks.append(track);
- break;
- }
- track->registerMediaStream(this);
- m_descriptor->addComponent(track->component());
- MediaStreamCenter::instance().didAddMediaStreamTrack(m_descriptor.get(), track->component());
-}
-
-void MediaStream::removeTrack(MediaStreamTrack* track, ExceptionState& exceptionState)
-{
- if (ended()) {
- exceptionState.throwDOMException(InvalidStateError, "The MediaStream is finished.");
- return;
- }
-
- if (!track) {
- exceptionState.throwDOMException(TypeMismatchError, "The MediaStreamTrack provided is invalid.");
- return;
- }
-
- size_t pos = kNotFound;
- switch (track->component()->source()->type()) {
- case MediaStreamSource::TypeAudio:
- pos = m_audioTracks.find(track);
- if (pos != kNotFound)
- m_audioTracks.remove(pos);
- break;
- case MediaStreamSource::TypeVideo:
- pos = m_videoTracks.find(track);
- if (pos != kNotFound)
- m_videoTracks.remove(pos);
- break;
- }
-
- if (pos == kNotFound)
- return;
- track->unregisterMediaStream(this);
- m_descriptor->removeComponent(track->component());
-
- if (!m_audioTracks.size() && !m_videoTracks.size())
- m_descriptor->setEnded();
-
- MediaStreamCenter::instance().didRemoveMediaStreamTrack(m_descriptor.get(), track->component());
-}
-
-MediaStreamTrack* MediaStream::getTrackById(String id)
-{
- for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter) {
- if ((*iter)->id() == id)
- return iter->get();
- }
-
- for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter) {
- if ((*iter)->id() == id)
- return iter->get();
- }
-
- return 0;
-}
-
-MediaStream* MediaStream::clone(ExecutionContext* context)
-{
- MediaStreamTrackVector tracks;
- for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter)
- tracks.append((*iter)->clone(context));
- for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter)
- tracks.append((*iter)->clone(context));
- return MediaStream::create(context, tracks);
-}
-
-void MediaStream::stop()
-{
- if (ended())
- return;
-
- MediaStreamCenter::instance().didStopLocalMediaStream(descriptor());
-
- streamEnded();
-}
-
-void MediaStream::trackEnded()
-{
- for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter) {
- if (!(*iter)->ended())
- return;
- }
-
- for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter) {
- if (!(*iter)->ended())
- return;
- }
-
- streamEnded();
-}
-
-void MediaStream::streamEnded()
-{
- if (ended())
- return;
-
- m_descriptor->setEnded();
- scheduleDispatchEvent(Event::create(EventTypeNames::ended));
-}
-
-void MediaStream::contextDestroyed()
-{
- ContextLifecycleObserver::contextDestroyed();
- m_stopped = true;
-}
-
-const AtomicString& MediaStream::interfaceName() const
-{
- return EventTargetNames::MediaStream;
-}
-
-ExecutionContext* MediaStream::executionContext() const
-{
- return ContextLifecycleObserver::executionContext();
-}
-
-void MediaStream::addRemoteTrack(MediaStreamComponent* component)
-{
- ASSERT(component);
- if (ended())
- return;
-
- MediaStreamTrack* track = MediaStreamTrack::create(executionContext(), component);
- switch (component->source()->type()) {
- case MediaStreamSource::TypeAudio:
- m_audioTracks.append(track);
- break;
- case MediaStreamSource::TypeVideo:
- m_videoTracks.append(track);
- break;
- }
- track->registerMediaStream(this);
- m_descriptor->addComponent(component);
-
- scheduleDispatchEvent(MediaStreamTrackEvent::create(EventTypeNames::addtrack, false, false, track));
-}
-
-void MediaStream::removeRemoteTrack(MediaStreamComponent* component)
-{
- if (m_stopped)
- return;
-
- MediaStreamTrackVector* tracks = 0;
- switch (component->source()->type()) {
- case MediaStreamSource::TypeAudio:
- tracks = &m_audioTracks;
- break;
- case MediaStreamSource::TypeVideo:
- tracks = &m_videoTracks;
- break;
- }
-
- size_t index = kNotFound;
- for (size_t i = 0; i < tracks->size(); ++i) {
- if ((*tracks)[i]->component() == component) {
- index = i;
- break;
- }
- }
- if (index == kNotFound)
- return;
-
- m_descriptor->removeComponent(component);
-
- MediaStreamTrack* track = (*tracks)[index];
- track->unregisterMediaStream(this);
- tracks->remove(index);
- scheduleDispatchEvent(MediaStreamTrackEvent::create(EventTypeNames::removetrack, false, false, track));
-}
-
-void MediaStream::scheduleDispatchEvent(PassRefPtrWillBeRawPtr<Event> event)
-{
- m_scheduledEvents.append(event);
-
- if (!m_scheduledEventTimer.isActive())
- m_scheduledEventTimer.startOneShot(0, FROM_HERE);
-}
-
-void MediaStream::scheduledEventTimerFired(Timer<MediaStream>*)
-{
- if (m_stopped)
- return;
-
- WillBeHeapVector<RefPtrWillBeMember<Event> > events;
- events.swap(m_scheduledEvents);
-
- WillBeHeapVector<RefPtrWillBeMember<Event> >::iterator it = events.begin();
- for (; it != events.end(); ++it)
- dispatchEvent((*it).release());
-
- events.clear();
-}
-
-URLRegistry& MediaStream::registry() const
-{
- return MediaStreamRegistry::registry();
-}
-
-void MediaStream::trace(Visitor* visitor)
-{
- visitor->trace(m_audioTracks);
- visitor->trace(m_videoTracks);
- visitor->trace(m_scheduledEvents);
- visitor->trace(m_descriptor);
- EventTargetWithInlineData::trace(visitor);
- MediaStreamDescriptorClient::trace(visitor);
-}
-
-} // namespace blink
« no previous file with comments | « Source/modules/mediastream/MediaStream.h ('k') | Source/modules/mediastream/MediaStream.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698