Index: content/public/renderer/media_stream_video_sink.h |
diff --git a/content/public/renderer/media_stream_video_sink.h b/content/public/renderer/media_stream_video_sink.h |
index b1dda9c46fa42c59f371efc1e966906642c5a68f..e636d6c3cfb78dd02230e62a6bc739d9ee806762 100644 |
--- a/content/public/renderer/media_stream_video_sink.h |
+++ b/content/public/renderer/media_stream_video_sink.h |
@@ -13,10 +13,7 @@ |
#include "content/common/media/video_capture.h" |
#include "content/public/renderer/media_stream_sink.h" |
#include "media/base/video_capturer_source.h" |
- |
-namespace blink { |
-class WebMediaStreamTrack; |
-} |
+#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" |
namespace content { |
@@ -25,25 +22,37 @@ namespace content { |
// http://dev.w3.org/2011/webrtc/editor/getusermedia.html |
// All methods calls will be done from the main render thread. |
class CONTENT_EXPORT MediaStreamVideoSink : public MediaStreamSink { |
- public: |
- // An implementation of MediaStreamVideoSink should call AddToVideoTrack when |
+ protected: |
+ MediaStreamVideoSink(); |
+ ~MediaStreamVideoSink() override; |
+ |
+ // An implementation of MediaStreamVideoSink should call ConnectToTrack when |
// it is ready to receive data from a video track. Before the implementation |
- // is destroyed, RemoveFromVideoTrack must be called. |
+ // is destroyed, DisconnectFromTrack must be called. This MediaStreamVideoSink |
+ // base class holds a reference to the WebMediaStreamTrack until |
+ // DisconnectFromTrack is called. |
// |
// Calls to these methods must be done on the main render thread. |
// Note that |callback| for frame delivery happens on the IO thread. |
// |
- // Calling RemoveFromVideoTrack also not stop frame delivery through the |
- // callback immediately because it may happen on another thread. |
- // The added callback will be reset on the render thread. |
- static void AddToVideoTrack(MediaStreamVideoSink* sink, |
- const VideoCaptureDeliverFrameCB& callback, |
- const blink::WebMediaStreamTrack& track); |
- static void RemoveFromVideoTrack(MediaStreamVideoSink* sink, |
- const blink::WebMediaStreamTrack& track); |
- |
- protected: |
- ~MediaStreamVideoSink() override {} |
+ // Warning: Calling DisconnectFromTrack does not immediately stop frame |
+ // delivery through the |callback|, since frames are being delivered on a |
+ // different thread. |
+ void ConnectToTrack(const blink::WebMediaStreamTrack& track, |
+ const VideoCaptureDeliverFrameCB& callback); |
+ void DisconnectFromTrack(); |
+ |
+ // Returns true after ConnectToTrack() is called, and false after |
+ // DisconnectFromTrack(). |
+ bool is_connected() const { return !connected_track_.isNull(); } |
+ |
+ // Requests the source send a frame "soon" (e.g., to resolve picture loss or |
+ // quality issues). |
+ void RequestRefreshFrame(); |
+ |
+ private: |
+ // Set by ConnectToTrack() and cleared by DisconnectFromTrack(). |
+ blink::WebMediaStreamTrack connected_track_; |
emircan
2016/04/05 19:30:39
I am not sure if it is to safe to hold onto this o
miu
2016/04/05 20:25:01
Good point. Done.
|
}; |