Index: services/video_capture/device_media_to_mojo_adapter.cc |
diff --git a/services/video_capture/device_media_to_mojo_adapter.cc b/services/video_capture/device_media_to_mojo_adapter.cc |
index a68c87fbb6b1e19c1fd14cebd438103079f7631b..ea7656a2efa153af72827e4d57c8035cc10fcfd5 100644 |
--- a/services/video_capture/device_media_to_mojo_adapter.cc |
+++ b/services/video_capture/device_media_to_mojo_adapter.cc |
@@ -11,6 +11,14 @@ |
#include "media/capture/video/video_capture_jpeg_decoder.h" |
#include "services/video_capture/receiver_mojo_to_media_adapter.h" |
+namespace { |
+ |
+// The maximum number of video frame buffers in-flight at any one time. |
+// If all buffers are still in use by consumers when new frames are produced |
+// those frames get dropped. |
+static const int kMaxBufferCount = 3; |
+} |
+ |
namespace video_capture { |
DeviceMediaToMojoAdapter::DeviceMediaToMojoAdapter( |
@@ -22,7 +30,8 @@ DeviceMediaToMojoAdapter::DeviceMediaToMojoAdapter( |
device_running_(false) {} |
DeviceMediaToMojoAdapter::~DeviceMediaToMojoAdapter() { |
- Stop(); |
+ if (device_running_) |
+ device_->StopAndDeAllocate(); |
} |
void DeviceMediaToMojoAdapter::Start( |
@@ -36,12 +45,11 @@ void DeviceMediaToMojoAdapter::Start( |
base::MakeUnique<ReceiverMojoToMediaAdapter>(std::move(receiver)); |
// Create a dedicated buffer pool for the device usage session. |
- const int kMaxBufferCount = 2; |
auto buffer_tracker_factory = |
base::MakeUnique<media::VideoCaptureBufferTrackerFactoryImpl>(); |
scoped_refptr<media::VideoCaptureBufferPool> buffer_pool( |
new media::VideoCaptureBufferPoolImpl(std::move(buffer_tracker_factory), |
- kMaxBufferCount)); |
+ max_buffer_pool_buffer_count())); |
auto device_client = base::MakeUnique<media::VideoCaptureDeviceClient>( |
std::move(media_receiver), buffer_pool, jpeg_decoder_factory_callback_); |
@@ -50,15 +58,26 @@ void DeviceMediaToMojoAdapter::Start( |
device_running_ = true; |
} |
+void DeviceMediaToMojoAdapter::OnReceiverReportingUtilization( |
+ int32_t frame_feedback_id, |
+ double utilization) { |
+ device_->OnUtilizationReport(frame_feedback_id, utilization); |
+} |
+ |
void DeviceMediaToMojoAdapter::Stop() { |
if (device_running_ == false) |
return; |
- device_->StopAndDeAllocate(); |
device_running_ = false; |
+ device_->StopAndDeAllocate(); |
} |
void DeviceMediaToMojoAdapter::OnClientConnectionErrorOrClose() { |
Stop(); |
} |
+// static |
+int DeviceMediaToMojoAdapter::max_buffer_pool_buffer_count() { |
+ return kMaxBufferCount; |
+} |
+ |
} // namespace video_capture |