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_; |