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

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

Issue 2902733003: RemoteMediaStreamImpl using WebRtcMediaStreamTrackMap. (Closed)
Patch Set: "Must be invoked on the main thread." 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
« no previous file with comments | « no previous file | content/renderer/media/remote_media_stream_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..9922eb52fa436de459b2711fa3ac30e5aabd27f1 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,87 +16,56 @@
#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.
+ using AdapterRefMap =
+ std::map<std::string,
+ std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef>>;
+
RemoteMediaStreamImpl(
const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
+ const scoped_refptr<WebRtcMediaStreamTrackAdapterMap>& track_adapter_map,
webrtc::MediaStreamInterface* webrtc_stream);
~RemoteMediaStreamImpl();
const blink::WebMediaStream& webkit_stream() { return webkit_stream_; }
- const scoped_refptr<webrtc::MediaStreamInterface>& webrtc_stream() {
- return observer_->stream();
- }
+ const scoped_refptr<webrtc::MediaStreamInterface>& webrtc_stream();
private:
- typedef std::vector<scoped_refptr<RemoteAudioTrackAdapter>>
- RemoteAudioTrackAdapters;
- typedef std::vector<scoped_refptr<RemoteVideoTrackAdapter>>
- RemoteVideoTrackAdapters;
-
- void InitializeOnMainThread(const std::string& label);
-
- class Observer
- : NON_EXPORTED_BASE(public webrtc::ObserverInterface),
- public base::RefCountedThreadSafe<Observer> {
- public:
- Observer(const base::WeakPtr<RemoteMediaStreamImpl>& media_stream,
- const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
- webrtc::MediaStreamInterface* webrtc_stream);
-
- const scoped_refptr<webrtc::MediaStreamInterface>& stream() const {
- return webrtc_stream_;
- }
-
- const scoped_refptr<base::SingleThreadTaskRunner>& main_thread() const {
- return main_thread_;
- }
-
- void InitializeOnMainThread(const std::string& label);
-
- // Uninitializes the observer, unregisteres from receiving notifications
- // and releases the webrtc stream.
- // Note: Must be called from the main thread before releasing the main
- // reference.
- void Unregister();
-
- private:
- friend class base::RefCountedThreadSafe<Observer>;
- ~Observer() override;
-
- // webrtc::ObserverInterface implementation.
- void OnChanged() override;
-
- void OnChangedOnMainThread(
- std::unique_ptr<RemoteAudioTrackAdapters> audio_tracks,
- std::unique_ptr<RemoteVideoTrackAdapters> video_tracks);
+ class Observer;
- base::WeakPtr<RemoteMediaStreamImpl> media_stream_;
- const scoped_refptr<base::SingleThreadTaskRunner> main_thread_;
- scoped_refptr<webrtc::MediaStreamInterface> webrtc_stream_;
- };
+ void InitializeOnMainThread(const std::string& label,
+ AdapterRefMap track_adapter_refs,
+ size_t audio_track_count,
+ size_t video_track_count);
- 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') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698