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

Unified Diff: media/video/gpu_memory_buffer_video_frame_pool.h

Issue 1874733002: media: split GpuMemoryBufferVideoFramePool into GpuMemoryBufferVideoFrameCopier/Pool Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add GpuMemoryBufferVideoFramePoolTest Created 4 years, 8 months 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/gpu_memory_buffer_video_frame_pool.h
diff --git a/media/video/gpu_memory_buffer_video_frame_pool.h b/media/video/gpu_memory_buffer_video_frame_pool.h
index ed4b3617e53cd39b0cf78d7f7dd7e6b9d16ddd47..901bb138c149b7162fc328439af39325ceecb892 100644
--- a/media/video/gpu_memory_buffer_video_frame_pool.h
+++ b/media/video/gpu_memory_buffer_video_frame_pool.h
@@ -7,7 +7,6 @@
#include "base/macros.h"
#include "base/memory/ref_counted.h"
-#include "base/task_runner.h"
#include "media/base/video_frame.h"
namespace base {
@@ -17,8 +16,37 @@ class SingleThreadTaskRunner;
namespace media {
class GpuVideoAcceleratorFactories;
-// Interface to a pool of GpuMemoryBuffers/textures/images that can be used to
-// transform software VideoFrames to VideoFrames backed by native textures.
+// A VideoFrameFuture allows to access GpuMemoryBuffer memory. When finishing
+// to use the instance, it will be released as a VideoFrame instance.
+// EXAMPLE:
+//
+// std::unique_ptr<VideoFrameFuture> video_frame_future =
+// video_frame_pool_->CreateFrame(PIXEL_FORMAT_I420, coded_size,
+// visible_rect, natural_size, timestamp);
+//
+// // Decode into or encode from |video_frame_future->data(plane)|
+//
+// // Release as a VideoFrame backed by native textures.
+// scoped_refptr<VideoFrame> video_frame = video_frame_future->Release();
+//
+// After released, all the VideoFrameFuture instance can do is destruction.
+class MEDIA_EXPORT VideoFrameFuture {
+ public:
+ virtual ~VideoFrameFuture() {}
+ virtual scoped_refptr<VideoFrame> Release() = 0;
+ virtual uint8_t* data(size_t plane) const = 0;
+ virtual int stride(size_t plane) const = 0;
+ virtual const gfx::Size& coded_size() const = 0;
+
+ protected:
+ VideoFrameFuture() {}
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(VideoFrameFuture);
+};
+
+// Interface to a pool of GpuMemoryBuffers/textures/images which produces
+// VideoFrames backed by native textures.
// The resources used by the VideoFrame created by the pool will be
// automatically put back into the pool once the frame is destroyed.
// The pool recycles resources to a void unnecessarily allocating and
@@ -26,27 +54,26 @@ class GpuVideoAcceleratorFactories;
// in a round trip to the browser/GPU process.
class MEDIA_EXPORT GpuMemoryBufferVideoFramePool {
public:
- GpuMemoryBufferVideoFramePool();
GpuMemoryBufferVideoFramePool(
const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
- const scoped_refptr<base::TaskRunner>& worker_task_runner,
GpuVideoAcceleratorFactories* gpu_factories);
virtual ~GpuMemoryBufferVideoFramePool();
- // Callback used by MaybeCreateHardwareFrame to deliver a new VideoFrame
- // after it has been copied to GpuMemoryBuffers.
- typedef base::Callback<void(const scoped_refptr<VideoFrame>&)> FrameReadyCB;
-
- // Calls |cb| on |media_worker_pool| with a new VideoFrame containing only
- // mailboxes to native resources. |cb| will be destroyed on
- // |media_worker_pool|.
- // The content of the new object is copied from the software-allocated
- // |video_frame|.
- // If it's not possible to create a new hardware VideoFrame, |video_frame|
- // itself will passed to |cb|.
- virtual void MaybeCreateHardwareFrame(
- const scoped_refptr<VideoFrame>& video_frame,
- const FrameReadyCB& frame_ready_cb);
+ // Create VideoFrameFuture backed by native textures.
+ std::unique_ptr<VideoFrameFuture> CreateFrame(VideoPixelFormat format,
+ const gfx::Size& coded_size,
+ const gfx::Rect& visible_rect,
+ const gfx::Size& natural_size,
+ base::TimeDelta timestamp);
+
+ // The number of output planes to be copied in each iteration.
+ static size_t PlanesPerCopy(VideoPixelFormat format, size_t plane);
+
+ protected:
+ friend class GpuMemoryBufferVideoFramePoolTest;
+
+ // Returns the number of frames in the pool for testing purposes.
+ size_t GetPoolSizeForTesting() const;
private:
class PoolImpl;
« no previous file with comments | « media/video/gpu_memory_buffer_video_frame_copier_unittest.cc ('k') | media/video/gpu_memory_buffer_video_frame_pool.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698