[libcamera-devel] [PATCH v4] v4l2: V4L2CameraProxy: Add EXPBUF as one of the supported ioctl
Vedant Paranjape
vedantparanjape160201 at gmail.com
Thu Dec 30 04:58:36 CET 2021
Hi Laurent,
Thanks for the v4l2-ctl patch. I'll test it soon and reply in this thread.
Regards,
Vedant Paranjape
On Thu, 30 Dec, 2021, 04:06 Laurent Pinchart, <
laurent.pinchart at ideasonboard.com> wrote:
> Hi Vedant,
>
> Thank you for the patch.
>
> On Wed, Dec 29, 2021 at 12:20:14AM +0530, Vedant Paranjape wrote:
> > To support DMABUF as one of the memory buffer, we need to implement
> > EXPBUF in the v4l2 compat layer.
> >
> > This patch implements vidioc_expbuf as one of the supported ioctls.
> >
> > Bug: https://bugs.libcamera.org/show_bug.cgi?id=89
> >
> > Signed-off-by: Vedant Paranjape <vedantparanjape160201 at gmail.com>
>
> This looks fine. As soon as you can test it with v4l2-ctl and capture
> images, I think it can be merged.
>
> I've sent a patch for v4l2-ctl (which has been merged in the master
> branch already) that should help with testing.
>
> > ---
> > src/v4l2/v4l2_camera_proxy.cpp | 30 ++++++++++++++++++++++++++++++
> > src/v4l2/v4l2_camera_proxy.h | 1 +
> > 2 files changed, 31 insertions(+)
> >
> > diff --git a/src/v4l2/v4l2_camera_proxy.cpp
> b/src/v4l2/v4l2_camera_proxy.cpp
> > index c1375777c185..4d529bc29a4d 100644
> > --- a/src/v4l2/v4l2_camera_proxy.cpp
> > +++ b/src/v4l2/v4l2_camera_proxy.cpp
> > @@ -624,6 +624,32 @@ int V4L2CameraProxy::vidioc_dqbuf(V4L2CameraFile
> *file, struct v4l2_buffer *arg,
> > return 0;
> > }
> >
> > +int V4L2CameraProxy::vidioc_expbuf(V4L2CameraFile *file, struct
> v4l2_exportbuffer *arg)
> > +{
> > + LOG(V4L2Compat, Debug) << "Servicing vidioc_expbuf fd = " <<
> file->efd();
> > +
> > + if (!hasOwnership(file))
> > + return -EBUSY;
> > +
> > + /* \todo Verify that the memory type is MMAP when adding DMABUF
> support */
> > + if (!validateBufferType(arg->type))
> > + return -EINVAL;
> > +
> > + if (arg->index >= bufferCount_)
> > + return -EINVAL;
> > +
> > + if (arg->flags & ~(O_CLOEXEC | O_ACCMODE))
> > + return -EINVAL;
> > +
> > + memset(arg->reserved, 0, sizeof(arg->reserved));
> > +
> > + /* \todo honor the O_ACCMODE flags passed to this function */
> > + arg->fd = fcntl(vcam_->getBufferFd(arg->index),
> > + arg->flags & O_CLOEXEC ? F_DUPFD_CLOEXEC :
> F_DUPFD, 0);
> > +
> > + return 0;
> > +}
> > +
> > int V4L2CameraProxy::vidioc_streamon(V4L2CameraFile *file, int *arg)
> > {
> > LOG(V4L2Compat, Debug) << "Servicing vidioc_streamon fd = " <<
> file->efd();
> > @@ -685,6 +711,7 @@ const std::set<unsigned long>
> V4L2CameraProxy::supportedIoctls_ = {
> > VIDIOC_QUERYBUF,
> > VIDIOC_QBUF,
> > VIDIOC_DQBUF,
> > + VIDIOC_EXPBUF,
> > VIDIOC_STREAMON,
> > VIDIOC_STREAMOFF,
> > };
> > @@ -755,6 +782,9 @@ int V4L2CameraProxy::ioctl(V4L2CameraFile *file,
> unsigned long request, void *ar
> > case VIDIOC_DQBUF:
> > ret = vidioc_dqbuf(file, static_cast<struct v4l2_buffer
> *>(arg), &proxyMutex_);
> > break;
> > + case VIDIOC_EXPBUF:
> > + ret = vidioc_expbuf(file, static_cast<struct
> v4l2_exportbuffer *>(arg));
> > + break;
> > case VIDIOC_STREAMON:
> > ret = vidioc_streamon(file, static_cast<int *>(arg));
> > break;
> > diff --git a/src/v4l2/v4l2_camera_proxy.h b/src/v4l2/v4l2_camera_proxy.h
> > index fa0a49e0439b..14e027c3e7d1 100644
> > --- a/src/v4l2/v4l2_camera_proxy.h
> > +++ b/src/v4l2/v4l2_camera_proxy.h
> > @@ -60,6 +60,7 @@ private:
> > int vidioc_qbuf(V4L2CameraFile *file, struct v4l2_buffer *arg);
> > int vidioc_dqbuf(V4L2CameraFile *file, struct v4l2_buffer *arg,
> > libcamera::Mutex *lock)
> LIBCAMERA_TSA_REQUIRES(*lock);
> > + int vidioc_expbuf(V4L2CameraFile *file, struct v4l2_exportbuffer
> *arg);
> > int vidioc_streamon(V4L2CameraFile *file, int *arg);
> > int vidioc_streamoff(V4L2CameraFile *file, int *arg);
> >
>
> --
> Regards,
>
> Laurent Pinchart
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20211230/d4363479/attachment.htm>
More information about the libcamera-devel
mailing list