| 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;
|
| 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.
|
|
|