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 c59a3d5dcf82f8fd0262d07d16c7bdf27e9a4d4d..6824a84c4eee94e4c86e3a393eeebfdcb9ab3135 100644 |
--- a/content/browser/renderer_host/media/video_capture_controller.h |
+++ b/content/browser/renderer_host/media/video_capture_controller.h |
@@ -54,10 +54,6 @@ |
#include "media/capture/video/video_frame_receiver.h" |
#include "media/capture/video_capture_types.h" |
-namespace media { |
-class FrameBufferPool; |
-} |
- |
namespace content { |
class CONTENT_EXPORT VideoCaptureController : public media::VideoFrameReceiver { |
@@ -68,14 +64,6 @@ class CONTENT_EXPORT VideoCaptureController : public media::VideoFrameReceiver { |
base::WeakPtr<VideoCaptureController> GetWeakPtrForIOThread(); |
// Factory code creating instances of VideoCaptureController may optionally |
- // set a FrameBufferPool. Setting the host 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 SetFrameBufferPool( |
- std::unique_ptr<media::FrameBufferPool> frame_buffer_pool); |
- |
- // Factory code creating instances of VideoCaptureController may optionally |
// set a VideoFrameConsumerFeedbackObserver. 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 |
@@ -135,12 +123,17 @@ class CONTENT_EXPORT VideoCaptureController : public media::VideoFrameReceiver { |
bool has_received_frames() const { return has_received_frames_; } |
// Implementation of media::VideoFrameReceiver interface: |
- void OnIncomingCapturedVideoFrame( |
- media::VideoCaptureDevice::Client::Buffer buffer, |
- scoped_refptr<media::VideoFrame> frame) override; |
+ void OnNewBufferHandle( |
+ int buffer_id, |
+ std::unique_ptr<media::BufferHandleProvider> handle_provider) override; |
+ void OnFrameReadyInBuffer( |
+ int buffer_id, |
+ int frame_feedback_id, |
+ std::unique_ptr<media::Ownership> buffer_read_permission, |
+ media::mojom::VideoFrameInfoPtr frame_info) override; |
+ void OnBufferRetired(int buffer_id) override; |
void OnError() override; |
void OnLog(const std::string& message) override; |
- void OnBufferDestroyed(int buffer_id_to_drop) override; |
private: |
struct ControllerClient; |
@@ -150,26 +143,35 @@ class CONTENT_EXPORT VideoCaptureController : public media::VideoFrameReceiver { |
public: |
explicit BufferState( |
int buffer_id, |
- int frame_feedback_id, |
media::VideoFrameConsumerFeedbackObserver* consumer_feedback_observer, |
- media::FrameBufferPool* frame_buffer_pool); |
+ mojo::ScopedSharedBufferHandle handle); |
+ BufferState(BufferState&& other); |
~BufferState(); |
- BufferState(const BufferState& other); |
+ BufferState& operator=(BufferState&& other); |
+ |
+ int buffer_id() const { return buffer_id_; } |
+ bool is_retired() const { return is_retired_; } |
+ void set_read_permission( |
+ std::unique_ptr<media::Ownership> buffer_read_permission); |
+ void set_frame_feedback_id(int frame_feedback_id); |
+ void set_is_retired() { is_retired_ = true; } |
void RecordConsumerUtilization(double utilization); |
void IncreaseConsumerCount(); |
void DecreaseConsumerCount(); |
bool HasZeroConsumerHoldCount(); |
+ mojo::ScopedSharedBufferHandle CreateHandleCopy(); |
void SetConsumerFeedbackObserver( |
media::VideoFrameConsumerFeedbackObserver* consumer_feedback_observer); |
- void SetFrameBufferPool(media::FrameBufferPool* frame_buffer_pool); |
private: |
- const int buffer_id_; |
- const int frame_feedback_id_; |
+ int buffer_id_; |
+ bool is_retired_ = false; |
+ int frame_feedback_id_; |
media::VideoFrameConsumerFeedbackObserver* consumer_feedback_observer_; |
- media::FrameBufferPool* frame_buffer_pool_; |
+ mojo::ScopedSharedBufferHandle buffer_handle_; |
double max_consumer_utilization_; |
int consumer_hold_count_; |
+ std::unique_ptr<media::Ownership> buffer_read_permission_; |
}; |
// Find a client of |id| and |handler| in |clients|. |
@@ -181,12 +183,16 @@ class CONTENT_EXPORT VideoCaptureController : public media::VideoFrameReceiver { |
ControllerClient* FindClient(int session_id, |
const ControllerClients& clients); |
- std::unique_ptr<media::FrameBufferPool> frame_buffer_pool_; |
+ void OnClientFinishedConsumingBuffer(ControllerClient* client, |
+ int buffer_id, |
+ double consumer_resource_utilization); |
+ void ReleaseBufferState( |
+ const std::vector<BufferState>::iterator& buffer_state_iter); |
std::unique_ptr<media::VideoFrameConsumerFeedbackObserver> |
consumer_feedback_observer_; |
- std::map<int, BufferState> buffer_id_to_state_map_; |
+ std::vector<BufferState> buffer_states_; |
// All clients served by this controller. |
ControllerClients controller_clients_; |