[libcamera-devel] [PATCH v2] v4l2: V4L2CameraProxy: Add support for DMABUF buffer I/O in REQBUF ioctl
Vedant Paranjape
vedantparanjape160201 at gmail.com
Tue Nov 30 11:38:35 CET 2021
Hi Paul,
On Tue, Nov 30, 2021 at 3:58 PM <paul.elder at ideasonboard.com> wrote:
>
> On Tue, Nov 30, 2021 at 03:02:15PM +0530, Vedant Paranjape wrote:
> > Hi Laurent,
> > I wanted to send this as an RFC, my bad.
>
> If it was an RFC it would've be nice to know it was an RFC :D
>
> >
> > On Tue, Nov 30, 2021 at 2:55 PM Laurent Pinchart
> > <laurent.pinchart at ideasonboard.com> wrote:
> > >
> > > Hi Vedant,
> > >
> > > On Tue, Nov 30, 2021 at 02:28:30PM +0530, Vedant Paranjape wrote:
> > > > To support importing DMABUF, we need to reqbufs with DMABUF mode.
> > > >
> > > > This patch enables using V4L2_MEMORY_DMABUF as one of the memory types
> > > > in vidioc_reqbuf to initialise DMA Buffer I/O
> > >
> > > Have you tested that this patch enables DMABUF support ?
> > >
> > > > Bug: https://bugs.libcamera.org/show_bug.cgi?id=89
> > > >
> > > > Signed-off-by: Vedant Paranjape <vedantparanjape160201 at gmail.com>
> > > > ---
> > > > src/v4l2/v4l2_camera_proxy.cpp | 8 +++++---
> > > > 1 file changed, 5 insertions(+), 3 deletions(-)
> > > >
> > > > diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp
> > > > index f194e06345b7..49db766d9f9d 100644
> > > > --- a/src/v4l2/v4l2_camera_proxy.cpp
> > > > +++ b/src/v4l2/v4l2_camera_proxy.cpp
> > > > @@ -160,7 +160,8 @@ bool V4L2CameraProxy::validateBufferType(uint32_t type)
> > > >
> > > > bool V4L2CameraProxy::validateMemoryType(uint32_t memory)
> > > > {
> > > > - return memory == V4L2_MEMORY_MMAP;
> > > > + return (memory == V4L2_MEMORY_MMAP) ||
> > > > + (memory == V4L2_MEMORY_DMABUF);
> > >
> > > No need for parentheses.
> > >
> > > As pointed by Paul, this introduces an issue in the EXPBUF
> > > implementation.
> > >
> > > Please stop ignoring review comments when sending new versions, or I'll
> > > have to ignore your patches.
> >
> > I'm extremely sorry, didn't mean to ignore. I had a chat with Paul
> > regarding solving this, I wanted to send this as an RFC instead.
>
> So clearly this patch depends on the other stuff that you were planning
> to send separately from this patch. Which means that on this patch you
> need to (besides mentioning that it's RFC) mention that you depend on X
> features that you'll send patches for later.
Right, noted. I'll send a patch series as RFC only after I am done with it.
>
>
> Paul
>
> >
> > >
> > > > }
> > > >
> > > > void V4L2CameraProxy::setFmtFromConfig(const StreamConfiguration &streamConfig)
> > > > @@ -468,7 +469,8 @@ int V4L2CameraProxy::vidioc_reqbufs(V4L2CameraFile *file, struct v4l2_requestbuf
> > > > if (!hasOwnership(file) && owner_)
> > > > return -EBUSY;
> > > >
> > > > - arg->capabilities = V4L2_BUF_CAP_SUPPORTS_MMAP;
> > > > + arg->capabilities = V4L2_BUF_CAP_SUPPORTS_MMAP |
> > > > + V4L2_BUF_CAP_SUPPORTS_DMABUF;
> > > > memset(arg->reserved, 0, sizeof(arg->reserved));
> > > >
> > > > if (arg->count == 0) {
> > > > @@ -511,7 +513,7 @@ int V4L2CameraProxy::vidioc_reqbufs(V4L2CameraFile *file, struct v4l2_requestbuf
> > > > struct v4l2_buffer buf = {};
> > > > buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
> > > > buf.length = v4l2PixFormat_.sizeimage;
> > > > - buf.memory = V4L2_MEMORY_MMAP;
> > > > + buf.memory = arg->memory;
> > > > buf.m.offset = i * v4l2PixFormat_.sizeimage;
> > > > buf.index = i;
> > > > buf.flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
> > >
Regards,
Vedant Paranjape
More information about the libcamera-devel
mailing list