Chromium Code Reviews| 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 8aaf97cdc9dc142489b2b89d41f8ce36d8d03433..5c0f6406946525570c8153ae480104cf831c2d4c 100644 |
| --- a/content/browser/renderer_host/media/video_capture_controller.h |
| +++ b/content/browser/renderer_host/media/video_capture_controller.h |
| @@ -51,6 +51,7 @@ |
| #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 "media/capture/video/video_capture_device_client.h" |
| #include "media/capture/video/video_frame_receiver.h" |
| #include "media/capture/video_capture_types.h" |
| @@ -72,9 +73,17 @@ class CONTENT_EXPORT VideoCaptureController : public media::VideoFrameReceiver { |
| base::WeakPtr<VideoCaptureController> GetWeakPtrForIOThread(); |
| + // Factory code creating instances of VideoCaptureController may optionally |
| + // set a FrameReceiverObserver. Setting the observer is done in this method |
| + // separate from the constructor to allow clients to create and use instances |
| + // before they can provide the observer. (This is the case with |
| + // VideoCaptureManager). |
| + void SetFrameReceiverObserver( |
| + media::FrameReceiverObserver* frame_receiver_observer); |
| + |
| // Return a new VideoCaptureDeviceClient to forward capture events to this |
| // instance. |
| - std::unique_ptr<media::VideoCaptureDevice::Client> NewDeviceClient(); |
| + std::unique_ptr<media::VideoCaptureDeviceClient> NewDeviceClient(); |
| // Start video capturing and try to use the resolution specified in |params|. |
| // Buffers will be shared to the client as necessary. The client will continue |
| @@ -139,6 +148,31 @@ class CONTENT_EXPORT VideoCaptureController : public media::VideoFrameReceiver { |
| struct ControllerClient; |
| typedef std::list<std::unique_ptr<ControllerClient>> ControllerClients; |
| + class BufferState { |
| + public: |
| + BufferState(); |
|
miu
2016/12/01 05:25:17
IIRC, you don't need the zero-arg constructor if y
chfremer
2016/12/02 01:28:28
Done.
|
| + explicit BufferState( |
| + int buffer_id, |
| + media::FrameReceiverObserver* frame_receiver_observer, |
| + const scoped_refptr<media::VideoCaptureBufferPool>& buffer_pool, |
| + const scoped_refptr<media::VideoFrame>& frame); |
| + BufferState(BufferState&& other); |
| + ~BufferState(); |
| + BufferState& operator=(BufferState&& other); |
| + void RecordConsumerUtilization(double utilization); |
| + void IncreaseConsumerCount(); |
| + void DecreaseConsumerCount(); |
| + bool HasZeroConsumerHoldCount(); |
| + |
| + private: |
| + int buffer_id_; |
|
miu
2016/12/01 05:25:17
If you can eliminate the zero-arg ctor, several of
chfremer
2016/12/02 01:28:28
Done.
|
| + media::FrameReceiverObserver* frame_receiver_observer_; |
| + scoped_refptr<media::VideoCaptureBufferPool> buffer_pool_; |
| + scoped_refptr<media::VideoFrame> frame_; |
| + double max_consumer_utilization_; |
| + int consumer_hold_count_; |
| + }; |
| + |
| // Notify renderer that a new buffer has been created. |
| void DoNewBufferOnIOThread(ControllerClient* client, |
| media::VideoCaptureDevice::Client::Buffer* buffer, |
| @@ -156,6 +190,10 @@ class CONTENT_EXPORT VideoCaptureController : public media::VideoFrameReceiver { |
| // The pool of shared-memory buffers used for capturing. |
| const scoped_refptr<media::VideoCaptureBufferPool> buffer_pool_; |
| + media::FrameReceiverObserver* frame_receiver_observer_; |
| + |
| + std::map<int, BufferState> buffer_id_to_state_map_; |
|
miu
2016/12/01 05:25:17
naming nit: Up to you, but |buffer_states_| or |bu
chfremer
2016/12/02 01:28:28
I could live with |buffer_states_|, but I prefer |
|
| + |
| // All clients served by this controller. |
| ControllerClients controller_clients_; |