| Index: talk/app/webrtc/mediastreamhandler.cc
|
| diff --git a/talk/app/webrtc/mediastreamhandler.cc b/talk/app/webrtc/mediastreamhandler.cc
|
| deleted file mode 100644
|
| index ded603b12a5da6a684ec84036978d611f8ffc643..0000000000000000000000000000000000000000
|
| --- a/talk/app/webrtc/mediastreamhandler.cc
|
| +++ /dev/null
|
| @@ -1,486 +0,0 @@
|
| -/*
|
| - * libjingle
|
| - * Copyright 2012 Google Inc.
|
| - *
|
| - * 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.
|
| - * 3. The name of the author may not be used to endorse or promote products
|
| - * derived from this software without specific prior written permission.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 THE AUTHOR 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 "talk/app/webrtc/mediastreamhandler.h"
|
| -
|
| -#include "talk/app/webrtc/localaudiosource.h"
|
| -#include "talk/app/webrtc/videosource.h"
|
| -#include "talk/app/webrtc/videosourceinterface.h"
|
| -
|
| -namespace webrtc {
|
| -
|
| -TrackHandler::TrackHandler(MediaStreamTrackInterface* track, uint32 ssrc)
|
| - : track_(track),
|
| - ssrc_(ssrc),
|
| - state_(track->state()),
|
| - enabled_(track->enabled()) {
|
| - track_->RegisterObserver(this);
|
| -}
|
| -
|
| -TrackHandler::~TrackHandler() {
|
| - track_->UnregisterObserver(this);
|
| -}
|
| -
|
| -void TrackHandler::OnChanged() {
|
| - if (state_ != track_->state()) {
|
| - state_ = track_->state();
|
| - OnStateChanged();
|
| - }
|
| - if (enabled_ != track_->enabled()) {
|
| - enabled_ = track_->enabled();
|
| - OnEnabledChanged();
|
| - }
|
| -}
|
| -
|
| -LocalAudioSinkAdapter::LocalAudioSinkAdapter() : sink_(NULL) {}
|
| -
|
| -LocalAudioSinkAdapter::~LocalAudioSinkAdapter() {
|
| - rtc::CritScope lock(&lock_);
|
| - if (sink_)
|
| - sink_->OnClose();
|
| -}
|
| -
|
| -void LocalAudioSinkAdapter::OnData(const void* audio_data,
|
| - int bits_per_sample,
|
| - int sample_rate,
|
| - int number_of_channels,
|
| - size_t number_of_frames) {
|
| - rtc::CritScope lock(&lock_);
|
| - if (sink_) {
|
| - sink_->OnData(audio_data, bits_per_sample, sample_rate,
|
| - number_of_channels, number_of_frames);
|
| - }
|
| -}
|
| -
|
| -void LocalAudioSinkAdapter::SetSink(cricket::AudioRenderer::Sink* sink) {
|
| - rtc::CritScope lock(&lock_);
|
| - ASSERT(!sink || !sink_);
|
| - sink_ = sink;
|
| -}
|
| -
|
| -LocalAudioTrackHandler::LocalAudioTrackHandler(
|
| - AudioTrackInterface* track,
|
| - uint32 ssrc,
|
| - AudioProviderInterface* provider)
|
| - : TrackHandler(track, ssrc),
|
| - audio_track_(track),
|
| - provider_(provider),
|
| - sink_adapter_(new LocalAudioSinkAdapter()) {
|
| - OnEnabledChanged();
|
| - track->AddSink(sink_adapter_.get());
|
| -}
|
| -
|
| -LocalAudioTrackHandler::~LocalAudioTrackHandler() {
|
| -}
|
| -
|
| -void LocalAudioTrackHandler::OnStateChanged() {
|
| - // TODO(perkj): What should happen when the state change?
|
| -}
|
| -
|
| -void LocalAudioTrackHandler::Stop() {
|
| - audio_track_->RemoveSink(sink_adapter_.get());
|
| - cricket::AudioOptions options;
|
| - provider_->SetAudioSend(ssrc(), false, options, NULL);
|
| -}
|
| -
|
| -void LocalAudioTrackHandler::OnEnabledChanged() {
|
| - cricket::AudioOptions options;
|
| - if (audio_track_->enabled() && audio_track_->GetSource()) {
|
| - // TODO(xians): Remove this static_cast since we should be able to connect
|
| - // a remote audio track to peer connection.
|
| - options = static_cast<LocalAudioSource*>(
|
| - audio_track_->GetSource())->options();
|
| - }
|
| -
|
| - // Use the renderer if the audio track has one, otherwise use the sink
|
| - // adapter owned by this class.
|
| - cricket::AudioRenderer* renderer = audio_track_->GetRenderer() ?
|
| - audio_track_->GetRenderer() : sink_adapter_.get();
|
| - ASSERT(renderer != NULL);
|
| - provider_->SetAudioSend(ssrc(), audio_track_->enabled(), options, renderer);
|
| -}
|
| -
|
| -RemoteAudioTrackHandler::RemoteAudioTrackHandler(
|
| - AudioTrackInterface* track,
|
| - uint32 ssrc,
|
| - AudioProviderInterface* provider)
|
| - : TrackHandler(track, ssrc),
|
| - audio_track_(track),
|
| - provider_(provider) {
|
| - track->GetSource()->RegisterAudioObserver(this);
|
| - OnEnabledChanged();
|
| -}
|
| -
|
| -RemoteAudioTrackHandler::~RemoteAudioTrackHandler() {
|
| - audio_track_->GetSource()->UnregisterAudioObserver(this);
|
| -}
|
| -
|
| -void RemoteAudioTrackHandler::Stop() {
|
| - provider_->SetAudioPlayout(ssrc(), false, NULL);
|
| -}
|
| -
|
| -void RemoteAudioTrackHandler::OnStateChanged() {
|
| -}
|
| -
|
| -void RemoteAudioTrackHandler::OnEnabledChanged() {
|
| - provider_->SetAudioPlayout(ssrc(), audio_track_->enabled(),
|
| - audio_track_->GetRenderer());
|
| -}
|
| -
|
| -void RemoteAudioTrackHandler::OnSetVolume(double volume) {
|
| - // When the track is disabled, the volume of the source, which is the
|
| - // corresponding WebRtc Voice Engine channel will be 0. So we do not allow
|
| - // setting the volume to the source when the track is disabled.
|
| - if (audio_track_->enabled())
|
| - provider_->SetAudioPlayoutVolume(ssrc(), volume);
|
| -}
|
| -
|
| -LocalVideoTrackHandler::LocalVideoTrackHandler(
|
| - VideoTrackInterface* track,
|
| - uint32 ssrc,
|
| - VideoProviderInterface* provider)
|
| - : TrackHandler(track, ssrc),
|
| - local_video_track_(track),
|
| - provider_(provider) {
|
| - VideoSourceInterface* source = local_video_track_->GetSource();
|
| - if (source)
|
| - provider_->SetCaptureDevice(ssrc, source->GetVideoCapturer());
|
| - OnEnabledChanged();
|
| -}
|
| -
|
| -LocalVideoTrackHandler::~LocalVideoTrackHandler() {
|
| -}
|
| -
|
| -void LocalVideoTrackHandler::OnStateChanged() {
|
| -}
|
| -
|
| -void LocalVideoTrackHandler::Stop() {
|
| - provider_->SetCaptureDevice(ssrc(), NULL);
|
| - provider_->SetVideoSend(ssrc(), false, NULL);
|
| -}
|
| -
|
| -void LocalVideoTrackHandler::OnEnabledChanged() {
|
| - const cricket::VideoOptions* options = NULL;
|
| - VideoSourceInterface* source = local_video_track_->GetSource();
|
| - if (local_video_track_->enabled() && source) {
|
| - options = source->options();
|
| - }
|
| - provider_->SetVideoSend(ssrc(), local_video_track_->enabled(), options);
|
| -}
|
| -
|
| -RemoteVideoTrackHandler::RemoteVideoTrackHandler(
|
| - VideoTrackInterface* track,
|
| - uint32 ssrc,
|
| - VideoProviderInterface* provider)
|
| - : TrackHandler(track, ssrc),
|
| - remote_video_track_(track),
|
| - provider_(provider) {
|
| - OnEnabledChanged();
|
| - provider_->SetVideoPlayout(ssrc, true,
|
| - remote_video_track_->GetSource()->FrameInput());
|
| -}
|
| -
|
| -RemoteVideoTrackHandler::~RemoteVideoTrackHandler() {
|
| -}
|
| -
|
| -void RemoteVideoTrackHandler::Stop() {
|
| - // Since cricket::VideoRenderer is not reference counted
|
| - // we need to remove the renderer before we are deleted.
|
| - provider_->SetVideoPlayout(ssrc(), false, NULL);
|
| -}
|
| -
|
| -void RemoteVideoTrackHandler::OnStateChanged() {
|
| -}
|
| -
|
| -void RemoteVideoTrackHandler::OnEnabledChanged() {
|
| -}
|
| -
|
| -MediaStreamHandler::MediaStreamHandler(MediaStreamInterface* stream,
|
| - AudioProviderInterface* audio_provider,
|
| - VideoProviderInterface* video_provider)
|
| - : stream_(stream),
|
| - audio_provider_(audio_provider),
|
| - video_provider_(video_provider) {
|
| -}
|
| -
|
| -MediaStreamHandler::~MediaStreamHandler() {
|
| - for (TrackHandlers::iterator it = track_handlers_.begin();
|
| - it != track_handlers_.end(); ++it) {
|
| - delete *it;
|
| - }
|
| -}
|
| -
|
| -void MediaStreamHandler::RemoveTrack(MediaStreamTrackInterface* track) {
|
| - for (TrackHandlers::iterator it = track_handlers_.begin();
|
| - it != track_handlers_.end(); ++it) {
|
| - if ((*it)->track() == track) {
|
| - TrackHandler* track = *it;
|
| - track->Stop();
|
| - delete track;
|
| - track_handlers_.erase(it);
|
| - break;
|
| - }
|
| - }
|
| -}
|
| -
|
| -TrackHandler* MediaStreamHandler::FindTrackHandler(
|
| - MediaStreamTrackInterface* track) {
|
| - TrackHandlers::iterator it = track_handlers_.begin();
|
| - for (; it != track_handlers_.end(); ++it) {
|
| - if ((*it)->track() == track) {
|
| - return *it;
|
| - break;
|
| - }
|
| - }
|
| - return NULL;
|
| -}
|
| -
|
| -MediaStreamInterface* MediaStreamHandler::stream() {
|
| - return stream_.get();
|
| -}
|
| -
|
| -void MediaStreamHandler::OnChanged() {
|
| -}
|
| -
|
| -void MediaStreamHandler::Stop() {
|
| - for (TrackHandlers::const_iterator it = track_handlers_.begin();
|
| - it != track_handlers_.end(); ++it) {
|
| - (*it)->Stop();
|
| - }
|
| -}
|
| -
|
| -LocalMediaStreamHandler::LocalMediaStreamHandler(
|
| - MediaStreamInterface* stream,
|
| - AudioProviderInterface* audio_provider,
|
| - VideoProviderInterface* video_provider)
|
| - : MediaStreamHandler(stream, audio_provider, video_provider) {
|
| -}
|
| -
|
| -LocalMediaStreamHandler::~LocalMediaStreamHandler() {
|
| -}
|
| -
|
| -void LocalMediaStreamHandler::AddAudioTrack(AudioTrackInterface* audio_track,
|
| - uint32 ssrc) {
|
| - ASSERT(!FindTrackHandler(audio_track));
|
| -
|
| - TrackHandler* handler(new LocalAudioTrackHandler(audio_track, ssrc,
|
| - audio_provider_));
|
| - track_handlers_.push_back(handler);
|
| -}
|
| -
|
| -void LocalMediaStreamHandler::AddVideoTrack(VideoTrackInterface* video_track,
|
| - uint32 ssrc) {
|
| - ASSERT(!FindTrackHandler(video_track));
|
| -
|
| - TrackHandler* handler(new LocalVideoTrackHandler(video_track, ssrc,
|
| - video_provider_));
|
| - track_handlers_.push_back(handler);
|
| -}
|
| -
|
| -RemoteMediaStreamHandler::RemoteMediaStreamHandler(
|
| - MediaStreamInterface* stream,
|
| - AudioProviderInterface* audio_provider,
|
| - VideoProviderInterface* video_provider)
|
| - : MediaStreamHandler(stream, audio_provider, video_provider) {
|
| -}
|
| -
|
| -RemoteMediaStreamHandler::~RemoteMediaStreamHandler() {
|
| -}
|
| -
|
| -void RemoteMediaStreamHandler::AddAudioTrack(AudioTrackInterface* audio_track,
|
| - uint32 ssrc) {
|
| - ASSERT(!FindTrackHandler(audio_track));
|
| - TrackHandler* handler(
|
| - new RemoteAudioTrackHandler(audio_track, ssrc, audio_provider_));
|
| - track_handlers_.push_back(handler);
|
| -}
|
| -
|
| -void RemoteMediaStreamHandler::AddVideoTrack(VideoTrackInterface* video_track,
|
| - uint32 ssrc) {
|
| - ASSERT(!FindTrackHandler(video_track));
|
| - TrackHandler* handler(
|
| - new RemoteVideoTrackHandler(video_track, ssrc, video_provider_));
|
| - track_handlers_.push_back(handler);
|
| -}
|
| -
|
| -MediaStreamHandlerContainer::MediaStreamHandlerContainer(
|
| - AudioProviderInterface* audio_provider,
|
| - VideoProviderInterface* video_provider)
|
| - : audio_provider_(audio_provider),
|
| - video_provider_(video_provider) {
|
| -}
|
| -
|
| -MediaStreamHandlerContainer::~MediaStreamHandlerContainer() {
|
| - ASSERT(remote_streams_handlers_.empty());
|
| - ASSERT(local_streams_handlers_.empty());
|
| -}
|
| -
|
| -void MediaStreamHandlerContainer::TearDown() {
|
| - for (StreamHandlerList::iterator it = remote_streams_handlers_.begin();
|
| - it != remote_streams_handlers_.end(); ++it) {
|
| - (*it)->Stop();
|
| - delete *it;
|
| - }
|
| - remote_streams_handlers_.clear();
|
| - for (StreamHandlerList::iterator it = local_streams_handlers_.begin();
|
| - it != local_streams_handlers_.end(); ++it) {
|
| - (*it)->Stop();
|
| - delete *it;
|
| - }
|
| - local_streams_handlers_.clear();
|
| -}
|
| -
|
| -void MediaStreamHandlerContainer::RemoveRemoteStream(
|
| - MediaStreamInterface* stream) {
|
| - DeleteStreamHandler(&remote_streams_handlers_, stream);
|
| -}
|
| -
|
| -void MediaStreamHandlerContainer::AddRemoteAudioTrack(
|
| - MediaStreamInterface* stream,
|
| - AudioTrackInterface* audio_track,
|
| - uint32 ssrc) {
|
| - MediaStreamHandler* handler = FindStreamHandler(remote_streams_handlers_,
|
| - stream);
|
| - if (handler == NULL) {
|
| - handler = CreateRemoteStreamHandler(stream);
|
| - }
|
| - handler->AddAudioTrack(audio_track, ssrc);
|
| -}
|
| -
|
| -void MediaStreamHandlerContainer::AddRemoteVideoTrack(
|
| - MediaStreamInterface* stream,
|
| - VideoTrackInterface* video_track,
|
| - uint32 ssrc) {
|
| - MediaStreamHandler* handler = FindStreamHandler(remote_streams_handlers_,
|
| - stream);
|
| - if (handler == NULL) {
|
| - handler = CreateRemoteStreamHandler(stream);
|
| - }
|
| - handler->AddVideoTrack(video_track, ssrc);
|
| -}
|
| -
|
| -void MediaStreamHandlerContainer::RemoveRemoteTrack(
|
| - MediaStreamInterface* stream,
|
| - MediaStreamTrackInterface* track) {
|
| - MediaStreamHandler* handler = FindStreamHandler(remote_streams_handlers_,
|
| - stream);
|
| - if (!VERIFY(handler != NULL)) {
|
| - LOG(LS_WARNING) << "Local MediaStreamHandler for stream with id "
|
| - << stream->label() << "doesnt't exist.";
|
| - return;
|
| - }
|
| - handler->RemoveTrack(track);
|
| -}
|
| -
|
| -void MediaStreamHandlerContainer::RemoveLocalStream(
|
| - MediaStreamInterface* stream) {
|
| - DeleteStreamHandler(&local_streams_handlers_, stream);
|
| -}
|
| -
|
| -void MediaStreamHandlerContainer::AddLocalAudioTrack(
|
| - MediaStreamInterface* stream,
|
| - AudioTrackInterface* audio_track,
|
| - uint32 ssrc) {
|
| - MediaStreamHandler* handler = FindStreamHandler(local_streams_handlers_,
|
| - stream);
|
| - if (handler == NULL) {
|
| - handler = CreateLocalStreamHandler(stream);
|
| - }
|
| - handler->AddAudioTrack(audio_track, ssrc);
|
| -}
|
| -
|
| -void MediaStreamHandlerContainer::AddLocalVideoTrack(
|
| - MediaStreamInterface* stream,
|
| - VideoTrackInterface* video_track,
|
| - uint32 ssrc) {
|
| - MediaStreamHandler* handler = FindStreamHandler(local_streams_handlers_,
|
| - stream);
|
| - if (handler == NULL) {
|
| - handler = CreateLocalStreamHandler(stream);
|
| - }
|
| - handler->AddVideoTrack(video_track, ssrc);
|
| -}
|
| -
|
| -void MediaStreamHandlerContainer::RemoveLocalTrack(
|
| - MediaStreamInterface* stream,
|
| - MediaStreamTrackInterface* track) {
|
| - MediaStreamHandler* handler = FindStreamHandler(local_streams_handlers_,
|
| - stream);
|
| - if (!VERIFY(handler != NULL)) {
|
| - LOG(LS_WARNING) << "Remote MediaStreamHandler for stream with id "
|
| - << stream->label() << "doesnt't exist.";
|
| - return;
|
| - }
|
| - handler->RemoveTrack(track);
|
| -}
|
| -
|
| -MediaStreamHandler* MediaStreamHandlerContainer::CreateRemoteStreamHandler(
|
| - MediaStreamInterface* stream) {
|
| - ASSERT(!FindStreamHandler(remote_streams_handlers_, stream));
|
| -
|
| - RemoteMediaStreamHandler* handler =
|
| - new RemoteMediaStreamHandler(stream, audio_provider_, video_provider_);
|
| - remote_streams_handlers_.push_back(handler);
|
| - return handler;
|
| -}
|
| -
|
| -MediaStreamHandler* MediaStreamHandlerContainer::CreateLocalStreamHandler(
|
| - MediaStreamInterface* stream) {
|
| - ASSERT(!FindStreamHandler(local_streams_handlers_, stream));
|
| -
|
| - LocalMediaStreamHandler* handler =
|
| - new LocalMediaStreamHandler(stream, audio_provider_, video_provider_);
|
| - local_streams_handlers_.push_back(handler);
|
| - return handler;
|
| -}
|
| -
|
| -MediaStreamHandler* MediaStreamHandlerContainer::FindStreamHandler(
|
| - const StreamHandlerList& handlers,
|
| - MediaStreamInterface* stream) {
|
| - StreamHandlerList::const_iterator it = handlers.begin();
|
| - for (; it != handlers.end(); ++it) {
|
| - if ((*it)->stream() == stream) {
|
| - return *it;
|
| - }
|
| - }
|
| - return NULL;
|
| -}
|
| -
|
| -void MediaStreamHandlerContainer::DeleteStreamHandler(
|
| - StreamHandlerList* streamhandlers, MediaStreamInterface* stream) {
|
| - StreamHandlerList::iterator it = streamhandlers->begin();
|
| - for (; it != streamhandlers->end(); ++it) {
|
| - if ((*it)->stream() == stream) {
|
| - (*it)->Stop();
|
| - delete *it;
|
| - streamhandlers->erase(it);
|
| - break;
|
| - }
|
| - }
|
| -}
|
| -
|
| -} // namespace webrtc
|
|
|