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 8eaa31abd2f81322ba46b447c71fba0c7d622c07..62cd44b1888df0de8712ab9f0649aac699404e95 100644 |
| --- a/content/browser/renderer_host/media/video_capture_controller.h |
| +++ b/content/browser/renderer_host/media/video_capture_controller.h |
| @@ -134,37 +134,48 @@ class CONTENT_EXPORT VideoCaptureController : public media::VideoFrameReceiver { |
| scoped_refptr<media::VideoFrame> frame) override; |
| void OnError() override; |
| void OnLog(const std::string& message) override; |
| - void OnBufferDestroyed(int buffer_id_to_drop) override; |
| + void OnBufferRetired(int buffer_id) override; |
| private: |
| struct ControllerClient; |
| typedef std::list<std::unique_ptr<ControllerClient>> ControllerClients; |
| - class BufferState { |
| + class BufferContext { |
| public: |
| - explicit BufferState( |
| + explicit BufferContext( |
|
mcasas
2017/02/03 23:24:22
nit: Doesn't need to be explicit since it has > 1
chfremer
2017/02/06 18:16:35
Done.
|
| + int buffer_context_id, |
| int buffer_id, |
| - int frame_feedback_id, |
| media::VideoFrameConsumerFeedbackObserver* consumer_feedback_observer, |
| media::FrameBufferPool* frame_buffer_pool); |
| - ~BufferState(); |
| - BufferState(const BufferState& other); |
| + ~BufferContext(); |
| + BufferContext(const BufferContext& other); |
| + BufferContext& operator=(const BufferContext& other); |
| + int buffer_context_id() const { return buffer_context_id_; } |
| + int buffer_id() const { return buffer_id_; } |
| + bool is_retired() const { return is_retired_; } |
| + void set_is_retired() { is_retired_ = true; } |
| + void set_frame_feedback_id(int id) { frame_feedback_id_ = id; } |
| + void set_consumer_feedback_observer( |
| + media::VideoFrameConsumerFeedbackObserver* consumer_feedback_observer) { |
| + consumer_feedback_observer_ = consumer_feedback_observer; |
| + } |
| + void set_frame_buffer_pool(media::FrameBufferPool* frame_buffer_pool) { |
| + frame_buffer_pool_ = frame_buffer_pool; |
| + } |
| void RecordConsumerUtilization(double utilization); |
| void IncreaseConsumerCount(); |
| void DecreaseConsumerCount(); |
| bool HasZeroConsumerHoldCount(); |
| - void SetFrameFeedbackId(int id); |
| - void SetConsumerFeedbackObserver( |
| - media::VideoFrameConsumerFeedbackObserver* consumer_feedback_observer); |
| - void SetFrameBufferPool(media::FrameBufferPool* frame_buffer_pool); |
| private: |
| - const int buffer_id_; |
| - int frame_feedback_id_; |
| + int buffer_context_id_; |
|
mcasas
2017/02/03 23:24:22
Can be const
chfremer
2017/02/06 18:16:35
Assignment operator is needed for usage in std::ve
|
| + int buffer_id_; |
| + bool is_retired_ = false; |
| + int frame_feedback_id_ = 0; |
| media::VideoFrameConsumerFeedbackObserver* consumer_feedback_observer_; |
| media::FrameBufferPool* frame_buffer_pool_; |
| double max_consumer_utilization_; |
| - int consumer_hold_count_; |
| + int consumer_hold_count_ = 0; |
|
mcasas
2017/02/03 23:24:22
In general try to initialize only once, and by
pre
chfremer
2017/02/06 18:16:35
Done.
|
| }; |
| // Find a client of |id| and |handler| in |clients|. |
| @@ -176,12 +187,23 @@ class CONTENT_EXPORT VideoCaptureController : public media::VideoFrameReceiver { |
| ControllerClient* FindClient(int session_id, |
| const ControllerClients& clients); |
| + std::vector<BufferContext>::iterator FindBufferContextFromBufferContextId( |
| + int buffer_context_id); |
| + std::vector<BufferContext>::iterator FindUnretiredBufferContextFromBufferId( |
| + int buffer_id); |
| + |
| + void OnClientFinishedConsumingBuffer(ControllerClient* client, |
| + int buffer_id, |
| + double consumer_resource_utilization); |
| + void ReleaseBufferContext( |
| + const std::vector<BufferContext>::iterator& buffer_state_iter); |
|
mcasas
2017/02/03 23:24:22
Perhaps we could make a public
using BuferContext
chfremer
2017/02/06 18:16:35
To be honest, I am not currently a fan of the "usi
|
| + |
| std::unique_ptr<media::FrameBufferPool> frame_buffer_pool_; |
| std::unique_ptr<media::VideoFrameConsumerFeedbackObserver> |
| consumer_feedback_observer_; |
| - std::map<int, BufferState> buffer_id_to_state_map_; |
| + std::vector<BufferContext> buffer_contexts_; |
| // All clients served by this controller. |
| ControllerClients controller_clients_; |
| @@ -190,6 +212,8 @@ class CONTENT_EXPORT VideoCaptureController : public media::VideoFrameReceiver { |
| // state which stops the flow of data to clients. |
| VideoCaptureState state_; |
| + int next_buffer_context_id_ = 0; |
| + |
| // True if the controller has received a video frame from the device. |
| bool has_received_frames_; |