Index: chrome/gpu/arc_gpu_video_decode_accelerator.h |
diff --git a/chrome/gpu/arc_gpu_video_decode_accelerator.h b/chrome/gpu/arc_gpu_video_decode_accelerator.h |
index e29f9aaa69344014aa6a94692a838ac119e410b8..b3a66b173bd876a4dffacb70a9fdaa3a64991ad4 100644 |
--- a/chrome/gpu/arc_gpu_video_decode_accelerator.h |
+++ b/chrome/gpu/arc_gpu_video_decode_accelerator.h |
@@ -42,7 +42,8 @@ class ArcGpuVideoDecodeAccelerator |
size_t length) override; |
void BindDmabuf(PortType port, |
uint32_t index, |
- base::ScopedFD dmabuf_fd) override; |
+ base::ScopedFD dmabuf_fd, |
+ int32_t stride) override; |
void UseBuffer(PortType port, |
uint32_t index, |
const BufferMetadata& metadata) override; |
@@ -78,14 +79,28 @@ class ArcGpuVideoDecodeAccelerator |
// The file handle to access the buffer. It is owned by this class and |
// should be closed after use. |
base::ScopedFD handle; |
- off_t offset; |
- size_t length; |
+ |
+ // The offset of the payload to the beginning of the shared memory. |
+ off_t offset = 0; |
+ |
+ // The size of the payload in bytes. |
+ size_t length = 0; |
InputBufferInfo(); |
InputBufferInfo(InputBufferInfo&& other); |
~InputBufferInfo(); |
}; |
+ // The information about the dmabuf used as an output buffer. |
+ struct OutputBufferInfo { |
+ base::ScopedFD handle; |
+ int32_t stride = 0; // In bytes. |
+ |
+ OutputBufferInfo(); |
+ OutputBufferInfo(OutputBufferInfo&& other); |
+ ~OutputBufferInfo(); |
+ }; |
+ |
// Helper function to Send the end-of-stream output buffer if |
// |pending_eos_output_buffer_| is true, or reuse the picture in ArcVDA. |
void SendEosIfNeededOrReusePicture(uint32_t index); |
@@ -93,6 +108,9 @@ class ArcGpuVideoDecodeAccelerator |
// Helper function to validate |port| and |index|. |
bool ValidatePortAndIndex(PortType port, uint32_t index); |
+ // Helper function to verify the length of stride is legal. |
+ bool VerifyStride(const base::ScopedFD& fd, int32_t stride); |
+ |
// Creates an InputRecord for the given |bitstream_buffer_id|. The |
// |buffer_index| is the index of the associated input buffer. The |timestamp| |
// is the time the video frame should be displayed. |
@@ -118,6 +136,7 @@ class ArcGpuVideoDecodeAccelerator |
int32_t next_bitstream_buffer_id_; |
gfx::Size coded_size_; |
+ media::VideoPixelFormat output_pixel_format_; |
// The |picture_buffer_id|s for Pictures that were returned to us from VDA |
// via PictureReady() while flushing. We keep them until NotifyFlushDone(); |
@@ -133,10 +152,10 @@ class ArcGpuVideoDecodeAccelerator |
// The details of the shared memory of each input buffers. |
std::vector<InputBufferInfo> input_buffer_info_; |
- // To keep those output buffers which have been bound by bindDmabuf() but not |
- // be used yet. Will call VDA::ImportBufferForPicture() when those buffers are |
- // used for the first time. |
- std::vector<base::ScopedFD> buffers_pending_import_; |
+ // To keep those output buffers which have been bound by bindDmabuf() but |
+ // haven't been passed to VDA yet. Will call VDA::ImportBufferForPicture() |
+ // when those buffers are used for the first time. |
+ std::vector<OutputBufferInfo> buffers_pending_import_; |
base::ThreadChecker thread_checker_; |
size_t output_buffer_size_; |