gstreamer: gstlibcameraallocator: Use offset in creating a buffer

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@chromium.org>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Hirokazu Honda 2021-08-26 20:25:36 +09:00 committed by Laurent Pinchart
parent 1d2263dd3d
commit e5e7cdf701

View file

@ -52,8 +52,10 @@ FrameWrap::FrameWrap(GstAllocator *allocator, FrameBuffer *buffer,
outstandingPlanes_(0) outstandingPlanes_(0)
{ {
for (const FrameBuffer::Plane &plane : buffer->planes()) { 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,
GST_FD_MEMORY_FLAG_DONT_CLOSE); GST_FD_MEMORY_FLAG_DONT_CLOSE);
gst_memory_resize(mem, plane.offset, plane.length);
gst_mini_object_set_qdata(GST_MINI_OBJECT(mem), getQuark(), this, nullptr); gst_mini_object_set_qdata(GST_MINI_OBJECT(mem), getQuark(), this, nullptr);
GST_MINI_OBJECT(mem)->dispose = gst_libcamera_allocator_release; GST_MINI_OBJECT(mem)->dispose = gst_libcamera_allocator_release;
g_object_unref(mem->allocator); g_object_unref(mem->allocator);