[{"id":16447,"web_url":"https://patchwork.libcamera.org/comment/16447/","msgid":"<YH/7mD39KX4sAPQ7@pendragon.ideasonboard.com>","date":"2021-04-21T10:16:56","subject":"Re: [libcamera-devel] [PATCH v3 3/3] libcamera: V4L2Device: Use\n\tSpan in updateControls()","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Hiro,\n\nThank you for the patch.\n\nOn Wed, Apr 21, 2021 at 06:38:57PM +0900, Hirokazu Honda wrote:\n> V4L2Device::updateControls() takes two arguments, raw array and\n> its size, for the v4l2_ext_control values. This replaces it with\n> libcamera::Span.\n> \n> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> ---\n>  include/libcamera/internal/v4l2_device.h |  4 ++--\n>  src/libcamera/v4l2_device.cpp            | 13 ++++++-------\n>  2 files changed, 8 insertions(+), 9 deletions(-)\n> \n> diff --git a/include/libcamera/internal/v4l2_device.h b/include/libcamera/internal/v4l2_device.h\n> index d006bf68..7c79ee97 100644\n> --- a/include/libcamera/internal/v4l2_device.h\n> +++ b/include/libcamera/internal/v4l2_device.h\n> @@ -14,6 +14,7 @@\n>  #include <linux/videodev2.h>\n>  \n>  #include <libcamera/signal.h>\n> +#include <libcamera/span.h>\n>  \n>  #include \"libcamera/internal/log.h\"\n>  #include \"libcamera/internal/v4l2_controls.h\"\n> @@ -55,8 +56,7 @@ protected:\n>  private:\n>  \tvoid listControls();\n>  \tvoid updateControls(ControlList *ctrls,\n> -\t\t\t    const struct v4l2_ext_control *v4l2Ctrls,\n> -\t\t\t    unsigned int count);\n> +\t\t\t    libcamera::Span<const v4l2_ext_control> v4l2Ctrls);\n>  \n>  \tvoid eventAvailable(EventNotifier *notifier);\n>  \n> diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp\n> index 109269b2..a59e8378 100644\n> --- a/src/libcamera/v4l2_device.cpp\n> +++ b/src/libcamera/v4l2_device.cpp\n> @@ -250,7 +250,8 @@ ControlList V4L2Device::getControls(const std::vector<uint32_t> &ids)\n>  \t\tv4l2Ctrls.resize(errorIdx);\n>  \t}\n>  \n> -\tupdateControls(&ctrls, v4l2Ctrls.data(), v4l2Ctrls.size());\n> +\tupdateControls(&ctrls,\n> +\t\t       libcamera::Span<const v4l2_ext_control>(v4l2Ctrls));\n\nThe Span constructor that takes a container is implicit, so I think you\ncan write\n\n\tupdateControls(&ctrls, v4l2Ctrls);\n\n>  \n>  \treturn ctrls;\n>  }\n> @@ -349,7 +350,8 @@ int V4L2Device::setControls(ControlList *ctrls)\n>  \t\tret = errorIdx;\n>  \t}\n>  \n> -\tupdateControls(ctrls, v4l2Ctrls.data(), v4l2Ctrls.size());\n> +\tupdateControls(ctrls,\n> +\t\t       libcamera::Span<const v4l2_ext_control>(v4l2Ctrls));\n\nSame here.\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n>  \n>  \treturn ret;\n>  }\n> @@ -513,14 +515,11 @@ void V4L2Device::listControls()\n>   * values in \\a v4l2Ctrls\n>   * \\param[inout] ctrls List of V4L2 controls to update\n>   * \\param[in] v4l2Ctrls List of V4L2 extended controls as returned by the driver\n> - * \\param[in] count The number of controls to update\n>   */\n>  void V4L2Device::updateControls(ControlList *ctrls,\n> -\t\t\t\tconst struct v4l2_ext_control *v4l2Ctrls,\n> -\t\t\t\tunsigned int count)\n> +\t\t\t\tlibcamera::Span<const v4l2_ext_control> v4l2Ctrls)\n>  {\n> -\tfor (unsigned int i = 0; i < count; i++) {\n> -\t\tconst struct v4l2_ext_control &v4l2Ctrl = v4l2Ctrls[i];\n> +\tfor (const v4l2_ext_control &v4l2Ctrl : v4l2Ctrls) {\n>  \t\tconst unsigned int id = v4l2Ctrl.id;\n>  \t\tif (!ctrls->contains(id)) {\n>  \t\t\tLOG(V4L2, Error) << \"ControlList doesn't contain id: \"","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 2E159BDB16\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 21 Apr 2021 10:17:03 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7A6A268841;\n\tWed, 21 Apr 2021 12:17:02 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1F68368840\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 21 Apr 2021 12:17:01 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 708E83EE;\n\tWed, 21 Apr 2021 12:17:00 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"YAgsm7PL\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1619000220;\n\tbh=1Wv3BMhCU3aeb8BjJZVeYv8uK3YnVJ2h0sYq8BqkJb8=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=YAgsm7PLAhqUvGvkGBnDgdCoOctizn/x5Ay3Wmn5mVV5ZZG6UnbY18nFI3RsgTMc0\n\t3C3kbX99Mf3rqwk8RzGnF4IHbIJJx6NPChuxvDsbSKhCPCbsj1kO/P/vDXeGxbq1dq\n\t30AbGZKEH1+jacO5I2bCC157tRYQnjm6BiN/DvfM=","Date":"Wed, 21 Apr 2021 13:16:56 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Hirokazu Honda <hiroh@chromium.org>","Message-ID":"<YH/7mD39KX4sAPQ7@pendragon.ideasonboard.com>","References":"<20210421093857.391409-1-hiroh@chromium.org>\n\t<20210421093857.391409-3-hiroh@chromium.org>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20210421093857.391409-3-hiroh@chromium.org>","Subject":"Re: [libcamera-devel] [PATCH v3 3/3] libcamera: V4L2Device: Use\n\tSpan in updateControls()","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>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":16449,"web_url":"https://patchwork.libcamera.org/comment/16449/","msgid":"<1f2b4800-81e3-d9cc-2e32-cec8fb63e85c@ideasonboard.com>","date":"2021-04-21T10:21:36","subject":"Re: [libcamera-devel] [PATCH v3 3/3] libcamera: V4L2Device: Use\n\tSpan in updateControls()","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Hiro,\n\nOn 21/04/2021 11:16, Laurent Pinchart wrote:\n> Hi Hiro,\n> \n> Thank you for the patch.\n> \n> On Wed, Apr 21, 2021 at 06:38:57PM +0900, Hirokazu Honda wrote:\n>> V4L2Device::updateControls() takes two arguments, raw array and\n>> its size, for the v4l2_ext_control values. This replaces it with\n>> libcamera::Span.\n>>\n>> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n>> ---\n>>  include/libcamera/internal/v4l2_device.h |  4 ++--\n>>  src/libcamera/v4l2_device.cpp            | 13 ++++++-------\n>>  2 files changed, 8 insertions(+), 9 deletions(-)\n>>\n>> diff --git a/include/libcamera/internal/v4l2_device.h b/include/libcamera/internal/v4l2_device.h\n>> index d006bf68..7c79ee97 100644\n>> --- a/include/libcamera/internal/v4l2_device.h\n>> +++ b/include/libcamera/internal/v4l2_device.h\n>> @@ -14,6 +14,7 @@\n>>  #include <linux/videodev2.h>\n>>  \n>>  #include <libcamera/signal.h>\n>> +#include <libcamera/span.h>\n>>  \n>>  #include \"libcamera/internal/log.h\"\n>>  #include \"libcamera/internal/v4l2_controls.h\"\n>> @@ -55,8 +56,7 @@ protected:\n>>  private:\n>>  \tvoid listControls();\n>>  \tvoid updateControls(ControlList *ctrls,\n>> -\t\t\t    const struct v4l2_ext_control *v4l2Ctrls,\n>> -\t\t\t    unsigned int count);\n>> +\t\t\t    libcamera::Span<const v4l2_ext_control> v4l2Ctrls);\n\nGiven that we are in the libcamera namespace here, is the libcamera::\nprefix required?\n\n\n>>  \n>>  \tvoid eventAvailable(EventNotifier *notifier);\n>>  \n>> diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp\n>> index 109269b2..a59e8378 100644\n>> --- a/src/libcamera/v4l2_device.cpp\n>> +++ b/src/libcamera/v4l2_device.cpp\n>> @@ -250,7 +250,8 @@ ControlList V4L2Device::getControls(const std::vector<uint32_t> &ids)\n>>  \t\tv4l2Ctrls.resize(errorIdx);\n>>  \t}\n>>  \n>> -\tupdateControls(&ctrls, v4l2Ctrls.data(), v4l2Ctrls.size());\n>> +\tupdateControls(&ctrls,\n>> +\t\t       libcamera::Span<const v4l2_ext_control>(v4l2Ctrls));\n> \n> The Span constructor that takes a container is implicit, so I think you\n> can write\n> \n> \tupdateControls(&ctrls, v4l2Ctrls);\n> \n>>  \n>>  \treturn ctrls;\n>>  }\n>> @@ -349,7 +350,8 @@ int V4L2Device::setControls(ControlList *ctrls)\n>>  \t\tret = errorIdx;\n>>  \t}\n>>  \n>> -\tupdateControls(ctrls, v4l2Ctrls.data(), v4l2Ctrls.size());\n>> +\tupdateControls(ctrls,\n>> +\t\t       libcamera::Span<const v4l2_ext_control>(v4l2Ctrls));\n> \n> Same here.\n> \n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> \n>>  \n>>  \treturn ret;\n>>  }\n>> @@ -513,14 +515,11 @@ void V4L2Device::listControls()\n>>   * values in \\a v4l2Ctrls\n>>   * \\param[inout] ctrls List of V4L2 controls to update\n>>   * \\param[in] v4l2Ctrls List of V4L2 extended controls as returned by the driver\n>> - * \\param[in] count The number of controls to update\n>>   */\n>>  void V4L2Device::updateControls(ControlList *ctrls,\n>> -\t\t\t\tconst struct v4l2_ext_control *v4l2Ctrls,\n>> -\t\t\t\tunsigned int count)\n>> +\t\t\t\tlibcamera::Span<const v4l2_ext_control> v4l2Ctrls)\n>>  {\n>> -\tfor (unsigned int i = 0; i < count; i++) {\n>> -\t\tconst struct v4l2_ext_control &v4l2Ctrl = v4l2Ctrls[i];\n>> +\tfor (const v4l2_ext_control &v4l2Ctrl : v4l2Ctrls) {\n\n\nThat's nicer indeed.\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n>>  \t\tconst unsigned int id = v4l2Ctrl.id;\n>>  \t\tif (!ctrls->contains(id)) {\n>>  \t\t\tLOG(V4L2, Error) << \"ControlList doesn't contain id: \"\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 25E35BDB15\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 21 Apr 2021 10:21:42 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 930FD6884A;\n\tWed, 21 Apr 2021 12:21:41 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 09B7E68840\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 21 Apr 2021 12:21:40 +0200 (CEST)","from [192.168.0.20]\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 6811C3EE;\n\tWed, 21 Apr 2021 12:21:39 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"pu0sefWj\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1619000499;\n\tbh=ZIkwIR/sGM2gwRYlTDQkmAGtqUIvDQKPn+pUQ1CUTL4=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=pu0sefWjcyrwielSM/kkbfNU6fNQ/72AOZJXGbv/3U6MRc7vStuvdCT9sqPObyMfB\n\tfKChg4XHH8HxHMGZ4bG3PaW4DiyQnK+udq8svjIsauTSCWRVUMZlYpJV8Ii8U82nZc\n\tU6S8kF+4XkhFBZTs9vvYehuYlwpE09nnkusmyPgM=","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tHirokazu Honda <hiroh@chromium.org>","References":"<20210421093857.391409-1-hiroh@chromium.org>\n\t<20210421093857.391409-3-hiroh@chromium.org>\n\t<YH/7mD39KX4sAPQ7@pendragon.ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Organization":"Ideas on Board","Message-ID":"<1f2b4800-81e3-d9cc-2e32-cec8fb63e85c@ideasonboard.com>","Date":"Wed, 21 Apr 2021 11:21:36 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101\n\tThunderbird/78.7.1","MIME-Version":"1.0","In-Reply-To":"<YH/7mD39KX4sAPQ7@pendragon.ideasonboard.com>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH v3 3/3] libcamera: V4L2Device: Use\n\tSpan in updateControls()","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>","Reply-To":"kieran.bingham@ideasonboard.com","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]