[{"id":36145,"web_url":"https://patchwork.libcamera.org/comment/36145/","msgid":"<175975622282.3214037.8888742265664274382@localhost>","date":"2025-10-06T13:10:22","subject":"Re: [RFC PATCH v1 4/7] libcamera: controls: ControlList: Add\n\t`erase()`","submitter":{"id":184,"url":"https://patchwork.libcamera.org/api/people/184/","name":"Stefan Klug","email":"stefan.klug@ideasonboard.com"},"content":"Hi Barnabás,\n\nThank you for the patch.\n\nQuoting Barnabás Pőcze (2025-09-24 14:47:09)\n> Add two `erase()` functions that can be used to remove elements\n> from a `ControlList` instance.\n> \n> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n\nThis looks all reasonable to me. I wonder however why that was never\nimplemented before. Was there a reason not to remove elements from a\nControlList? Does that have any implications on the C-wrapper?\n\nOtherwise\nReviewed-by: Stefan Klug <stefan.klug@ideasonboard.com> \n\nRegards,\nStefan\n\n> ---\n>  include/libcamera/controls.h |  3 +++\n>  src/libcamera/controls.cpp   | 17 +++++++++++++++++\n>  2 files changed, 20 insertions(+)\n> \n> diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h\n> index 5d4a53c46..9045caff7 100644\n> --- a/include/libcamera/controls.h\n> +++ b/include/libcamera/controls.h\n> @@ -470,6 +470,9 @@ public:\n>         const ControlValue &get(unsigned int id) const;\n>         void set(unsigned int id, const ControlValue &value);\n>  \n> +       bool erase(unsigned int id);\n> +       bool erase(const ControlId &ctrl) { return erase(ctrl.id()); }\n> +\n>         const ControlInfoMap *infoMap() const { return infoMap_; }\n>         const ControlIdMap *idMap() const { return idmap_; }\n>  \n> diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp\n> index 54cd3b703..83f8bf056 100644\n> --- a/src/libcamera/controls.cpp\n> +++ b/src/libcamera/controls.cpp\n> @@ -1156,6 +1156,23 @@ void ControlList::set(unsigned int id, const ControlValue &value)\n>         *val = value;\n>  }\n>  \n> +/**\n> + * \\brief Remove the value of control \\a id\n> + * \\param[in] id The control ID\n> + * \\return \\a true if \\a id was present, \\a false otherwise\n> + */\n> +bool ControlList::erase(unsigned int id)\n> +{\n> +       return controls_.erase(id);\n> +}\n> +\n> +/**\n> + * \\fn ControlList::erase(const ControlId &ctrl)\n> + * \\brief Remove the value of control \\a ctrl\n> + * \\param[in] ctrl The control\n> + * \\return \\a true if \\a ctrl was present, \\a false otherwise\n> + */\n> +\n>  /**\n>   * \\fn ControlList::infoMap()\n>   * \\brief Retrieve the ControlInfoMap used to construct the ControlList\n> -- \n> 2.51.0\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 C4819BF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  6 Oct 2025 13:10:30 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A52236B5AA;\n\tMon,  6 Oct 2025 15:10:29 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D8A376936E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  6 Oct 2025 15:10:26 +0200 (CEST)","from ideasonboard.com (unknown\n\t[IPv6:2a00:6020:448c:6c00:2e2:f331:f320:caae])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id C16EA56D;\n\tMon,  6 Oct 2025 15:08:53 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"ibd5jGx9\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1759756133;\n\tbh=Oxw3brzvzqOyu76o3H8duEWY8azQhh/qpKkG3PyDjE8=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=ibd5jGx97EiDBkOauKEa+c0oxbp0MwB5PbQjd599O8Ja5EVwhSWfscMrr/TQ2Gnup\n\tX+JldjXd57wAmhxTp7sJ6p8ZRQFJka0TmnIgaSWJxkqelHjchznqJS3yo1ubYhWORB\n\tnPoHJ4ndPIVHuZCJq+4iNPr4svKFOsdTuJiA5fqs=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20250924124713.3361707-5-barnabas.pocze@ideasonboard.com>","References":"<20250924124713.3361707-1-barnabas.pocze@ideasonboard.com>\n\t<20250924124713.3361707-5-barnabas.pocze@ideasonboard.com>","Subject":"Re: [RFC PATCH v1 4/7] libcamera: controls: ControlList: Add\n\t`erase()`","From":"Stefan Klug <stefan.klug@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>, \n\tlibcamera-devel@lists.libcamera.org","Date":"Mon, 06 Oct 2025 15:10:22 +0200","Message-ID":"<175975622282.3214037.8888742265664274382@localhost>","User-Agent":"alot/0.12.dev8+g2c003385c862.d20250602","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":36148,"web_url":"https://patchwork.libcamera.org/comment/36148/","msgid":"<4df50248-aa11-4168-817e-912a35f4cd1d@ideasonboard.com>","date":"2025-10-06T13:43:40","subject":"Re: [RFC PATCH v1 4/7] libcamera: controls: ControlList: Add\n\t`erase()`","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"content":"Hi\n\n2025. 10. 06. 15:10 keltezéssel, Stefan Klug írta:\n> Hi Barnabás,\n> \n> Thank you for the patch.\n> \n> Quoting Barnabás Pőcze (2025-09-24 14:47:09)\n>> Add two `erase()` functions that can be used to remove elements\n>> from a `ControlList` instance.\n>>\n>> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n> \n> This looks all reasonable to me. I wonder however why that was never\n> implemented before. Was there a reason not to remove elements from a\n> ControlList? Does that have any implications on the C-wrapper?\n\nI can only recall https://lists.libcamera.org/pipermail/libcamera-devel/2025-June/050761.html\nregarding this topic. I don't think this change has problematic implications.\n\n\nRegards,\nBarnabás Pőcze\n\n\n> \n> Otherwise\n> Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> \n> Regards,\n> Stefan\n> \n>> ---\n>>   include/libcamera/controls.h |  3 +++\n>>   src/libcamera/controls.cpp   | 17 +++++++++++++++++\n>>   2 files changed, 20 insertions(+)\n>>\n>> diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h\n>> index 5d4a53c46..9045caff7 100644\n>> --- a/include/libcamera/controls.h\n>> +++ b/include/libcamera/controls.h\n>> @@ -470,6 +470,9 @@ public:\n>>          const ControlValue &get(unsigned int id) const;\n>>          void set(unsigned int id, const ControlValue &value);\n>>\n>> +       bool erase(unsigned int id);\n>> +       bool erase(const ControlId &ctrl) { return erase(ctrl.id()); }\n>> +\n>>          const ControlInfoMap *infoMap() const { return infoMap_; }\n>>          const ControlIdMap *idMap() const { return idmap_; }\n>>\n>> diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp\n>> index 54cd3b703..83f8bf056 100644\n>> --- a/src/libcamera/controls.cpp\n>> +++ b/src/libcamera/controls.cpp\n>> @@ -1156,6 +1156,23 @@ void ControlList::set(unsigned int id, const ControlValue &value)\n>>          *val = value;\n>>   }\n>>\n>> +/**\n>> + * \\brief Remove the value of control \\a id\n>> + * \\param[in] id The control ID\n>> + * \\return \\a true if \\a id was present, \\a false otherwise\n>> + */\n>> +bool ControlList::erase(unsigned int id)\n>> +{\n>> +       return controls_.erase(id);\n>> +}\n>> +\n>> +/**\n>> + * \\fn ControlList::erase(const ControlId &ctrl)\n>> + * \\brief Remove the value of control \\a ctrl\n>> + * \\param[in] ctrl The control\n>> + * \\return \\a true if \\a ctrl was present, \\a false otherwise\n>> + */\n>> +\n>>   /**\n>>    * \\fn ControlList::infoMap()\n>>    * \\brief Retrieve the ControlInfoMap used to construct the ControlList\n>> --\n>> 2.51.0\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 B6B52C324C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  6 Oct 2025 13:43:47 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5C39C6B5F3;\n\tMon,  6 Oct 2025 15:43:46 +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 DCACC6936E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  6 Oct 2025 15:43:43 +0200 (CEST)","from [192.168.33.23] (185.182.214.142.nat.pool.zt.hu\n\t[185.182.214.142])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 078921741;\n\tMon,  6 Oct 2025 15:42:10 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"LJz4pHUI\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1759758131;\n\tbh=yn44U9IwKfpCDH+mn205XiMXImsRPFyq6YX6CBBh3ZY=;\n\th=Date:Subject:To:References:From:In-Reply-To:From;\n\tb=LJz4pHUITffw7R3EM/+5t/gmt0LFN4mOfzRfmGW3PBhmgOgxWtQhQdCreKza4DnUZ\n\tghV4na0KcavgBF9TryL0JdxrzjK4i89B2jWZZ6GJJI+KhWdOK8Exv3B8dZf4r5eZU+\n\tsBhhK0uNsz9gLg5tFW305cloSEqlI9BL+cExVkxc=","Message-ID":"<4df50248-aa11-4168-817e-912a35f4cd1d@ideasonboard.com>","Date":"Mon, 6 Oct 2025 15:43:40 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [RFC PATCH v1 4/7] libcamera: controls: ControlList: Add\n\t`erase()`","To":"Stefan Klug <stefan.klug@ideasonboard.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20250924124713.3361707-1-barnabas.pocze@ideasonboard.com>\n\t<20250924124713.3361707-5-barnabas.pocze@ideasonboard.com>\n\t<2s6wAPH8zXMMSXzgYofA99LfbkO1rC7RjoGnrQFEvCoP7sbvIakgZp3qI9qYFrIzS6mpfQ8HjsXLyienzxKBww==@protonmail.internalid>\n\t<175975622282.3214037.8888742265664274382@localhost>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Content-Language":"en-US, hu-HU","In-Reply-To":"<175975622282.3214037.8888742265664274382@localhost>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]