]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: v4l2: Add mem2mem helpers for REMOVE_BUFS ioctl
authorBenjamin Gaignard <benjamin.gaignard@collabora.com>
Thu, 14 Mar 2024 15:32:25 +0000 (16:32 +0100)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Mon, 25 Mar 2024 11:00:44 +0000 (12:00 +0100)
Create v4l2-mem2mem helpers for VIDIOC_REMOVE_BUFS ioctl and
make test drivers use it.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
Reviewed-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/media/test-drivers/vicodec/vicodec-core.c
drivers/media/test-drivers/vimc/vimc-capture.c
drivers/media/test-drivers/visl/visl-video.c
drivers/media/test-drivers/vivid/vivid-core.c
drivers/media/v4l2-core/v4l2-mem2mem.c
include/media/v4l2-mem2mem.h

index e13f5452b927b45414c433dcc0cfcd1577a85e33..3e011fe62ae11c723aa9b7bd5f3c87e9f779c157 100644 (file)
@@ -1345,6 +1345,7 @@ static const struct v4l2_ioctl_ops vicodec_ioctl_ops = {
        .vidioc_prepare_buf     = v4l2_m2m_ioctl_prepare_buf,
        .vidioc_create_bufs     = v4l2_m2m_ioctl_create_bufs,
        .vidioc_expbuf          = v4l2_m2m_ioctl_expbuf,
+       .vidioc_remove_bufs     = v4l2_m2m_ioctl_remove_bufs,
 
        .vidioc_streamon        = v4l2_m2m_ioctl_streamon,
        .vidioc_streamoff       = v4l2_m2m_ioctl_streamoff,
index 97693561f1e4b4b31e9085464909bee5f74b9b6f..ba7550b8ba7ec3d22c65095312355b708177ea70 100644 (file)
@@ -221,6 +221,7 @@ static const struct v4l2_ioctl_ops vimc_capture_ioctl_ops = {
        .vidioc_expbuf = vb2_ioctl_expbuf,
        .vidioc_streamon = vb2_ioctl_streamon,
        .vidioc_streamoff = vb2_ioctl_streamoff,
+       .vidioc_remove_bufs = vb2_ioctl_remove_bufs,
 };
 
 static void vimc_capture_return_all_buffers(struct vimc_capture_device *vcapture,
index b9a4b44bd0edfff3ae403e4eb3f803158e1ed06f..f8d970319764f6a2c47ed1c002a70b54b67ff937 100644 (file)
@@ -539,6 +539,7 @@ const struct v4l2_ioctl_ops visl_ioctl_ops = {
        .vidioc_prepare_buf             = v4l2_m2m_ioctl_prepare_buf,
        .vidioc_create_bufs             = v4l2_m2m_ioctl_create_bufs,
        .vidioc_expbuf                  = v4l2_m2m_ioctl_expbuf,
+       .vidioc_remove_bufs             = v4l2_m2m_ioctl_remove_bufs,
 
        .vidioc_streamon                = v4l2_m2m_ioctl_streamon,
        .vidioc_streamoff               = v4l2_m2m_ioctl_streamoff,
index e2d4f10003f38c84b1dfbf9927b8401230bab302..0273bc9863b03aff830eb68ee094a98ae98070dc 100644 (file)
@@ -769,6 +769,7 @@ static const struct v4l2_ioctl_ops vivid_ioctl_ops = {
        .vidioc_expbuf                  = vb2_ioctl_expbuf,
        .vidioc_streamon                = vb2_ioctl_streamon,
        .vidioc_streamoff               = vb2_ioctl_streamoff,
+       .vidioc_remove_bufs             = vb2_ioctl_remove_bufs,
 
        .vidioc_enum_input              = vivid_enum_input,
        .vidioc_g_input                 = vivid_g_input,
index 75517134a5e94586f2a05dd0b16aa2319ec45e8a..eb22d6172462da2cc6256087540223210c42b181 100644 (file)
@@ -1386,6 +1386,21 @@ int v4l2_m2m_ioctl_create_bufs(struct file *file, void *priv,
 }
 EXPORT_SYMBOL_GPL(v4l2_m2m_ioctl_create_bufs);
 
+int v4l2_m2m_ioctl_remove_bufs(struct file *file, void *priv,
+                              struct v4l2_remove_buffers *remove)
+{
+       struct v4l2_fh *fh = file->private_data;
+       struct vb2_queue *q = v4l2_m2m_get_vq(fh->m2m_ctx, remove->type);
+
+       if (!q)
+               return -EINVAL;
+       if (q->type != remove->type)
+               return -EINVAL;
+
+       return vb2_core_remove_bufs(q, remove->index, remove->count);
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_ioctl_remove_bufs);
+
 int v4l2_m2m_ioctl_querybuf(struct file *file, void *priv,
                                struct v4l2_buffer *buf)
 {
index 7f1af1f7f9121b96cc550f37eb80714d8fc49bcf..0af330cf91c38bff1b91000b9a0497e60d207410 100644 (file)
@@ -867,6 +867,8 @@ int v4l2_m2m_ioctl_reqbufs(struct file *file, void *priv,
                                struct v4l2_requestbuffers *rb);
 int v4l2_m2m_ioctl_create_bufs(struct file *file, void *fh,
                                struct v4l2_create_buffers *create);
+int v4l2_m2m_ioctl_remove_bufs(struct file *file, void *priv,
+                              struct v4l2_remove_buffers *d);
 int v4l2_m2m_ioctl_querybuf(struct file *file, void *fh,
                                struct v4l2_buffer *buf);
 int v4l2_m2m_ioctl_expbuf(struct file *file, void *fh,