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

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

Issue 48113011: Remove media::VideoFrame from media::VideoCaptureDevice::Client interface (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@git-svn
Patch Set: ffdbaeb83 Trybot failures. Created 7 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/video/capture/video_capture_device.h
diff --git a/media/video/capture/video_capture_device.h b/media/video/capture/video_capture_device.h
index 824cdb405ba4bfd418b401754c1d928f772eb520..74a8d27d85db32c017165c893a5dc2687f038b2b 100644
--- a/media/video/capture/video_capture_device.h
+++ b/media/video/capture/video_capture_device.h
@@ -16,6 +16,8 @@
#include <string>
#include "base/logging.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
#include "base/time/time.h"
#include "media/base/media_export.h"
#include "media/video/capture/video_capture_types.h"
@@ -120,22 +122,40 @@ class MEDIA_EXPORT VideoCaptureDevice {
class MEDIA_EXPORT Client {
public:
+ // Memory buffer returned by Client::ReserveOutputBuffer().
+ class Buffer : public base::RefCountedThreadSafe<Buffer> {
+ public:
+ int id() const { return id_; }
+ void* data() const { return data_; }
+ size_t size() const { return size_; }
+
+ protected:
+ friend class base::RefCountedThreadSafe<Buffer>;
+
+ Buffer(int id, void* data, size_t size)
+ : id_(id), data_(data), size_(size) {}
+ virtual ~Buffer() {}
+
+ const int id_;
+ void* const data_;
+ const size_t size_;
+ };
+
virtual ~Client() {}
- // Reserve an output buffer into which a video frame can be captured
- // directly. If all buffers are currently busy, returns NULL.
- //
- // The returned VideoFrames will always be allocated with a YV12 format and
- // have dimensions matching |size|. It is the VideoCaptureDevice's
- // responsibility to obey whatever stride and memory layout are indicated on
- // the returned VideoFrame object.
+ // Reserve an output buffer into which contents can be captured directly.
+ // The returned Buffer will always be allocated with a memory size suitable
+ // for holding a packed video frame of |format| format, of |dimensions|
+ // dimensions. It is permissible for |dimensions| to be zero; in which
+ // case the returned Buffer does not guarantee memory backing, but functions
+ // as a reservation for external input for the purposes of buffer
+ // throttling.
//
- // The output buffer stays reserved for use by the calling
- // VideoCaptureDevice until either the last reference to the VideoFrame is
- // released, or until the buffer is passed back to the Client's
- // OnIncomingCapturedFrame() method.
- virtual scoped_refptr<media::VideoFrame> ReserveOutputBuffer(
- const gfx::Size& size) = 0;
+ // The output buffer stays reserved for use until the Buffer object is
+ // destroyed.
+ virtual scoped_refptr<Buffer> ReserveOutputBuffer(
+ media::VideoFrame::Format format,
+ const gfx::Size& dimensions) = 0;
// Captured a new video frame as a raw buffer. The size, color format, and
// layout are taken from the parameters specified by an earlier call to
@@ -154,25 +174,18 @@ class MEDIA_EXPORT VideoCaptureDevice {
bool flip_horiz,
const VideoCaptureCapability& frame_info) = 0;
- // Captured a new video frame, held in a VideoFrame container.
+ // Captured a new video frame, held in |buffer|.
//
- // If |frame| was created via the ReserveOutputBuffer() mechanism, then the
- // frame delivery is guaranteed (it will not be silently dropped), and
- // delivery will require no additional copies in the browser process. For
- // such frames, the VideoCaptureDevice's reservation on the output buffer
- // ends immediately. The VideoCaptureDevice may not read or write the
- // underlying memory afterwards, and it should release its references to
- // |frame| as soon as possible, to allow buffer reuse.
- //
- // If |frame| was NOT created via ReserveOutputBuffer(), then this method
- // will try to reserve an output buffer and copy from |frame| into the
- // output buffer. If no output buffer is available, the frame will be
- // silently dropped. |frame| must be allocated as RGB32, YV12 or I420, and
- // the size must match that specified by an earlier call to OnFrameInfo().
- virtual void OnIncomingCapturedVideoFrame(
- const scoped_refptr<media::VideoFrame>& frame,
- base::Time timestamp,
- int frame_rate) = 0;
+ // As the frame is backed by a reservation returned by
+ // ReserveOutputBuffer(), delivery is guaranteed and will require no
+ // additional copies in the browser process. |dimensions| indicates the
+ // frame width and height of the buffer contents; this is assumed to be of
+ // |format| format and tightly packed.
+ virtual void OnIncomingCapturedBuffer(const scoped_refptr<Buffer>& buffer,
+ media::VideoFrame::Format format,
+ const gfx::Size& dimensions,
+ base::Time timestamp,
+ int frame_rate) = 0;
// An error has occurred that cannot be handled and VideoCaptureDevice must
// be StopAndDeAllocate()-ed.
« no previous file with comments | « media/video/capture/linux/video_capture_device_linux.cc ('k') | media/video/capture/video_capture_device_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698