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

Side by Side Diff: content/renderer/media/media_stream_impl.h

Issue 9543001: Support for multiple PeerConnections (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_IMPL_H_ 5 #ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_IMPL_H_
6 #define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_IMPL_H_ 6 #define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_IMPL_H_
7 7
8 #include <list> 8 #include <list>
9 #include <map> 9 #include <map>
10 #include <string> 10 #include <string>
11 #include <utility>
11 12
12 #include "base/basictypes.h" 13 #include "base/basictypes.h"
13 #include "base/compiler_specific.h" 14 #include "base/compiler_specific.h"
14 #include "base/gtest_prod_util.h" 15 #include "base/gtest_prod_util.h"
15 #include "base/memory/ref_counted.h" 16 #include "base/memory/ref_counted.h"
16 #include "base/memory/scoped_ptr.h" 17 #include "base/memory/scoped_ptr.h"
17 #include "base/message_loop_proxy.h" 18 #include "base/message_loop_proxy.h"
18 #include "base/threading/non_thread_safe.h" 19 #include "base/threading/non_thread_safe.h"
19 #include "base/threading/thread.h" 20 #include "base/threading/thread.h"
20 #include "content/common/content_export.h" 21 #include "content/common/content_export.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 public: 66 public:
66 MediaStreamImpl( 67 MediaStreamImpl(
67 MediaStreamDispatcher* media_stream_dispatcher, 68 MediaStreamDispatcher* media_stream_dispatcher,
68 content::P2PSocketDispatcher* p2p_socket_dispatcher, 69 content::P2PSocketDispatcher* p2p_socket_dispatcher,
69 VideoCaptureImplManager* vc_manager, 70 VideoCaptureImplManager* vc_manager,
70 MediaStreamDependencyFactory* dependency_factory); 71 MediaStreamDependencyFactory* dependency_factory);
71 virtual ~MediaStreamImpl(); 72 virtual ~MediaStreamImpl();
72 73
73 virtual WebKit::WebPeerConnectionHandler* CreatePeerConnectionHandler( 74 virtual WebKit::WebPeerConnectionHandler* CreatePeerConnectionHandler(
74 WebKit::WebPeerConnectionHandlerClient* client); 75 WebKit::WebPeerConnectionHandlerClient* client);
75 virtual void ClosePeerConnection(); 76 virtual void ClosePeerConnection(PeerConnectionHandler* pc_handler);
76 virtual webrtc::MediaStreamTrackInterface* GetLocalMediaStreamTrack( 77 virtual webrtc::MediaStreamTrackInterface* GetLocalMediaStreamTrack(
77 const std::string& label); 78 const std::string& label);
78 79
79 // WebKit::WebUserMediaClient implementation 80 // WebKit::WebUserMediaClient implementation
80 virtual void requestUserMedia( 81 virtual void requestUserMedia(
81 const WebKit::WebUserMediaRequest& user_media_request, 82 const WebKit::WebUserMediaRequest& user_media_request,
82 const WebKit::WebVector<WebKit::WebMediaStreamSource>& 83 const WebKit::WebVector<WebKit::WebMediaStreamSource>&
83 media_stream_source_vector) OVERRIDE; 84 media_stream_source_vector) OVERRIDE;
84 virtual void cancelUserMediaRequest( 85 virtual void cancelUserMediaRequest(
85 const WebKit::WebUserMediaRequest& user_media_request) OVERRIDE; 86 const WebKit::WebUserMediaRequest& user_media_request) OVERRIDE;
(...skipping 21 matching lines...) Expand all
107 const media_stream::StreamDeviceInfoArray& device_array) OVERRIDE; 108 const media_stream::StreamDeviceInfoArray& device_array) OVERRIDE;
108 virtual void OnDevicesEnumerationFailed(int request_id) OVERRIDE; 109 virtual void OnDevicesEnumerationFailed(int request_id) OVERRIDE;
109 virtual void OnDeviceOpened( 110 virtual void OnDeviceOpened(
110 int request_id, 111 int request_id,
111 const std::string& label, 112 const std::string& label,
112 const media_stream::StreamDeviceInfo& device_info) OVERRIDE; 113 const media_stream::StreamDeviceInfo& device_info) OVERRIDE;
113 virtual void OnDeviceOpenFailed(int request_id) OVERRIDE; 114 virtual void OnDeviceOpenFailed(int request_id) OVERRIDE;
114 115
115 private: 116 private:
116 FRIEND_TEST_ALL_PREFIXES(MediaStreamImplTest, Basic); 117 FRIEND_TEST_ALL_PREFIXES(MediaStreamImplTest, Basic);
118 FRIEND_TEST_ALL_PREFIXES(MediaStreamImplTest, MultiplePeerConnections);
117 119
118 class VideoRendererWrapper : public webrtc::VideoRendererWrapperInterface { 120 class VideoRendererWrapper : public webrtc::VideoRendererWrapperInterface {
119 public: 121 public:
120 VideoRendererWrapper(); 122 VideoRendererWrapper();
121 virtual cricket::VideoRenderer* renderer() OVERRIDE { 123 virtual cricket::VideoRenderer* renderer() OVERRIDE {
122 return rtc_video_decoder_.get(); 124 return rtc_video_decoder_.get();
123 } 125 }
124 void SetVideoDecoder(RTCVideoDecoder* decoder); 126 void SetVideoDecoder(RTCVideoDecoder* decoder);
125 127
126 protected: 128 protected:
(...skipping 19 matching lines...) Expand all
146 // for the lifetime of RenderView. 148 // for the lifetime of RenderView.
147 content::P2PSocketDispatcher* p2p_socket_dispatcher_; 149 content::P2PSocketDispatcher* p2p_socket_dispatcher_;
148 150
149 // We own network_manager_, must be deleted on the worker thread. 151 // We own network_manager_, must be deleted on the worker thread.
150 content::IpcNetworkManager* network_manager_; 152 content::IpcNetworkManager* network_manager_;
151 153
152 scoped_ptr<content::IpcPacketSocketFactory> socket_factory_; 154 scoped_ptr<content::IpcPacketSocketFactory> socket_factory_;
153 155
154 scoped_refptr<VideoCaptureImplManager> vc_manager_; 156 scoped_refptr<VideoCaptureImplManager> vc_manager_;
155 157
156 // peer_connection_handler_ is a weak reference, owned by WebKit. It's valid 158 // peer_connection_handlers_ contains raw references, owned by WebKit. A
157 // until stop is called on it (which will call ClosePeerConnection on us). 159 // pointer is valid until stop is called on the object (which will call
158 // TODO(grunell): Support several PeerConnectionsHandlers. 160 // ClosePeerConnection on us and we remove the pointer).
159 PeerConnectionHandler* peer_connection_handler_; 161 std::list<PeerConnectionHandler*> peer_connection_handlers_;
160 162
161 // We keep a list of the generated local tracks, so that we can add capture 163 // We keep a list of the generated local tracks, so that we can add capture
162 // devices when generated and also use them for recording. 164 // devices when generated and also use them for recording.
163 typedef talk_base::scoped_refptr<webrtc::MediaStreamTrackInterface> 165 typedef talk_base::scoped_refptr<webrtc::MediaStreamTrackInterface>
164 MediaStreamTrackPtr; 166 MediaStreamTrackPtr;
165 typedef std::map<std::string, MediaStreamTrackPtr> MediaStreamTrackPtrMap; 167 typedef std::map<std::string, MediaStreamTrackPtr> MediaStreamTrackPtrMap;
166 MediaStreamTrackPtrMap local_tracks_; 168 MediaStreamTrackPtrMap local_tracks_;
167 169
168 talk_base::scoped_refptr<VideoRendererWrapper> video_renderer_; 170 // Native PeerConnection only supports 1:1 mapping between MediaStream and
169 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; 171 // video tag/renderer, so we restrict to this too.
172 typedef talk_base::scoped_refptr<VideoRendererWrapper> VideoRendererPtr;
173 typedef std::pair<VideoRendererPtr, PeerConnectionHandler*> VideoRendererPair;
174 typedef std::map<std::string, VideoRendererPair> VideoRendererMap;
tommi (sloooow) - chröme 2012/02/29 13:37:00 maybe a comment that documents what the key is?
Henrik Grunell 2012/03/23 12:51:56 Done.
175 VideoRendererMap video_renderers_;
170 176
171 // PeerConnection threads. signaling_thread_ is created from the 177 // PeerConnection threads. signaling_thread_ is created from the
172 // "current" chrome thread. 178 // "current" chrome thread.
173 talk_base::Thread* signaling_thread_; 179 talk_base::Thread* signaling_thread_;
174 talk_base::Thread* worker_thread_; 180 talk_base::Thread* worker_thread_;
175 base::Thread chrome_worker_thread_; 181 base::Thread chrome_worker_thread_;
176 182
177 static int next_request_id_; 183 static int next_request_id_;
178 typedef std::map<int, WebKit::WebUserMediaRequest> MediaRequestMap; 184 typedef std::map<int, WebKit::WebUserMediaRequest> MediaRequestMap;
179 MediaRequestMap user_media_requests_; 185 MediaRequestMap user_media_requests_;
180 186
181 DISALLOW_COPY_AND_ASSIGN(MediaStreamImpl); 187 DISALLOW_COPY_AND_ASSIGN(MediaStreamImpl);
182 }; 188 };
183 189
184 #endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_IMPL_H_ 190 #endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_IMPL_H_
OLDNEW
« no previous file with comments | « no previous file | content/renderer/media/media_stream_impl.cc » ('j') | content/renderer/media/media_stream_impl.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698