| Index: content/browser/renderer_host/media/video_capture_controller.h
|
| diff --git a/content/browser/renderer_host/media/video_capture_controller.h b/content/browser/renderer_host/media/video_capture_controller.h
|
| index 0ba1cfb95041653499060596087836132428d2ec..470bba623a2b319f1a8280d20d14e6b36c972e60 100644
|
| --- a/content/browser/renderer_host/media/video_capture_controller.h
|
| +++ b/content/browser/renderer_host/media/video_capture_controller.h
|
| @@ -13,9 +13,11 @@
|
| #include "base/memory/ref_counted.h"
|
| #include "base/memory/weak_ptr.h"
|
| #include "base/process/process.h"
|
| +#include "content/browser/renderer_host/media/buildable_video_capture_device.h"
|
| #include "content/browser/renderer_host/media/video_capture_controller_event_handler.h"
|
| #include "content/common/content_export.h"
|
| #include "content/common/media/video_capture.h"
|
| +#include "content/public/common/media_stream_request.h"
|
| #include "media/capture/video/video_frame_receiver.h"
|
| #include "media/capture/video_capture_types.h"
|
|
|
| @@ -23,10 +25,23 @@ namespace content {
|
|
|
| // Implementation of media::VideoFrameReceiver that distributes received frames
|
| // to potentially multiple connected clients.
|
| -class CONTENT_EXPORT VideoCaptureController : public media::VideoFrameReceiver {
|
| +// A call to CreateAndStartDeviceAsync() asynchronously brings up the device. If
|
| +// CreateAndStartDeviceAsync() has been called, ReleaseDeviceAsync() must be
|
| +// called before releasing the instance.
|
| +// Instances must be RefCountedThreadSafe, because an owner
|
| +// (VideoCaptureManager) wants to be able to release its reference during an
|
| +// (asynchronously executing) run of CreateAndStartDeviceAsync(). To this end,
|
| +// the owner passes in the shared ownership as part of |context_reference| into
|
| +// CreateAndStartDeviceAsync().
|
| +class CONTENT_EXPORT VideoCaptureController
|
| + : public media::VideoFrameReceiver,
|
| + public base::RefCountedThreadSafe<VideoCaptureController> {
|
| public:
|
| - VideoCaptureController();
|
| - ~VideoCaptureController() override;
|
| + VideoCaptureController(
|
| + const std::string& device_id,
|
| + MediaStreamType stream_type,
|
| + const media::VideoCaptureParams& params,
|
| + std::unique_ptr<BuildableVideoCaptureDevice> buildable_device);
|
|
|
| base::WeakPtr<VideoCaptureController> GetWeakPtrForIOThread();
|
|
|
| @@ -104,7 +119,30 @@ class CONTENT_EXPORT VideoCaptureController : public media::VideoFrameReceiver {
|
| void OnStarted() override;
|
| void OnStartedUsingGpuDecode() override;
|
|
|
| + void CreateAndStartDeviceAsync(
|
| + const media::VideoCaptureParams& params,
|
| + BuildableVideoCaptureDevice::Callbacks* callbacks,
|
| + base::OnceClosure done_cb);
|
| + void ReleaseDeviceAsync(base::OnceClosure done_cb);
|
| + bool IsDeviceAlive() const;
|
| + void GetPhotoCapabilities(
|
| + media::VideoCaptureDevice::GetPhotoCapabilitiesCallback callback) const;
|
| + void SetPhotoOptions(
|
| + media::mojom::PhotoSettingsPtr settings,
|
| + media::VideoCaptureDevice::SetPhotoOptionsCallback callback);
|
| + void TakePhoto(media::VideoCaptureDevice::TakePhotoCallback callback);
|
| + void MaybeSuspend();
|
| + void Resume();
|
| + void RequestRefreshFrame();
|
| + void SetDesktopCaptureWindowIdAsync(gfx::NativeViewId window_id,
|
| + base::OnceClosure done_cb);
|
| + int serial_id() const { return serial_id_; }
|
| + const std::string& device_id() const { return device_id_; }
|
| + MediaStreamType stream_type() const { return stream_type_; }
|
| + const media::VideoCaptureParams& parameters() const { return parameters_; }
|
| +
|
| private:
|
| + friend class base::RefCountedThreadSafe<VideoCaptureController>;
|
| struct ControllerClient;
|
| typedef std::list<std::unique_ptr<ControllerClient>> ControllerClients;
|
|
|
| @@ -153,6 +191,8 @@ class CONTENT_EXPORT VideoCaptureController : public media::VideoFrameReceiver {
|
| buffer_read_permission_;
|
| };
|
|
|
| + ~VideoCaptureController() override;
|
| +
|
| // Find a client of |id| and |handler| in |clients|.
|
| ControllerClient* FindClient(VideoCaptureControllerID id,
|
| VideoCaptureControllerEventHandler* handler,
|
| @@ -178,6 +218,12 @@ class CONTENT_EXPORT VideoCaptureController : public media::VideoFrameReceiver {
|
| VideoCaptureControllerID id)>;
|
| void PerformForClientsWithOpenSession(EventHandlerAction action);
|
|
|
| + const int serial_id_;
|
| + const std::string device_id_;
|
| + const MediaStreamType stream_type_;
|
| + const media::VideoCaptureParams parameters_;
|
| + std::unique_ptr<BuildableVideoCaptureDevice> buildable_device_;
|
| +
|
| std::unique_ptr<media::VideoFrameConsumerFeedbackObserver>
|
| consumer_feedback_observer_;
|
|
|
|
|