Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Unified Diff: media/capture/video/video_capture_device_client.h

Issue 2518143004: [Mojo Video Capture] Replace RESOURCE_UTILIZATION with interface ReceiverLoadObserver (Closed)
Patch Set: Fixes for failing bots Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/capture/video/video_capture_device_client.h
diff --git a/media/capture/video/video_capture_device_client.h b/media/capture/video/video_capture_device_client.h
index 9a36f9d5425e58ae8c594ed103eb7633fdd56760..f24e7bfcebae338a79e0233530812d2c0c452458 100644
--- a/media/capture/video/video_capture_device_client.h
+++ b/media/capture/video/video_capture_device_client.h
@@ -15,10 +15,10 @@
#include "base/memory/weak_ptr.h"
#include "media/capture/capture_export.h"
#include "media/capture/video/video_capture_device.h"
+#include "media/capture/video/video_frame_receiver.h"
namespace media {
class VideoCaptureBufferPool;
-class VideoFrameReceiver;
class VideoCaptureJpegDecoder;
using VideoCaptureJpegDecoderFactoryCB =
@@ -40,33 +40,40 @@ using VideoCaptureJpegDecoderFactoryCB =
// manages the necessary entities to interact with the GPU process, notably an
// offscreen Context to avoid janking the UI thread.
class CAPTURE_EXPORT VideoCaptureDeviceClient
- : public media::VideoCaptureDevice::Client,
+ : public VideoCaptureDevice::Client,
+ public FrameReceiverObserver,
public base::SupportsWeakPtr<VideoCaptureDeviceClient> {
public:
VideoCaptureDeviceClient(
std::unique_ptr<VideoFrameReceiver> receiver,
scoped_refptr<VideoCaptureBufferPool> buffer_pool,
- const VideoCaptureJpegDecoderFactoryCB& jpeg_decoder_factory);
+ const VideoCaptureJpegDecoderFactoryCB& jpeg_decoder_factory,
+ scoped_refptr<base::SingleThreadTaskRunner>
+ utilization_reporting_task_runner);
~VideoCaptureDeviceClient() override;
+ void SetConsumerLoadObserver(ConsumerLoadObserver* load_observer);
+
// VideoCaptureDevice::Client implementation.
void OnIncomingCapturedData(const uint8_t* data,
int length,
const media::VideoCaptureFormat& frame_format,
int rotation,
base::TimeTicks reference_time,
- base::TimeDelta timestamp) override;
+ base::TimeDelta timestamp,
+ int frame_id = 0) override;
std::unique_ptr<Buffer> ReserveOutputBuffer(
const gfx::Size& dimensions,
media::VideoPixelFormat format,
media::VideoPixelStorage storage) override;
void OnIncomingCapturedBuffer(std::unique_ptr<Buffer> buffer,
- const media::VideoCaptureFormat& frame_format,
+ const VideoCaptureFormat& format,
base::TimeTicks reference_time,
- base::TimeDelta timestamp) override;
- void OnIncomingCapturedVideoFrame(
- std::unique_ptr<Buffer> buffer,
- scoped_refptr<media::VideoFrame> frame) override;
+ base::TimeDelta timestamp,
+ int frame_id) override;
+ void OnIncomingCapturedVideoFrame(std::unique_ptr<Buffer> buffer,
+ scoped_refptr<media::VideoFrame> frame,
+ int frame_id) override;
std::unique_ptr<Buffer> ResurrectLastOutputBuffer(
const gfx::Size& dimensions,
media::VideoPixelFormat format,
@@ -76,6 +83,10 @@ class CAPTURE_EXPORT VideoCaptureDeviceClient
void OnLog(const std::string& message) override;
double GetBufferPoolUtilization() const override;
+ // FrameReceiverObserver implementation.
+ void OnReceiverReportingUtilization(int buffer_id,
+ double utilization) override;
+
private:
// Reserve output buffer into which I420 contents can be copied directly.
// The dimensions of the frame is described by |dimensions|, and requested
@@ -99,7 +110,11 @@ class CAPTURE_EXPORT VideoCaptureDeviceClient
int length,
const VideoCaptureFormat& frame_format,
base::TimeTicks reference_time,
- base::TimeDelta timestamp);
+ base::TimeDelta timestamp,
+ int frame_id);
+
+ void EraseEntryFromBufferIdToFrameIdMap(int buffer_id_to_drop);
+ void AddEntryToBufferIdToFrameIdMap(int buffer_id, int frame_id);
// The receiver to which we post events.
const std::unique_ptr<VideoFrameReceiver> receiver_;
@@ -113,6 +128,14 @@ class CAPTURE_EXPORT VideoCaptureDeviceClient
// The pool of shared-memory buffers used for capturing.
const scoped_refptr<VideoCaptureBufferPool> buffer_pool_;
+ ConsumerLoadObserver* optional_load_observer_;
+ // Read and write access to |buffer_id_to_frame_id_map_| is sequentialized to
+ // |utilization_reporting_task_runner_|, since the corresponding calls may
+ // arrive from different threads.
+ const scoped_refptr<base::SingleThreadTaskRunner>
+ utilization_reporting_task_runner_;
+ std::map<int, int> buffer_id_to_frame_id_map_;
miu 2016/12/01 05:25:18 Instead of this map, can you tag the frame feedbac
chfremer 2016/12/02 01:28:29 Excellent suggestions. This greatly simplifies thi
+
#if DCHECK_IS_ON()
// Counter used to track the number of times consecutive capture buffers are
// dropped.

Powered by Google App Engine
This is Rietveld 408576698