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

Unified Diff: content/common/gpu/media/v4l2_slice_video_decode_accelerator.h

Issue 1822983002: Support external buffer import in VDA interface and add a V4L2SVDA impl. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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: content/common/gpu/media/v4l2_slice_video_decode_accelerator.h
diff --git a/content/common/gpu/media/v4l2_slice_video_decode_accelerator.h b/content/common/gpu/media/v4l2_slice_video_decode_accelerator.h
index 9171e442b8cc1adad2af47b8f3d0bc52920c9e93..69f4321888a2bba0db8050af87e1dd80243e7baa 100644
--- a/content/common/gpu/media/v4l2_slice_video_decode_accelerator.h
+++ b/content/common/gpu/media/v4l2_slice_video_decode_accelerator.h
@@ -48,6 +48,9 @@ class CONTENT_EXPORT V4L2SliceVideoDecodeAccelerator
void Decode(const media::BitstreamBuffer& bitstream_buffer) override;
void AssignPictureBuffers(
const std::vector<media::PictureBuffer>& buffers) override;
+ void ImportBufferForPicture(int32_t picture_buffer_id,
+ const std::vector<gfx::GpuMemoryBufferHandle>&
+ gpu_memory_buffer_handles) override;
void ReusePictureBuffer(int32_t picture_buffer_id) override;
void Flush() override;
void Reset() override;
@@ -56,6 +59,7 @@ class CONTENT_EXPORT V4L2SliceVideoDecodeAccelerator
const base::WeakPtr<Client>& decode_client,
const scoped_refptr<base::SingleThreadTaskRunner>& decode_task_runner)
override;
+ media::VideoPixelFormat GetOutputFormat() const override;
static media::VideoDecodeAccelerator::SupportedProfiles
GetSupportedProfiles();
@@ -80,8 +84,10 @@ class CONTENT_EXPORT V4L2SliceVideoDecodeAccelerator
bool at_device;
kcwu 2016/03/22 05:42:54 How about merge |at_device| and |at_client| as sin
bool at_client;
int32_t picture_id;
+ GLuint texture_id;
EGLImageKHR egl_image;
EGLSyncKHR egl_sync;
+ std::vector<base::ScopedFD> dmabuf_fds;
bool cleared;
};
@@ -209,19 +215,32 @@ class CONTENT_EXPORT V4L2SliceVideoDecodeAccelerator
// Allocate V4L2 buffers and assign them to |buffers| provided by the client
// via AssignPictureBuffers() on decoder thread.
void AssignPictureBuffersTask(
- const std::vector<media::PictureBuffer>& buffers);
-
- // Create EGLImages bound to textures in |buffers| for given
- // |output_format_fourcc| and |output_planes_count|.
- void CreateEGLImages(const std::vector<media::PictureBuffer>& buffers,
- uint32_t output_format_fourcc,
- size_t output_planes_count);
-
- // Assign |egl_images| to previously-allocated V4L2 buffers in
- // output_buffer_map_ and picture ids from |buffers| and finish the surface
- // change sequence.
- void AssignEGLImages(const std::vector<media::PictureBuffer>& buffers,
- const std::vector<EGLImageKHR>& egl_images);
+ const std::vector<media::PictureBuffer>& buffers);
+
+ void ImportBufferForPictureTask(
+ int32_t picture_buffer_id,
+ // TODO(posciak): (crbug.com/561749) we should normally be able to pass
+ // the vector by itself via std::move, but it's not possible to do this
+ // if this method is used as a callback.
+ scoped_ptr<std::vector<base::ScopedFD>> passed_dmabuf_fds);
+
+ void CreateEGLImageFor(
+ size_t buffer_index,
+ // TODO(posciak): (crbug.com/561749) we should normally be able to pass
+ // the vector by itself via std::move, but it's not possible to do this
+ // if this method is used as a callback.
+ scoped_ptr<std::vector<base::ScopedFD>> passed_dmabuf_fds,
+ GLuint texture_id,
+ const gfx::Size& size,
+ uint32_t fourcc);
+
+ void AssignEGLImage(
+ size_t buffer_index,
+ EGLImageKHR egl_image,
+ // TODO(posciak): (crbug.com/561749) we should normally be able to pass
+ // the vector by itself via std::move, but it's not possible to do this
+ // if this method is used as a callback.
+ scoped_ptr<std::vector<base::ScopedFD>> passed_dmabuf_fds);
// Process pending events, if any.
void ProcessPendingEventsIfNeeded();
@@ -367,6 +386,8 @@ class CONTENT_EXPORT V4L2SliceVideoDecodeAccelerator
// Decoder state.
State state_;
+ Config::OutputMode output_mode_;
+
// If any of these are true, we are waiting for the device to finish decoding
// all previously-queued frames, so we can finish the flush/reset/surface
// change flows. These can stack.

Powered by Google App Engine
This is Rietveld 408576698