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

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

Issue 9699069: Adding JSEP PeerConnection glue. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Deleting two renamed files. Created 8 years, 8 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 13 matching lines...) Expand all
34 class IpcNetworkManager; 35 class IpcNetworkManager;
35 class IpcPacketSocketFactory; 36 class IpcPacketSocketFactory;
36 class P2PSocketDispatcher; 37 class P2PSocketDispatcher;
37 } 38 }
38 39
39 namespace talk_base { 40 namespace talk_base {
40 class Thread; 41 class Thread;
41 } 42 }
42 43
43 namespace WebKit { 44 namespace WebKit {
45 class WebPeerConnection00Handler;
46 class WebPeerConnection00HandlerClient;
44 class WebPeerConnectionHandler; 47 class WebPeerConnectionHandler;
45 class WebPeerConnectionHandlerClient; 48 class WebPeerConnectionHandlerClient;
46 } 49 }
47 50
48 class MediaStreamDispatcher; 51 class MediaStreamDispatcher;
49 class MediaStreamDependencyFactory; 52 class MediaStreamDependencyFactory;
50 class PeerConnectionHandler; 53 class PeerConnectionHandlerBase;
51 class VideoCaptureImplManager; 54 class VideoCaptureImplManager;
52 class RTCVideoDecoder; 55 class RTCVideoDecoder;
53 56
54 // MediaStreamImpl is a delegate for the Media Stream API messages used by 57 // MediaStreamImpl is a delegate for the Media Stream API messages used by
55 // WebKit. It ties together WebKit, native PeerConnection in libjingle and 58 // WebKit. It ties together WebKit, native PeerConnection in libjingle and
56 // MediaStreamManager (via MediaStreamDispatcher and MediaStreamDispatcherHost) 59 // MediaStreamManager (via MediaStreamDispatcher and MediaStreamDispatcherHost)
57 // in the browser process. It must be created, called and destroyed on the 60 // in the browser process. It must be created, called and destroyed on the
58 // render thread. 61 // render thread.
59 class CONTENT_EXPORT MediaStreamImpl 62 class CONTENT_EXPORT MediaStreamImpl
60 : NON_EXPORTED_BASE(public WebKit::WebUserMediaClient), 63 : NON_EXPORTED_BASE(public WebKit::WebUserMediaClient),
61 NON_EXPORTED_BASE(public webkit_media::MediaStreamClient), 64 NON_EXPORTED_BASE(public webkit_media::MediaStreamClient),
62 public MediaStreamDispatcherEventHandler, 65 public MediaStreamDispatcherEventHandler,
63 NON_EXPORTED_BASE(public base::NonThreadSafe), 66 NON_EXPORTED_BASE(public base::NonThreadSafe),
64 public base::RefCountedThreadSafe<MediaStreamImpl> { 67 public base::RefCountedThreadSafe<MediaStreamImpl> {
65 public: 68 public:
66 MediaStreamImpl( 69 MediaStreamImpl(
67 MediaStreamDispatcher* media_stream_dispatcher, 70 MediaStreamDispatcher* media_stream_dispatcher,
68 content::P2PSocketDispatcher* p2p_socket_dispatcher, 71 content::P2PSocketDispatcher* p2p_socket_dispatcher,
69 VideoCaptureImplManager* vc_manager, 72 VideoCaptureImplManager* vc_manager,
70 MediaStreamDependencyFactory* dependency_factory); 73 MediaStreamDependencyFactory* dependency_factory);
71 virtual ~MediaStreamImpl(); 74 virtual ~MediaStreamImpl();
72 75
73 virtual WebKit::WebPeerConnectionHandler* CreatePeerConnectionHandler( 76 virtual WebKit::WebPeerConnectionHandler* CreatePeerConnectionHandler(
74 WebKit::WebPeerConnectionHandlerClient* client); 77 WebKit::WebPeerConnectionHandlerClient* client);
75 virtual void ClosePeerConnection(); 78 virtual WebKit::WebPeerConnection00Handler* CreatePeerConnectionHandlerJsep(
79 WebKit::WebPeerConnection00HandlerClient* client);
80 virtual void ClosePeerConnection(PeerConnectionHandlerBase* pc_handler);
76 virtual webrtc::MediaStreamTrackInterface* GetLocalMediaStreamTrack( 81 virtual webrtc::MediaStreamTrackInterface* GetLocalMediaStreamTrack(
77 const std::string& label); 82 const std::string& label);
78 83
79 // WebKit::WebUserMediaClient implementation 84 // WebKit::WebUserMediaClient implementation
80 virtual void requestUserMedia( 85 virtual void requestUserMedia(
81 const WebKit::WebUserMediaRequest& user_media_request, 86 const WebKit::WebUserMediaRequest& user_media_request,
82 const WebKit::WebVector<WebKit::WebMediaStreamSource>& 87 const WebKit::WebVector<WebKit::WebMediaStreamSource>&
83 media_stream_source_vector) OVERRIDE; 88 media_stream_source_vector) OVERRIDE;
84 virtual void cancelUserMediaRequest( 89 virtual void cancelUserMediaRequest(
85 const WebKit::WebUserMediaRequest& user_media_request) OVERRIDE; 90 const WebKit::WebUserMediaRequest& user_media_request) OVERRIDE;
(...skipping 21 matching lines...) Expand all
107 const media_stream::StreamDeviceInfoArray& device_array) OVERRIDE; 112 const media_stream::StreamDeviceInfoArray& device_array) OVERRIDE;
108 virtual void OnDevicesEnumerationFailed(int request_id) OVERRIDE; 113 virtual void OnDevicesEnumerationFailed(int request_id) OVERRIDE;
109 virtual void OnDeviceOpened( 114 virtual void OnDeviceOpened(
110 int request_id, 115 int request_id,
111 const std::string& label, 116 const std::string& label,
112 const media_stream::StreamDeviceInfo& device_info) OVERRIDE; 117 const media_stream::StreamDeviceInfo& device_info) OVERRIDE;
113 virtual void OnDeviceOpenFailed(int request_id) OVERRIDE; 118 virtual void OnDeviceOpenFailed(int request_id) OVERRIDE;
114 119
115 private: 120 private:
116 FRIEND_TEST_ALL_PREFIXES(MediaStreamImplTest, Basic); 121 FRIEND_TEST_ALL_PREFIXES(MediaStreamImplTest, Basic);
122 FRIEND_TEST_ALL_PREFIXES(MediaStreamImplTest, MultiplePeerConnections);
117 123
118 class VideoRendererWrapper : public webrtc::VideoRendererWrapperInterface { 124 class VideoRendererWrapper : public webrtc::VideoRendererWrapperInterface {
119 public: 125 public:
120 VideoRendererWrapper(); 126 VideoRendererWrapper();
121 virtual cricket::VideoRenderer* renderer() OVERRIDE { 127 virtual cricket::VideoRenderer* renderer() OVERRIDE {
122 return rtc_video_decoder_.get(); 128 return rtc_video_decoder_.get();
123 } 129 }
124 void SetVideoDecoder(RTCVideoDecoder* decoder); 130 void SetVideoDecoder(RTCVideoDecoder* decoder);
125 131
126 protected: 132 protected:
(...skipping 22 matching lines...) Expand all
149 // for the lifetime of RenderView. 155 // for the lifetime of RenderView.
150 content::P2PSocketDispatcher* p2p_socket_dispatcher_; 156 content::P2PSocketDispatcher* p2p_socket_dispatcher_;
151 157
152 // We own network_manager_, must be deleted on the worker thread. 158 // We own network_manager_, must be deleted on the worker thread.
153 content::IpcNetworkManager* network_manager_; 159 content::IpcNetworkManager* network_manager_;
154 160
155 scoped_ptr<content::IpcPacketSocketFactory> socket_factory_; 161 scoped_ptr<content::IpcPacketSocketFactory> socket_factory_;
156 162
157 scoped_refptr<VideoCaptureImplManager> vc_manager_; 163 scoped_refptr<VideoCaptureImplManager> vc_manager_;
158 164
159 // peer_connection_handler_ is a weak reference, owned by WebKit. It's valid 165 // peer_connection_handlers_ contains raw references, owned by WebKit. A
160 // until stop is called on it (which will call ClosePeerConnection on us). 166 // pointer is valid until stop is called on the object (which will call
161 // TODO(grunell): Support several PeerConnectionsHandlers. 167 // ClosePeerConnection on us and we remove the pointer).
162 PeerConnectionHandler* peer_connection_handler_; 168 std::list<PeerConnectionHandlerBase*> peer_connection_handlers_;
163 169
164 // We keep a list of the generated local tracks, so that we can add capture 170 // We keep a list of the generated local tracks, so that we can add capture
165 // devices when generated and also use them for recording. 171 // devices when generated and also use them for recording.
166 typedef talk_base::scoped_refptr<webrtc::MediaStreamTrackInterface> 172 typedef talk_base::scoped_refptr<webrtc::MediaStreamTrackInterface>
167 MediaStreamTrackPtr; 173 MediaStreamTrackPtr;
168 typedef std::map<std::string, MediaStreamTrackPtr> MediaStreamTrackPtrMap; 174 typedef std::map<std::string, MediaStreamTrackPtr> MediaStreamTrackPtrMap;
169 MediaStreamTrackPtrMap local_tracks_; 175 MediaStreamTrackPtrMap local_tracks_;
170 176
171 talk_base::scoped_refptr<VideoRendererWrapper> video_renderer_; 177 // Native PeerConnection only supports 1:1 mapping between MediaStream and
172 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; 178 // video tag/renderer, so we restrict to this too. The key in
179 // VideoRendererMap is the stream label.
180 typedef talk_base::scoped_refptr<VideoRendererWrapper> VideoRendererPtr;
181 typedef std::pair<VideoRendererPtr, PeerConnectionHandlerBase*>
182 VideoRendererPair;
183 typedef std::map<std::string, VideoRendererPair> VideoRendererMap;
184 VideoRendererMap video_renderers_;
173 185
174 // PeerConnection threads. signaling_thread_ is created from the 186 // PeerConnection threads. signaling_thread_ is created from the
175 // "current" chrome thread. 187 // "current" chrome thread.
176 talk_base::Thread* signaling_thread_; 188 talk_base::Thread* signaling_thread_;
177 talk_base::Thread* worker_thread_; 189 talk_base::Thread* worker_thread_;
178 base::Thread chrome_worker_thread_; 190 base::Thread chrome_worker_thread_;
179 191
180 static int next_request_id_; 192 static int next_request_id_;
181 typedef std::map<int, WebKit::WebUserMediaRequest> MediaRequestMap; 193 typedef std::map<int, WebKit::WebUserMediaRequest> MediaRequestMap;
182 MediaRequestMap user_media_requests_; 194 MediaRequestMap user_media_requests_;
183 195
184 DISALLOW_COPY_AND_ASSIGN(MediaStreamImpl); 196 DISALLOW_COPY_AND_ASSIGN(MediaStreamImpl);
185 }; 197 };
186 198
187 #endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_IMPL_H_ 199 #endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698