From patchwork Wed Oct 21 09:02:09 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Prasanth Ramesh X-Patchwork-Id: 28544 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 760B6C3261 for ; Wed, 21 Oct 2026 09:02:30 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id A389E68F40; Wed, 21 Oct 2026 11:02:29 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="OA5cF8d2"; dkim-atps=neutral Received: from mail-dy1-x1333.google.com (mail-dy1-x1333.google.com [IPv6:2607:f8b0:4864:20::1333]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 5581B68F2E for ; Wed, 21 Oct 2026 11:02:28 +0200 (CEST) Received: by mail-dy1-x1333.google.com with SMTP id 5a478bee46e88-366421dc8ebso907357eec.1 for ; Wed, 21 Oct 2026 02:02:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792573346; x=1793178146; darn=lists.libcamera.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=QfxqPci8FfmobsYHtzc1FWnh5BC0zl6zR0l7TEQG1Cs=; b=OA5cF8d2VHWVZ00x4iBBSU5S5P80ZrXneqeEQn6v959JFYtVhV5jhczKe1x3FxgsZ9 7XJtavEmCdnSqCojvvFPd30h4uOkM7bLlwpziH+XkRQCan/LxHNevq7B76Wu3dNaQtv7 q8aWLxsrb8Nj771EbKp29Bd2umZbbFn9k/6io9V35Y1WCPdDVgdV8mRHp6TLD2MVN4nV iDn9p+/Urs/LIuRQxrrM2rUDYNvRPGo6rHtanWEzqB1RQkyT1d+motbldnOiLQtK8fJY CwmEoX1Dg+Jt7BigBrifR3cLV9XQtXb0X+uQRjp8o7Aa9/kTjcjV8yxsF/3vNkT1eFFt EUuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792573346; x=1793178146; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=QfxqPci8FfmobsYHtzc1FWnh5BC0zl6zR0l7TEQG1Cs=; b=s71iWGmENQ6R+MZGAGkmGbozni8l2WwmLMO47WlCSMxMEGRBFNsVkaB6SjTpew0XaQ NuB8K9bwkXBlE4AFsPOiCJxjaZi9YFiQbBAE7nMZ4FfcJPQygYuzGwRpNAL1hfvnq+Mi XQ5pIOc5BfpOA2Rgjj8fricyND7uouSwLwGCDCpxjYMNCOZd65gJhm8YhwCtno4HRlDo phzB/bUs12TVkhyx28bmNjoIpG4SAB6nG9jcWVClQsRm9DsigfB9aDJObQQHE8S340Ov GyZEUwmgpnS/kB9xZLT5Yd6VoRHkmniLLK90RyEKa2pBlZGFRRqXlFYxsn2pI79bp6nL LVCw== X-Gm-Message-State: AFq9FYLAYb6lvfKvzcHns/axMpKedcQCnNBINHUT8M92NsKgdOH6wFgZ smRCGJ3yP3EcYpnRlWGvNZa/h6vxM4XXm768/g37zPAPx61o8nheY0eitAYp99Pj X-Gm-Gg: AYBFou261uzPB//XLTmxGXBHojyum5bqFgPaDBUcdPKUjnboBTstJmNqlAyuKZqcKYI pda9dv8U4gUPJtIe7s51GSzffTNkojtXwx9lVh4SlsSDr1kQ/zxZZiqsO6nLafyj+eU0p7COtQW oK+k0E+u8tvg6JFKyrwi35iKOYKhSxAYgycDnIBlPQtFxIxGKLCW5H06tOLVYMJGX9zPLQEEelG OP8cPhEtCBh+vJPY8WCUnjgP2+a1NShLM02nJ8IBHnDGp5QgO1FkWWUO3u4YylzBgC0RPj3QWFz N6g0Th77jfVP4vnUfuaSXvy7LJyPAH3H/JXis2Bw2yEHagTqXjwyWxNT2pdHDARz1nQRQQe0S14 0fs5uP1ZsvWk76mvI83/EOvceJlQTHvDgQkoM2wTll7IEy156kAg9YVzu+hqlTynF/UM9TwXf3r 4htb4eTa8FiWeWYFUy0u5FXAHCO0CHjC8Zon6SFzeVxhEEHOswwgSt0JdsG/1gb6JVm0tVxiWCE ZnYJAV0Ml2z67X7EpddUrDr6OD1BPjif48fympEqkObMm+/odZD0hnxVRykOPJgiVW/CgYL/n34 s4L1Co4VMaT4eh4= X-Received: by 2002:a05:693c:87c4:10b0:35e:af84:bf1e with SMTP id 5a478bee46e88-3674cf37010mr2309641eec.7.1792573346212; Wed, 21 Oct 2026 02:02:26 -0700 (PDT) Received: from prasanth.alps.lineo.co.jp (vpn1.lineo.co.jp. [203.141.200.204]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3674198f1cdsm6161938eec.25.2026.10.21.02.02.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Oct 2026 02:02:25 -0700 (PDT) From: Prasanth R To: libcamera-devel@lists.libcamera.org Cc: barnabas.pocze@ideasonboard.com, laurent.pinchart@ideasonboard.com, kieran.bingham@ideasonboard.com, Prasanth R Subject: [PATCH v3] v4l2: v4l2_camera_proxy: Dispatch VIDIOC_PREPARE_BUF Date: Wed, 21 Oct 2026 18:02:09 +0900 Message-Id: <20261021090209.825057-1-ragaprasanth@gmail.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Commit b5225f00cde0 added VIDIOC_PREPARE_BUF to the supported ioctls, but did not add it to the switch case. Add the missing case. Also set V4L2_BUF_FLAG_PREPARED in QBUF and clear it in STREAMOFF, as videobuf2 does, so a buffer can be prepared again after STREAMOFF. Fixes: b5225f00cde0 ("v4l2: V4L2CameraProxy: Add support for PREPARE_BUF as one of the supported ioctl") Signed-off-by: Prasanth R Reviewed-by: Kieran Bingham --- Tested on a Raspberry Pi 4 with a UVC webcam - preparing a buffer again after STREAMOFF failed with EINVAL in v1 and works in v3. src/v4l2/v4l2_camera_proxy.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp index 7f8522d5e..d1f3ac7df 100644 --- a/src/v4l2/v4l2_camera_proxy.cpp +++ b/src/v4l2/v4l2_camera_proxy.cpp @@ -708,7 +708,8 @@ int V4L2CameraProxy::vidioc_qbuf(V4L2CameraFile *file, struct v4l2_buffer *arg) if (ret < 0) return ret; - buffers_[arg->index].flags |= V4L2_BUF_FLAG_QUEUED; + buffers_[arg->index].flags |= V4L2_BUF_FLAG_QUEUED | + V4L2_BUF_FLAG_PREPARED; arg->flags = buffers_[arg->index].flags; @@ -835,7 +836,8 @@ int V4L2CameraProxy::vidioc_streamoff(V4L2CameraFile *file, int *arg) int ret = vcam_->streamOff(); for (struct v4l2_buffer &buf : buffers_) - buf.flags &= ~(V4L2_BUF_FLAG_QUEUED | V4L2_BUF_FLAG_DONE); + buf.flags &= ~(V4L2_BUF_FLAG_QUEUED | V4L2_BUF_FLAG_DONE | + V4L2_BUF_FLAG_PREPARED); return ret; } @@ -997,6 +999,9 @@ int V4L2CameraProxy::ioctl(V4L2CameraFile *file, unsigned long longRequest, void case VIDIOC_QUERYBUF: ret = vidioc_querybuf(file, static_cast(arg)); break; + case VIDIOC_PREPARE_BUF: + ret = vidioc_prepare_buf(file, static_cast(arg)); + break; case VIDIOC_QBUF: ret = vidioc_qbuf(file, static_cast(arg)); break;