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

Unified Diff: content/renderer/media/remote_media_stream_impl.h

Issue 2902733003: RemoteMediaStreamImpl using WebRtcMediaStreamTrackMap. (Closed)
Patch Set: Created 3 years, 6 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 side-by-side diff with in-line comments
Download patch
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_;
« no previous file with comments | « no previous file | content/renderer/media/remote_media_stream_impl.cc » ('j') | content/renderer/media/remote_media_stream_impl.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698