diff --git a/third_party_mods/libjingle/source/talk/app/webrtc_dev/peerconnectionimpl.cc b/third_party_mods/libjingle/source/talk/app/webrtc_dev/peerconnectionimpl.cc index 51ad308d7..bed82541e 100644 --- a/third_party_mods/libjingle/source/talk/app/webrtc_dev/peerconnectionimpl.cc +++ b/third_party_mods/libjingle/source/talk/app/webrtc_dev/peerconnectionimpl.cc @@ -29,6 +29,7 @@ #include +#include "talk/app/webrtc_dev/mediastreamhandler.h" #include "talk/app/webrtc_dev/scoped_refptr_msg.h" #include "talk/app/webrtc_dev/streamcollectionimpl.h" #include "talk/base/logging.h" @@ -122,6 +123,7 @@ namespace webrtc { PeerConnectionImpl::PeerConnectionImpl( cricket::ChannelManager* channel_manager, talk_base::Thread* signaling_thread, + talk_base::Thread* worker_thread, PcNetworkManager* network_manager, PcPacketSocketFactory* socket_factory) : observer_(NULL), @@ -135,7 +137,10 @@ PeerConnectionImpl::PeerConnectionImpl( socket_factory->socket_factory(), std::string(kUserAgent))), signaling_(new PeerConnectionSignaling(channel_manager, - signaling_thread)) { + signaling_thread)), + session_(new WebRtcSession(channel_manager, signaling_thread, + worker_thread, port_allocator_.get(), signaling_.get())), + stream_handler_(new MediaStreamHandlers(session_.get())) { signaling_->SignalNewPeerConnectionMessage.connect( this, &PeerConnectionImpl::OnNewPeerConnectionMessage); signaling_->SignalRemoteStreamAdded.connect( @@ -176,8 +181,8 @@ bool PeerConnectionImpl::Initialize(const std::string& configuration, ASSERT(!"NOT SUPPORTED"); return false; } - - return true; + // Initialize the WebRtcSession. It creates transport channels etc. + return session_->Initialize(); } scoped_refptr PeerConnectionImpl::local_streams() { @@ -219,6 +224,7 @@ void PeerConnectionImpl::OnMessage(talk_base::Message* msg) { ScopedRefMessageData* param( static_cast*> (data)); signaling_->CreateOffer(param->data()); + stream_handler_->CommitLocalStreams(param->data()); delete data; // Because it is Posted. break; } @@ -247,6 +253,7 @@ void PeerConnectionImpl::OnRemoteStreamAdded(MediaStream* remote_stream) { // remote streams. // This way we can avoid keeping a separate list of remote_media_streams_. remote_media_streams_->AddStream(remote_stream); + stream_handler_->AddRemoteStream(remote_stream); observer_->OnAddStream(remote_stream); } @@ -255,6 +262,7 @@ void PeerConnectionImpl::OnRemoteStreamRemoved(MediaStream* remote_stream) { // remote streams. // This way we can avoid keeping a separate list of remote_media_streams_. remote_media_streams_->RemoveStream(remote_stream); + stream_handler_->RemoveRemoteStream(remote_stream); observer_->OnRemoveStream(remote_stream); } diff --git a/third_party_mods/libjingle/source/talk/app/webrtc_dev/peerconnectionimpl.h b/third_party_mods/libjingle/source/talk/app/webrtc_dev/peerconnectionimpl.h index 9963bfc68..46e9b131f 100644 --- a/third_party_mods/libjingle/source/talk/app/webrtc_dev/peerconnectionimpl.h +++ b/third_party_mods/libjingle/source/talk/app/webrtc_dev/peerconnectionimpl.h @@ -33,6 +33,7 @@ #include "talk/app/webrtc_dev/peerconnection.h" #include "talk/app/webrtc_dev/peerconnectionsignaling.h" +#include "talk/app/webrtc_dev/webrtcsession.h" #include "talk/base/scoped_ptr.h" #include "talk/p2p/client/httpportallocator.h" @@ -41,8 +42,10 @@ class ChannelManager; } namespace webrtc { +class MediaStreamHandlers; class StreamCollectionImpl; + // PeerConnectionImpl implements the PeerConnection interface. // It uses PeerConnectionSignaling and WebRtcSession to implement // the PeerConnection functionality. @@ -52,6 +55,7 @@ class PeerConnectionImpl : public PeerConnection, public: PeerConnectionImpl(cricket::ChannelManager* channel_manager, talk_base::Thread* signaling_thread, + talk_base::Thread* worker_thread, PcNetworkManager* network_manager, PcPacketSocketFactory* socket_factory); @@ -90,6 +94,8 @@ class PeerConnectionImpl : public PeerConnection, scoped_refptr socket_factory_; talk_base::scoped_ptr port_allocator_; talk_base::scoped_ptr signaling_; + talk_base::scoped_ptr session_; + talk_base::scoped_ptr stream_handler_; }; } // namespace webrtc diff --git a/third_party_mods/libjingle/source/talk/app/webrtc_dev/peerconnectionmanagerimpl.cc b/third_party_mods/libjingle/source/talk/app/webrtc_dev/peerconnectionmanagerimpl.cc index 2cb85ac73..0e2f159a6 100644 --- a/third_party_mods/libjingle/source/talk/app/webrtc_dev/peerconnectionmanagerimpl.cc +++ b/third_party_mods/libjingle/source/talk/app/webrtc_dev/peerconnectionmanagerimpl.cc @@ -172,6 +172,7 @@ scoped_refptr PeerConnectionManagerImpl::CreatePeerConnection( RefCountImpl* pc = new RefCountImpl(channel_manager_.get(), signaling_thread_ptr_, + worker_thread_ptr_, network_manager_, socket_factory_); if (!pc->Initialize(configuration, observer)) { diff --git a/third_party_mods/libjingle/source/talk/app/webrtc_dev/webrtcsession.h b/third_party_mods/libjingle/source/talk/app/webrtc_dev/webrtcsession.h index 2baf211b3..36366a402 100644 --- a/third_party_mods/libjingle/source/talk/app/webrtc_dev/webrtcsession.h +++ b/third_party_mods/libjingle/source/talk/app/webrtc_dev/webrtcsession.h @@ -35,6 +35,7 @@ #include "talk/base/thread.h" #include "talk/p2p/base/session.h" #include "talk/session/phone/mediasession.h" +#include "talk/app/webrtc_dev/mediastreamprovider.h" namespace cricket { class ChannelManager; @@ -49,7 +50,8 @@ class PeerConnectionMessage; class PeerConnectionSignaling; class StreamCollection; -class WebRtcSession : public cricket::BaseSession { +class WebRtcSession : public cricket::BaseSession, + public MediaProviderInterface { public: WebRtcSession(cricket::ChannelManager* channel_manager, talk_base::Thread* signaling_thread, @@ -75,6 +77,14 @@ class WebRtcSession : public cricket::BaseSession { const cricket::SessionDescription* remote_desc); private: + // Implements MediaProviderInterface. + // TODO(mallinath): Add proper implementation. + virtual void SetCaptureDevice(uint32 ssrc, VideoCaptureModule* camera) {}; + virtual void SetLocalRenderer(uint32 ssrc, + cricket::VideoRenderer* renderer) {}; + virtual void SetRemoteRenderer(uint32 ssrc, + cricket::VideoRenderer* renderer) {}; + // Callback handling from PeerConnectionSignaling void OnSignalUpdateSessionDescription( const cricket::SessionDescription* local_desc,