[{"id":5296,"web_url":"https://patchwork.libcamera.org/comment/5296/","msgid":"<20200620014431.GT5823@pendragon.ideasonboard.com>","date":"2020-06-20T01:44:31","subject":"Re: [libcamera-devel] [PATCH v2 06/17] v4l2: v4l2_camera_proxy:\n\tImplement VIDIOC_ENUMINPUT, VIDIOC_G/S_INPUT","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Paul,\n\nThank you for the patch.\n\nOn Fri, Jun 19, 2020 at 02:41:12PM +0900, Paul Elder wrote:\n> Implement VIDIOC_ENUMINPUT, VIDIOC_G_INPUT, and VIDIOC_S_INPUT. Only the\n> zeroth input device is supported, and the info returned by enuminput is\n> hardcoded and basic. This is sufficient to pass v4l2-compliance.\n> \n> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> \n> ---\n> Changes in v2:\n> - use V4L2CameraFile instead of fd\n> - remove arg == nullptr check as it has been moved away to the main\n>   ioctl handler\n> ---\n>  src/v4l2/v4l2_camera_proxy.cpp | 48 ++++++++++++++++++++++++++++++++++\n>  src/v4l2/v4l2_camera_proxy.h   |  3 +++\n>  2 files changed, 51 insertions(+)\n> \n> diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp\n> index 3e95645..3ac9068 100644\n> --- a/src/v4l2/v4l2_camera_proxy.cpp\n> +++ b/src/v4l2/v4l2_camera_proxy.cpp\n> @@ -376,6 +376,42 @@ int V4L2CameraProxy::vidioc_s_priority(V4L2CameraFile *cf, enum v4l2_priority *a\n>  \treturn 0;\n>  }\n>  \n> +int V4L2CameraProxy::vidioc_enuminput(V4L2CameraFile *cf, struct v4l2_input *arg)\n\ns/cf/file/ as for patch 02/17 ? I forgot to mention that in the review\nof 05/17, and it's applicable to all the other patches in this series.\n\n> +{\n> +\tLOG(V4L2Compat, Debug) << \"Servicing vidioc_enuminput fd = \" << cf->efd();\n> +\n> +\tif (arg->index != 0)\n> +\t\treturn -EINVAL;\n> +\n> +\tmemset(arg, 0, sizeof(*arg));\n> +\n> +\tutils::strlcpy(reinterpret_cast<char *>(arg->name),\n> +\t\t       reinterpret_cast<char *>(capabilities_.card),\n> +\t\t       sizeof(arg->name));\n> +\targ->type = V4L2_INPUT_TYPE_CAMERA;\n> +\n> +\treturn 0;\n> +}\n> +\n> +int V4L2CameraProxy::vidioc_g_input(V4L2CameraFile *cf, int *arg)\n> +{\n> +\tLOG(V4L2Compat, Debug) << \"Servicing vidioc_g_input fd = \" << cf->efd();\n> +\n> +\t*arg = 0;\n> +\n> +\treturn 0;\n> +}\n> +\n> +int V4L2CameraProxy::vidioc_s_input(V4L2CameraFile *cf, int *arg)\n> +{\n> +\tLOG(V4L2Compat, Debug) << \"Servicing vidioc_s_input fd = \" << cf->efd();\n> +\n> +\tif (*arg != 0)\n> +\t\treturn -EINVAL;\n> +\n> +\treturn 0;\n> +}\n> +\n>  int V4L2CameraProxy::freeBuffers()\n>  {\n>  \tLOG(V4L2Compat, Debug) << \"Freeing libcamera bufs\";\n> @@ -594,6 +630,9 @@ std::set<unsigned long> V4L2CameraProxy::supportedIoctls_ = {\n>  \tVIDIOC_TRY_FMT,\n>  \tVIDIOC_G_PRIORITY,\n>  \tVIDIOC_S_PRIORITY,\n> +\tVIDIOC_ENUMINPUT,\n> +\tVIDIOC_G_INPUT,\n> +\tVIDIOC_S_INPUT,\n>  \tVIDIOC_REQBUFS,\n>  \tVIDIOC_QUERYBUF,\n>  \tVIDIOC_QBUF,\n> @@ -637,6 +676,15 @@ int V4L2CameraProxy::ioctl(V4L2CameraFile *cf, unsigned long request, void *arg)\n>  \tcase VIDIOC_S_PRIORITY:\n>  \t\tret = vidioc_s_priority(cf, static_cast<enum v4l2_priority *>(arg));\n>  \t\tbreak;\n> +\tcase VIDIOC_ENUMINPUT:\n> +\t\tret = vidioc_enuminput(cf, static_cast<struct v4l2_input *>(arg));\n> +\t\tbreak;\n> +\tcase VIDIOC_G_INPUT:\n> +\t\tret = vidioc_g_input(cf, static_cast<int *>(arg));\n> +\t\tbreak;\n> +\tcase VIDIOC_S_INPUT:\n> +\t\tret = vidioc_s_input(cf, static_cast<int *>(arg));\n> +\t\tbreak;\n>  \tcase VIDIOC_REQBUFS:\n>  \t\tret = vidioc_reqbufs(cf, static_cast<struct v4l2_requestbuffers *>(arg));\n>  \t\tbreak;\n> diff --git a/src/v4l2/v4l2_camera_proxy.h b/src/v4l2/v4l2_camera_proxy.h\n> index 3260eec..46573e7 100644\n> --- a/src/v4l2/v4l2_camera_proxy.h\n> +++ b/src/v4l2/v4l2_camera_proxy.h\n> @@ -53,6 +53,9 @@ private:\n>  \tint vidioc_try_fmt(V4L2CameraFile *cf, struct v4l2_format *arg);\n>  \tint vidioc_g_priority(V4L2CameraFile *cf, enum v4l2_priority *arg);\n>  \tint vidioc_s_priority(V4L2CameraFile *cf, enum v4l2_priority *arg);\n> +\tint vidioc_enuminput(V4L2CameraFile *cf, struct v4l2_input *arg);\n> +\tint vidioc_g_input(V4L2CameraFile *cf, int *arg);\n> +\tint vidioc_s_input(V4L2CameraFile *cf, int *arg);\n>  \tint vidioc_reqbufs(V4L2CameraFile *cf, struct v4l2_requestbuffers *arg);\n>  \tint vidioc_querybuf(V4L2CameraFile *cf, struct v4l2_buffer *arg);\n>  \tint vidioc_qbuf(V4L2CameraFile *cf, struct v4l2_buffer *arg);","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E1C7160710\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 20 Jun 2020 03:44:55 +0200 (CEST)","from pendragon.ideasonboard.com (81-175-216-236.bb.dnainternet.fi\n\t[81.175.216.236])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 58BA6552;\n\tSat, 20 Jun 2020 03:44:55 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"XxwkjQXD\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1592617495;\n\tbh=f5LvSV8B3e/aoJL6Fg1d/TjZyuvXukKXyM0q1v8iV7o=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=XxwkjQXDoyGFMIK1ESCAeVegQj64qWPSo47VrNuE5q4YQj2jkH1oZ0z/pwfLu/w1N\n\tZcXolnFI+qhb7tZRTjw4mz3Y0GJddVByg021X2APKq77SlWoo6pG6Cqu87JnHFNLKl\n\tfP/PFW9JdOoLdzGnx2awzLtwiu/GttyMKDp5nv8M=","Date":"Sat, 20 Jun 2020 04:44:31 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Paul Elder <paul.elder@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org, Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<20200620014431.GT5823@pendragon.ideasonboard.com>","References":"<20200619054123.19052-1-paul.elder@ideasonboard.com>\n\t<20200619054123.19052-7-paul.elder@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20200619054123.19052-7-paul.elder@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v2 06/17] v4l2: v4l2_camera_proxy:\n\tImplement VIDIOC_ENUMINPUT, VIDIOC_G/S_INPUT","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Sat, 20 Jun 2020 01:44:56 -0000"}}]