Chromium Code Reviews| Index: content/renderer/media/remote_media_stream_impl.h |
| diff --git a/content/renderer/media/remote_media_stream_impl.h b/content/renderer/media/remote_media_stream_impl.h |
| index 2106ad1cc9ef19393d7fc062f4ec5fae2352e435..d671fe4aa163cb87b00ebafc6c4cb0905b6c2093 100644 |
| --- a/content/renderer/media/remote_media_stream_impl.h |
| +++ b/content/renderer/media/remote_media_stream_impl.h |
| @@ -5,7 +5,9 @@ |
| #ifndef CONTENT_RENDERER_MEDIA_REMOTE_MEDIA_STREAM_IMPL_H_ |
| #define CONTENT_RENDERER_MEDIA_REMOTE_MEDIA_STREAM_IMPL_H_ |
| +#include <map> |
| #include <memory> |
| +#include <string> |
| #include "base/compiler_specific.h" |
| #include "base/macros.h" |
| @@ -14,22 +16,27 @@ |
| #include "base/single_thread_task_runner.h" |
| #include "base/threading/thread_checker.h" |
| #include "content/common/content_export.h" |
| +#include "content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.h" |
| #include "third_party/WebKit/public/platform/WebMediaStream.h" |
| #include "third_party/webrtc/api/mediastreaminterface.h" |
| namespace content { |
| -class RemoteAudioTrackAdapter; |
| -class RemoteVideoTrackAdapter; |
| - |
| // RemoteMediaStreamImpl serves as a container and glue between remote webrtc |
| // MediaStreams and WebKit MediaStreams. For each remote MediaStream received |
| // on a PeerConnection a RemoteMediaStreamImpl instance is created and |
| // owned by RtcPeerConnection. |
| class CONTENT_EXPORT RemoteMediaStreamImpl { |
| public: |
| + // A map between track IDs and references to track adapters. |
| + typedef std::map< |
|
Guido Urdaneta
2017/06/12 14:25:29
using instead of typedef. see http://chromium-cpp.
hbos_chromium
2017/06/12 15:05:20
Done.
|
| + std::string, |
| + std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef>> |
| + AdapterRefMap; |
| + |
| RemoteMediaStreamImpl( |
| const scoped_refptr<base::SingleThreadTaskRunner>& main_thread, |
| + const scoped_refptr<WebRtcMediaStreamTrackAdapterMap>& track_adapter_map, |
| webrtc::MediaStreamInterface* webrtc_stream); |
| ~RemoteMediaStreamImpl(); |
| @@ -39,12 +46,10 @@ class CONTENT_EXPORT RemoteMediaStreamImpl { |
| } |
| private: |
| - typedef std::vector<scoped_refptr<RemoteAudioTrackAdapter>> |
| - RemoteAudioTrackAdapters; |
| - typedef std::vector<scoped_refptr<RemoteVideoTrackAdapter>> |
| - RemoteVideoTrackAdapters; |
| - |
| - void InitializeOnMainThread(const std::string& label); |
| + void InitializeOnMainThread(const std::string& label, |
| + AdapterRefMap track_adapter_refs, |
| + size_t audio_track_count, |
| + size_t video_track_count); |
| class Observer |
|
Guido Urdaneta
2017/06/12 14:25:28
Can you move the definition of this class to the .
hbos_chromium
2017/06/12 15:05:20
Done.
|
| : NON_EXPORTED_BASE(public webrtc::ObserverInterface), |
| @@ -52,6 +57,8 @@ class CONTENT_EXPORT RemoteMediaStreamImpl { |
| public: |
| Observer(const base::WeakPtr<RemoteMediaStreamImpl>& media_stream, |
| const scoped_refptr<base::SingleThreadTaskRunner>& main_thread, |
| + const scoped_refptr<WebRtcMediaStreamTrackAdapterMap>& |
| + track_adapter_map, |
| webrtc::MediaStreamInterface* webrtc_stream); |
| const scoped_refptr<webrtc::MediaStreamInterface>& stream() const { |
| @@ -62,7 +69,10 @@ class CONTENT_EXPORT RemoteMediaStreamImpl { |
| return main_thread_; |
| } |
| - void InitializeOnMainThread(const std::string& label); |
| + void InitializeOnMainThread(const std::string& label, |
| + AdapterRefMap track_adapter_refs, |
| + size_t audio_track_count, |
| + size_t video_track_count); |
| // Uninitializes the observer, unregisteres from receiving notifications |
| // and releases the webrtc stream. |
| @@ -74,27 +84,36 @@ class CONTENT_EXPORT RemoteMediaStreamImpl { |
| friend class base::RefCountedThreadSafe<Observer>; |
| ~Observer() override; |
| + void TrackAdded(webrtc::MediaStreamTrackInterface* webrtc_track); |
| + void TrackRemoved(webrtc::MediaStreamTrackInterface* webrtc_track); |
| + |
| // webrtc::ObserverInterface implementation. |
| void OnChanged() override; |
| - void OnChangedOnMainThread( |
| - std::unique_ptr<RemoteAudioTrackAdapters> audio_tracks, |
| - std::unique_ptr<RemoteVideoTrackAdapters> video_tracks); |
| + void OnChangedOnMainThread(AdapterRefMap new_adapter_refs); |
| base::WeakPtr<RemoteMediaStreamImpl> media_stream_; |
| const scoped_refptr<base::SingleThreadTaskRunner> main_thread_; |
| + const scoped_refptr<WebRtcMediaStreamTrackAdapterMap> track_adapter_map_; |
| scoped_refptr<webrtc::MediaStreamInterface> webrtc_stream_; |
| }; |
| - void OnChanged(std::unique_ptr<RemoteAudioTrackAdapters> audio_tracks, |
| - std::unique_ptr<RemoteVideoTrackAdapters> video_tracks); |
| + void OnChanged(AdapterRefMap new_adapter_refs); |
| const scoped_refptr<base::SingleThreadTaskRunner> signaling_thread_; |
| scoped_refptr<Observer> observer_; |
| - RemoteVideoTrackAdapters video_track_observers_; |
| - RemoteAudioTrackAdapters audio_track_observers_; |
| + // The map and owner of all track adapters for the associated peer connection. |
| + // When a track is added or removed from this stream, the map provides us with |
| + // a reference to the corresponding track adapter, creating a new one if |
| + // necessary. |
| + scoped_refptr<WebRtcMediaStreamTrackAdapterMap> track_adapter_map_; |
| blink::WebMediaStream webkit_stream_; |
| + // A map between track IDs and references to track adapters for any tracks |
| + // that belong to this stream. Keeping an adapter reference alive ensures the |
| + // adapter is not disposed by the |track_adapter_map_|, as is necessary for as |
| + // long as the webrtc layer track is in use by the webrtc layer stream. |
| + AdapterRefMap adapter_refs_; |
| base::WeakPtrFactory<RemoteMediaStreamImpl> weak_factory_; |