Index: media/capture/video/video_capture_device.h |
diff --git a/media/capture/video/video_capture_device.h b/media/capture/video/video_capture_device.h |
index 000b0febdb94c274900fd734eaf616fecde209ba..d5272e2f80bda4e119d5eb342f61c18ffd556319 100644 |
--- a/media/capture/video/video_capture_device.h |
+++ b/media/capture/video/video_capture_device.h |
@@ -41,7 +41,38 @@ class Location; |
namespace media { |
-class CAPTURE_EXPORT VideoCaptureDevice { |
+class CAPTURE_EXPORT FrameReceiverObserver { |
miu
2016/12/01 05:25:18
Should this interface be in vcd_client.h instead?
chfremer
2016/12/02 01:28:29
With the simplification, this interface is no long
|
+ public: |
+ virtual ~FrameReceiverObserver() {} |
+ |
+ virtual void OnReceiverReportingUtilization(int buffer_id, |
+ double utilization) = 0; |
+ |
+ static double no_utilization_recorded() { return -1.0; } |
miu
2016/12/01 05:25:18
nit: static constexpr double kNoUtilizationRecorde
chfremer
2016/12/02 01:28:28
Done.
|
+}; |
+ |
+// During processing of a video frame delivered to |receiver|, we may report |
miu
2016/12/01 05:25:18
1. Please fix: The code comment refers to "|receiv
chfremer
2016/12/02 01:28:28
Done.
|
+// back to the device under how much load the |receiver| is. The Device may |
+// use this information to adjust the rate of data it pushes out to the |
+// receiver to avoid overloading it. |
+// Values are interpreted as follows: |
+// Less than 0.0 is meaningless and should be ignored. 1.0 indicates a |
+// maximum sustainable utilization. Greater than 1.0 indicates the consumer |
+// is likely to stall or drop frames if the data volume is not reduced. |
+// |
+// Example: In a system that encodes and transmits video frames over the |
+// network, this value can be used to indicate whether sufficient CPU |
+// is available for encoding and/or sufficient bandwidth is available for |
+// transmission over the network. The maximum of the two utilization |
+// measurements would be used as feedback. |
+class CAPTURE_EXPORT ConsumerLoadObserver { |
miu
2016/12/01 05:25:18
History: At one point, we were wondering whether w
chfremer
2016/12/02 01:28:28
Done.
|
+ public: |
+ virtual ~ConsumerLoadObserver() {} |
+ virtual void OnConsumerReportingUtilization(int frame_id, |
miu
2016/12/01 05:25:18
naming nit: s/frame_id/frame_feedback_id/ everywhe
chfremer
2016/12/02 01:28:28
Done.
|
+ double utilization){}; |
miu
2016/12/01 05:25:18
style nit: add space before open brace
chfremer
2016/12/02 01:28:29
Oops. Seems there was an extra ";" which caused th
|
+}; |
+ |
+class CAPTURE_EXPORT VideoCaptureDevice : public ConsumerLoadObserver { |
public: |
// Interface defining the methods that clients of VideoCapture must have. It |
@@ -85,7 +116,8 @@ class CAPTURE_EXPORT VideoCaptureDevice { |
const VideoCaptureFormat& frame_format, |
int clockwise_rotation, |
base::TimeTicks reference_time, |
- base::TimeDelta timestamp) = 0; |
+ base::TimeDelta timestamp, |
+ int frame_id = 0) = 0; |
miu
2016/12/01 05:25:18
Please document the new argument.
chfremer
2016/12/02 01:28:28
Done.
|
// Reserve an output buffer into which contents can be captured directly. |
// The returned Buffer will always be allocated with a memory size suitable |
@@ -112,14 +144,14 @@ class CAPTURE_EXPORT VideoCaptureDevice { |
// |timestamp|. |
// TODO(chfremer): Consider removing one of the two in order to simplify the |
// interface. |
- virtual void OnIncomingCapturedBuffer( |
- std::unique_ptr<Buffer> buffer, |
- const VideoCaptureFormat& frame_format, |
- base::TimeTicks reference_time, |
- base::TimeDelta timestamp) = 0; |
- virtual void OnIncomingCapturedVideoFrame( |
- std::unique_ptr<Buffer> buffer, |
- scoped_refptr<VideoFrame> frame) = 0; |
+ virtual void OnIncomingCapturedBuffer(std::unique_ptr<Buffer> buffer, |
+ const VideoCaptureFormat& format, |
+ base::TimeTicks reference_time, |
+ base::TimeDelta timestamp, |
+ int frame_id) = 0; |
+ virtual void OnIncomingCapturedVideoFrame(std::unique_ptr<Buffer> buffer, |
+ scoped_refptr<VideoFrame> frame, |
+ int frame_id) = 0; |
// Attempts to reserve the same Buffer provided in the last call to one of |
// the OnIncomingCapturedXXX() methods. This will fail if the content of the |
@@ -144,7 +176,7 @@ class CAPTURE_EXPORT VideoCaptureDevice { |
virtual double GetBufferPoolUtilization() const = 0; |
}; |
- virtual ~VideoCaptureDevice(); |
+ ~VideoCaptureDevice() override; |
// Prepares the video capturer for use. StopAndDeAllocate() must be called |
// before the object is deleted. |