| Index: content/renderer/media/webrtc/media_stream_remote_video_source.h
|
| diff --git a/content/renderer/media/webrtc/media_stream_remote_video_source.h b/content/renderer/media/webrtc/media_stream_remote_video_source.h
|
| index 5591b3ec4cc99e7a69bfbe88c7c03b615b958b63..75364b4250b822e5d834bd04b25bc814d4f08721 100644
|
| --- a/content/renderer/media/webrtc/media_stream_remote_video_source.h
|
| +++ b/content/renderer/media/webrtc/media_stream_remote_video_source.h
|
| @@ -5,7 +5,8 @@
|
| #ifndef CONTENT_RENDERER_MEDIA_WEBRTC_MEDIA_STREAM_REMOTE_VIDEO_SOURCE_H_
|
| #define CONTENT_RENDERER_MEDIA_WEBRTC_MEDIA_STREAM_REMOTE_VIDEO_SOURCE_H_
|
|
|
| -#include "base/threading/thread_checker.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +#include "base/single_thread_task_runner.h"
|
| #include "content/common/content_export.h"
|
| #include "content/renderer/media/media_stream_video_source.h"
|
| #include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
|
| @@ -18,11 +19,37 @@ namespace content {
|
| // to make sure there is no difference between a video track where the source is
|
| // a local source and a video track where the source is a remote video track.
|
| class CONTENT_EXPORT MediaStreamRemoteVideoSource
|
| - : public MediaStreamVideoSource,
|
| - NON_EXPORTED_BASE(public webrtc::ObserverInterface) {
|
| + : public MediaStreamVideoSource {
|
| public:
|
| - explicit MediaStreamRemoteVideoSource(
|
| - webrtc::VideoTrackInterface* remote_track);
|
| + class CONTENT_EXPORT Observer
|
| + : public base::RefCountedThreadSafe<Observer>,
|
| + NON_EXPORTED_BASE(public webrtc::ObserverInterface) {
|
| + public:
|
| + Observer(const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
|
| + webrtc::VideoTrackInterface* track);
|
| +
|
| + const scoped_refptr<webrtc::VideoTrackInterface>& track();
|
| + webrtc::MediaStreamTrackInterface::TrackState state() const;
|
| +
|
| + private:
|
| + friend class base::RefCountedThreadSafe<Observer>;
|
| + ~Observer() override;
|
| +
|
| + friend class MediaStreamRemoteVideoSource;
|
| + void SetSource(const base::WeakPtr<MediaStreamRemoteVideoSource>& source);
|
| +
|
| + // webrtc::ObserverInterface implementation.
|
| + void OnChanged() override;
|
| +
|
| + void OnChangedImpl(webrtc::MediaStreamTrackInterface::TrackState state);
|
| +
|
| + const scoped_refptr<base::SingleThreadTaskRunner> main_thread_;
|
| + base::WeakPtr<MediaStreamRemoteVideoSource> source_;
|
| + const scoped_refptr<webrtc::VideoTrackInterface> track_;
|
| + webrtc::MediaStreamTrackInterface::TrackState state_;
|
| + };
|
| +
|
| + MediaStreamRemoteVideoSource(const scoped_refptr<Observer>& observer);
|
| virtual ~MediaStreamRemoteVideoSource();
|
|
|
| protected:
|
| @@ -44,19 +71,16 @@ class CONTENT_EXPORT MediaStreamRemoteVideoSource
|
| webrtc::VideoRendererInterface* RenderInterfaceForTest();
|
|
|
| private:
|
| - // webrtc::ObserverInterface implementation.
|
| - void OnChanged() override;
|
| + friend class Observer;
|
| + void OnChanged(webrtc::MediaStreamTrackInterface::TrackState state);
|
|
|
| - scoped_refptr<webrtc::VideoTrackInterface> remote_track_;
|
| - webrtc::MediaStreamTrackInterface::TrackState last_state_;
|
| + scoped_refptr<Observer> observer_;
|
|
|
| // Internal class used for receiving frames from the webrtc track on a
|
| // libjingle thread and forward it to the IO-thread.
|
| class RemoteVideoSourceDelegate;
|
| scoped_refptr<RemoteVideoSourceDelegate> delegate_;
|
| -
|
| - // Bound to the render thread.
|
| - base::ThreadChecker thread_checker_;
|
| + base::WeakPtrFactory<MediaStreamRemoteVideoSource> weak_factory_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(MediaStreamRemoteVideoSource);
|
| };
|
|
|