[libcamera-devel] [RFC PATCH 07/10] gstreamer: gstlibcameraallocator: Use offset in creating a buffer

Laurent Pinchart laurent.pinchart at ideasonboard.com
Wed Aug 18 02:51:35 CEST 2021


Hi Hiro,

(CC'ing Nicolas)

Thank you for the patch.

On Mon, Aug 16, 2021 at 01:31:35PM +0900, Hirokazu Honda wrote:
> The plane length is the length of the plane size. The buffer length
> to be allocated for a plane is the offset and the length of
> FrameBuffer::Plane.
> 
> Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
> ---
>  src/gstreamer/gstlibcameraallocator.cpp | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/src/gstreamer/gstlibcameraallocator.cpp b/src/gstreamer/gstlibcameraallocator.cpp
> index 7bd8ba2d..a3ffec5b 100644
> --- a/src/gstreamer/gstlibcameraallocator.cpp
> +++ b/src/gstreamer/gstlibcameraallocator.cpp
> @@ -52,7 +52,8 @@ FrameWrap::FrameWrap(GstAllocator *allocator, FrameBuffer *buffer,
>  	  outstandingPlanes_(0)
>  {
>  	for (const FrameBuffer::Plane &plane : buffer->planes()) {
> -		GstMemory *mem = gst_fd_allocator_alloc(allocator, plane.fd.fd(), plane.length,
> +		GstMemory *mem = gst_fd_allocator_alloc(allocator, plane.fd.fd(),
> +							plane.offset + plane.length,

I'm not familiar enough with GStreamer to know the details, but it seems
that there's something problematic here. There's no offset passed to
gst_fd_allocator_alloc(), so the GstMemory object will "point" to the
beginning of the dmabuf. When it will then be used, I don't think it
will access the plane memory at plane.offset.

>  							GST_FD_MEMORY_FLAG_DONT_CLOSE);
>  		gst_mini_object_set_qdata(GST_MINI_OBJECT(mem), getQuark(), this, nullptr);
>  		GST_MINI_OBJECT(mem)->dispose = gst_libcamera_allocator_release;

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list