[{"id":28095,"web_url":"https://patchwork.libcamera.org/comment/28095/","msgid":"<CAEmqJPo=zbrEAsWQXA0-7X=rxk_gDC81sET4xNpVB5CS0RuboQ@mail.gmail.com>","date":"2023-11-17T10:41:18","subject":"Re: [libcamera-devel] [PATCH v1 0/5] Vendor controls and properties","submitter":{"id":34,"url":"https://patchwork.libcamera.org/api/people/34/","name":"Naushir Patuck","email":"naush@raspberrypi.com"},"content":"Hi,\n\nGentle ping on some feedback for this work please.\n\nThanks!\nNaush\n\nOn Fri, 10 Nov 2023 at 10:59, Naushir Patuck <naush@raspberrypi.com> wrote:\n>\n> Hi,\n>\n> This change introduces a first attempt at implementing vendor specific controls\n> and properties in libcamera.  Vendor controls and properties live in their own\n> namespace, and each vendor must now reserve a numeric control id range to avoid\n> any id value clashes.  Vendor controls may either live in the libcamera\n> control_ids.yaml/property_ids.yaml files or preferably separate vendor specific\n> files.\n>\n> To designate a vendor control, the YAML control description must contain a\n> \"vendor: <vendor_string>\" tag.  For example,\n>\n> - RaspberryPiExampleControl:\n>     type: string\n>     vendor: rpi\n>     description: |\n>       Example vendor control with the \"rpi\" vendor tag.\n>\n> will create a control in the libcamera::controls::rpi namespace, with the\n> numeric id value taken from the \"rpi\" reservation.  Additionally, a #define\n> LIBCAMERA_RPI_VENDOR_CONTROL will be available for applications to selectively\n> compile in vendor control support.  Similar applies to the property generation.\n>\n> The current mechanism for draft controls and propertiers have been deprecated,\n> and now these are designated with the \"draft\" vendor tag.  Note that this causes\n> an API breaking change since the numeric control id values for draft control\n> have their own designated range and namespace.  So, for example, the use of\n> controls::NOISE_REDUCTION_MODE will need to be replaced with\n> controls::draft::NOISE_REDUCTION_MODE.\n>\n> Thanks,\n> Naush\n>\n> Naushir Patuck (5):\n>   controls: Add vendor control/property support to generation scripts\n>   controls: build: Allow separate vendor control YAML files\n>   libcamera: control: Add vendor control id range reservation\n>   libcamera: controls: Use vendor tags for draft controls and properties\n>   documentation: Document vendor specific control and properties\n>     handling\n>\n>  Documentation/guides/pipeline-handler.rst     |  53 ++++++\n>  include/libcamera/control_ids.h.in            |   6 +-\n>  include/libcamera/meson.build                 |  58 +++++-\n>  include/libcamera/property_ids.h.in           |   8 +-\n>  meson.build                                   |   2 +\n>  src/ipa/rpi/common/ipa_base.cpp               |   2 +-\n>  src/ipa/rpi/vc4/vc4.cpp                       |   2 +-\n>  src/libcamera/control_ids.cpp.in              |  16 +-\n>  src/libcamera/control_ids.yaml                |  20 +--\n>  src/libcamera/control_ids_rpi.yaml            |  17 ++\n>  src/libcamera/control_ranges.yaml             |  17 ++\n>  src/libcamera/meson.build                     |  20 ++-\n>  src/libcamera/property_ids.cpp.in             |  16 +-\n>  src/libcamera/property_ids.yaml               |   2 +-\n>  src/py/libcamera/gen-py-controls.py           |  31 +++-\n>  src/py/libcamera/meson.build                  |  26 +--\n>  src/py/libcamera/py_controls_generated.cpp.in |   6 +-\n>  .../libcamera/py_properties_generated.cpp.in  |   4 +-\n>  utils/gen-controls.py                         | 169 +++++++++++++-----\n>  19 files changed, 348 insertions(+), 127 deletions(-)\n>  create mode 100644 src/libcamera/control_ids_rpi.yaml\n>  create mode 100644 src/libcamera/control_ranges.yaml\n>\n> --\n> 2.34.1\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 DBB10C3200\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 17 Nov 2023 10:41:57 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 1AD21629BC;\n\tFri, 17 Nov 2023 11:41:57 +0100 (CET)","from mail-yw1-x112d.google.com (mail-yw1-x112d.google.com\n\t[IPv6:2607:f8b0:4864:20::112d])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B73D361DB0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 17 Nov 2023 11:41:54 +0100 (CET)","by mail-yw1-x112d.google.com with SMTP id\n\t00721157ae682-5a86b6391e9so20935237b3.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 17 Nov 2023 02:41:54 -0800 (PST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1700217717;\n\tbh=xpfxtB7XO+Y0iyXIuw5ca9HA6fdOMZ38d2wYyFx25yI=;\n\th=References:In-Reply-To:Date:To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:\n\tFrom;\n\tb=s4E/tgH5snrgI2607VkiZQCtuznJnVpkyc0AAkFWvU42kU7xUsyaDJ+7TlT3PXOF5\n\tDInPTfgOtIS1bt4d2F01L8jStN068X2koBk8DW1ASTjqBjWwTs3FhMAc0sI76jaZXo\n\t64aRt2j1UFr29kUvAvKHl2KXtVAKIuL9h4RJmrjFb6X2f0XkJiKc1LYkge9Yctuxec\n\t+b8yCnnk+i4f2cx2Qs+OVOF3P2DG7zUwEnD0KVpxFc25YdOHshzuP9HN8TyQo75LPR\n\tWkZREingLP5YpKjrooeQIOqRvc5+9eZIvzDXlsh7fx8Z7Z7ejlniMfeJFqpVueOKFl\n\tJBnJhrGU5V47g==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1700217713; x=1700822513;\n\tdarn=lists.libcamera.org; \n\th=to:subject:message-id:date:from:in-reply-to:references:mime-version\n\t:from:to:cc:subject:date:message-id:reply-to;\n\tbh=rKZ6bZfe0xeddc/GKg0P3PKHkJ34KbunOGUYYwe4kiA=;\n\tb=h8TVYYD11n0LPaSQTWDeVxL2KLWSuCMsHA/Ce72wzwUZrPq83a5xKsSAqA8GV7v90v\n\tcbMDEq0Jq8zKLN0ibUzzIImfRh1To7NR7jjig7R+o+4QmvpkH2NPuksOZWE35zwetZv4\n\tGtJUP4pFacHlNePsd9dakVwFV8DPbhe8pzoHJjJQIPKCB4FL7JNLgOoE5bWZB0d92dgH\n\tcSCmgaIK9Nikr3zXAJ+XaMISmpSHNyMiw0rmi5AoQNHp3zi13E1N5YNZZ/TYkvTgXrpS\n\tAZP17btVfDNL8GDwdHP9efKBgh133chm+6MLu5QpCzEQrejTj7yP3+KAIvc1Ab3RBakB\n\tThYA=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"h8TVYYD1\"; dkim-atps=neutral","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1700217713; x=1700822513;\n\th=to:subject:message-id:date:from:in-reply-to:references:mime-version\n\t:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;\n\tbh=rKZ6bZfe0xeddc/GKg0P3PKHkJ34KbunOGUYYwe4kiA=;\n\tb=uI6RjasUTBhkTsvnXBTjF/R2nB1BzK9skKoF7UdkE75dKvq5WAlEUPFz7FRAYVds4v\n\t6826C4uVeguw35CgF03mIurlwtanAQlh0AM2yhZfugZvdoqEa04cNYzl9by8FvSA791A\n\t4lgUC7FoX0olazzFQVfphoKzk4ESqIHwLrAQXRwgffLaAoI7gs5eXXrpdYr2GoTu7yxD\n\ts5GlqvvEbF2V6ksRx3wWCspM4mBfMIoSSlDG+jfYCVdwO52q8tsBqg+VUmQ5X6EGplRV\n\tY+Rsfll5IJ0KAlxFk39WRqH2MvExw/LviEMHY06bGWdvaSrSJn21bRe02lbcJOdRY5oy\n\tpXvw==","X-Gm-Message-State":"AOJu0YyiwzdQn7eoHj9HeAPU9VfUxKD8imPsWQyy4MdfTNa8d7oqTLco\n\tMKG+9UA+hl+KIHAD+OY2boNPEc3sYwGVU6Y/892PA6yfskKHXc96Y/Y=","X-Google-Smtp-Source":"AGHT+IH3lgMvvFB8uy4jlupL/qhVQZsx9VxJpl77R9nPZHGzt0wb9ZJeQ7Q3cAOocdSeYa7L5lsyJD0jHc8/n9h+vMY=","X-Received":"by 2002:a81:7208:0:b0:59b:2be2:3560 with SMTP id\n\tn8-20020a817208000000b0059b2be23560mr18792884ywc.48.1700217713239;\n\tFri, 17 Nov 2023 02:41:53 -0800 (PST)","MIME-Version":"1.0","References":"<20231110110002.21381-1-naush@raspberrypi.com>","In-Reply-To":"<20231110110002.21381-1-naush@raspberrypi.com>","Date":"Fri, 17 Nov 2023 10:41:18 +0000","Message-ID":"<CAEmqJPo=zbrEAsWQXA0-7X=rxk_gDC81sET4xNpVB5CS0RuboQ@mail.gmail.com>","To":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH v1 0/5] Vendor controls and properties","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>","From":"Naushir Patuck via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Naushir Patuck <naush@raspberrypi.com>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":28096,"web_url":"https://patchwork.libcamera.org/comment/28096/","msgid":"<20231117113017.GG21041@pendragon.ideasonboard.com>","date":"2023-11-17T11:30:17","subject":"Re: [libcamera-devel] [PATCH v1 0/5] Vendor controls and properties","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Naush,\n\nOn Fri, Nov 17, 2023 at 10:41:18AM +0000, Naushir Patuck via libcamera-devel wrote:\n> Hi,\n> \n> Gentle ping on some feedback for this work please.\n\nI haven't forgotten, and I'll review this series today. I've attended\nLPC on Monday to Wednesday this week, which made the last few days quite\nhectic.\n\n> On Fri, 10 Nov 2023 at 10:59, Naushir Patuck wrote:\n> >\n> > Hi,\n> >\n> > This change introduces a first attempt at implementing vendor specific controls\n> > and properties in libcamera.  Vendor controls and properties live in their own\n> > namespace, and each vendor must now reserve a numeric control id range to avoid\n> > any id value clashes.  Vendor controls may either live in the libcamera\n> > control_ids.yaml/property_ids.yaml files or preferably separate vendor specific\n> > files.\n> >\n> > To designate a vendor control, the YAML control description must contain a\n> > \"vendor: <vendor_string>\" tag.  For example,\n> >\n> > - RaspberryPiExampleControl:\n> >     type: string\n> >     vendor: rpi\n> >     description: |\n> >       Example vendor control with the \"rpi\" vendor tag.\n> >\n> > will create a control in the libcamera::controls::rpi namespace, with the\n> > numeric id value taken from the \"rpi\" reservation.  Additionally, a #define\n> > LIBCAMERA_RPI_VENDOR_CONTROL will be available for applications to selectively\n> > compile in vendor control support.  Similar applies to the property generation.\n> >\n> > The current mechanism for draft controls and propertiers have been deprecated,\n> > and now these are designated with the \"draft\" vendor tag.  Note that this causes\n> > an API breaking change since the numeric control id values for draft control\n> > have their own designated range and namespace.  So, for example, the use of\n> > controls::NOISE_REDUCTION_MODE will need to be replaced with\n> > controls::draft::NOISE_REDUCTION_MODE.\n> >\n> > Thanks,\n> > Naush\n> >\n> > Naushir Patuck (5):\n> >   controls: Add vendor control/property support to generation scripts\n> >   controls: build: Allow separate vendor control YAML files\n> >   libcamera: control: Add vendor control id range reservation\n> >   libcamera: controls: Use vendor tags for draft controls and properties\n> >   documentation: Document vendor specific control and properties\n> >     handling\n> >\n> >  Documentation/guides/pipeline-handler.rst     |  53 ++++++\n> >  include/libcamera/control_ids.h.in            |   6 +-\n> >  include/libcamera/meson.build                 |  58 +++++-\n> >  include/libcamera/property_ids.h.in           |   8 +-\n> >  meson.build                                   |   2 +\n> >  src/ipa/rpi/common/ipa_base.cpp               |   2 +-\n> >  src/ipa/rpi/vc4/vc4.cpp                       |   2 +-\n> >  src/libcamera/control_ids.cpp.in              |  16 +-\n> >  src/libcamera/control_ids.yaml                |  20 +--\n> >  src/libcamera/control_ids_rpi.yaml            |  17 ++\n> >  src/libcamera/control_ranges.yaml             |  17 ++\n> >  src/libcamera/meson.build                     |  20 ++-\n> >  src/libcamera/property_ids.cpp.in             |  16 +-\n> >  src/libcamera/property_ids.yaml               |   2 +-\n> >  src/py/libcamera/gen-py-controls.py           |  31 +++-\n> >  src/py/libcamera/meson.build                  |  26 +--\n> >  src/py/libcamera/py_controls_generated.cpp.in |   6 +-\n> >  .../libcamera/py_properties_generated.cpp.in  |   4 +-\n> >  utils/gen-controls.py                         | 169 +++++++++++++-----\n> >  19 files changed, 348 insertions(+), 127 deletions(-)\n> >  create mode 100644 src/libcamera/control_ids_rpi.yaml\n> >  create mode 100644 src/libcamera/control_ranges.yaml","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 0C63FBDE6B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 17 Nov 2023 11:30:15 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 1EB56629BC;\n\tFri, 17 Nov 2023 12:30:14 +0100 (CET)","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 19F9F61DB2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 17 Nov 2023 12:30:12 +0100 (CET)","from pendragon.ideasonboard.com (213-243-189-158.bb.dnainternet.fi\n\t[213.243.189.158])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 392E9922;\n\tFri, 17 Nov 2023 12:29:44 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1700220614;\n\tbh=hz8PaJ/TDr2aqXJpz8vp0g5UvisJCpmI2dNmoQ9LzLw=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=y+lYLydJYBRzkDktmClVQYmxMsQo/PhdiPSwH7LPX22d0CT8OWTOwzJAj1EP+XVdR\n\tcwYNOyZOrzW4sXN4PbKbu/8QA3jGCNNcz5iJ8IsmwRNhUtqFsqYsKrvC84+3S2mPfG\n\tXsdRKr8ycI4ouOvAXqSpjX2a8hdtEgOkxFZKInmgP5whhgO+SuuhWNnqTqnzkwCDg5\n\tbBUMIPAe9YvUhtMZ9l8WZTxlvtO/Fk5INrgDsOSJN76Bmn9zjbor1nz2A77OJlw9DU\n\tJjA9liwraBFQvbmS/bLdwLjl+WmUqvuAmLkYUYhyaMO9P35v9n/akeLdi2BsqwCnm3\n\tcVrgTknAY7Q1Q==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1700220584;\n\tbh=hz8PaJ/TDr2aqXJpz8vp0g5UvisJCpmI2dNmoQ9LzLw=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=iIgYxiqOH0gJ/MOZU0je029TBel9DD0gDD5756Y4RUGsucVO/1YTBrUupT2+lkz1G\n\tOYTumIljjbPercqAUPAow+iMHGrCVV33NUnB16naatnPIsbddyEyfhRIlLbkUUPVol\n\tKbIfplD0KqPfqMPsa30hF62UaR6K8hj3snDJXajM="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"iIgYxiqO\"; dkim-atps=neutral","Date":"Fri, 17 Nov 2023 13:30:17 +0200","To":"Naushir Patuck <naush@raspberrypi.com>","Message-ID":"<20231117113017.GG21041@pendragon.ideasonboard.com>","References":"<20231110110002.21381-1-naush@raspberrypi.com>\n\t<CAEmqJPo=zbrEAsWQXA0-7X=rxk_gDC81sET4xNpVB5CS0RuboQ@mail.gmail.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<CAEmqJPo=zbrEAsWQXA0-7X=rxk_gDC81sET4xNpVB5CS0RuboQ@mail.gmail.com>","Subject":"Re: [libcamera-devel] [PATCH v1 0/5] Vendor controls and properties","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>","From":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":28098,"web_url":"https://patchwork.libcamera.org/comment/28098/","msgid":"<20231120023235.GD524@pendragon.ideasonboard.com>","date":"2023-11-20T02:32:35","subject":"Re: [libcamera-devel] [PATCH v1 0/5] Vendor controls and properties","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Naush,\n\nThank you for the patches.\n\nOn Fri, Nov 10, 2023 at 10:59:57AM +0000, Naushir Patuck via libcamera-devel wrote:\n> Hi,\n> \n> This change introduces a first attempt at implementing vendor specific controls\n> and properties in libcamera.  Vendor controls and properties live in their own\n> namespace, and each vendor must now reserve a numeric control id range to avoid\n> any id value clashes.  Vendor controls may either live in the libcamera\n> control_ids.yaml/property_ids.yaml files or preferably separate vendor specific\n> files.\n> \n> To designate a vendor control, the YAML control description must contain a\n> \"vendor: <vendor_string>\" tag.  For example,\n> \n> - RaspberryPiExampleControl:\n>     type: string\n>     vendor: rpi\n>     description: |\n>       Example vendor control with the \"rpi\" vendor tag.\n\nI'm concerned that having to tag each control with the vendor, coupled\nwith the ability to declare vendor controls in the main control_ids.yaml\nfile, will make it a bit messy and difficult to maintain. I would prefer\nenforcing separation of vendor controls in per-vendor files right away.\nYou can then add the vendor property at the top level in the YAML file,\ninstead of specifying it per-control.\n\nI'm also thinking that we should probably move the control and property\nYAML files to a subdirectory, but that's something I can do on top.\n\n> will create a control in the libcamera::controls::rpi namespace, with the\n> numeric id value taken from the \"rpi\" reservation.  Additionally, a #define\n> LIBCAMERA_RPI_VENDOR_CONTROL will be available for applications to selectively\n> compile in vendor control support.  Similar applies to the property generation.\n> \n> The current mechanism for draft controls and propertiers have been deprecated,\n> and now these are designated with the \"draft\" vendor tag.  Note that this causes\n> an API breaking change since the numeric control id values for draft control\n> have their own designated range and namespace.  So, for example, the use of\n> controls::NOISE_REDUCTION_MODE will need to be replaced with\n> controls::draft::NOISE_REDUCTION_MODE.\n\nI like that, thanks.\n\n> Naushir Patuck (5):\n>   controls: Add vendor control/property support to generation scripts\n>   controls: build: Allow separate vendor control YAML files\n>   libcamera: control: Add vendor control id range reservation\n>   libcamera: controls: Use vendor tags for draft controls and properties\n>   documentation: Document vendor specific control and properties\n>     handling\n> \n>  Documentation/guides/pipeline-handler.rst     |  53 ++++++\n>  include/libcamera/control_ids.h.in            |   6 +-\n>  include/libcamera/meson.build                 |  58 +++++-\n>  include/libcamera/property_ids.h.in           |   8 +-\n>  meson.build                                   |   2 +\n>  src/ipa/rpi/common/ipa_base.cpp               |   2 +-\n>  src/ipa/rpi/vc4/vc4.cpp                       |   2 +-\n>  src/libcamera/control_ids.cpp.in              |  16 +-\n>  src/libcamera/control_ids.yaml                |  20 +--\n>  src/libcamera/control_ids_rpi.yaml            |  17 ++\n>  src/libcamera/control_ranges.yaml             |  17 ++\n>  src/libcamera/meson.build                     |  20 ++-\n>  src/libcamera/property_ids.cpp.in             |  16 +-\n>  src/libcamera/property_ids.yaml               |   2 +-\n>  src/py/libcamera/gen-py-controls.py           |  31 +++-\n>  src/py/libcamera/meson.build                  |  26 +--\n>  src/py/libcamera/py_controls_generated.cpp.in |   6 +-\n>  .../libcamera/py_properties_generated.cpp.in  |   4 +-\n>  utils/gen-controls.py                         | 169 +++++++++++++-----\n>  19 files changed, 348 insertions(+), 127 deletions(-)\n>  create mode 100644 src/libcamera/control_ids_rpi.yaml\n>  create mode 100644 src/libcamera/control_ranges.yaml","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 56B96BDE6B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 20 Nov 2023 02:32:33 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id EFFED629B6;\n\tMon, 20 Nov 2023 03:32:31 +0100 (CET)","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 BDFF161DA9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 20 Nov 2023 03:32:29 +0100 (CET)","from pendragon.ideasonboard.com (213-243-189-158.bb.dnainternet.fi\n\t[213.243.189.158])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 1409674A;\n\tMon, 20 Nov 2023 03:31:59 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1700447552;\n\tbh=eByVnWFpYfkt4we5G8vZbi36C8vcHPGyJEYeINvxR/M=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=xuzYjzzH2v8MIt+DFPqbtJez6o48M2LQ4uoIufX5rQu6NETlAeDH+5+mtxQdcI7X4\n\tBq0XApbzHfD/lVubhcJtEGXUAtXHUC4DoW0B3q8NLOOkvHAZ1E4K5Cub+iZzLI/EVt\n\tLN5hXIQfXhb41tap3eYY1SuWPyoxrRNxr0RDI7+jwVlaLDNS46sCsmMODXeyUpXh50\n\te8SwgAcE+Nk61Qm7eSbWCtoctNb3DAhMvz/RqRIaI+JqQ61+KcbfN2Fizelf8eZkBw\n\tauOz0EJt5fnwoiR/z/EiyD+ToXhtHwjNp9T6kR6EnMjp0r8Rpf2+T3+PmLud8q3VS3\n\tGObDJyDYBpvkA==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1700447520;\n\tbh=eByVnWFpYfkt4we5G8vZbi36C8vcHPGyJEYeINvxR/M=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=lvA3giYmPL/qCRXMVux/7eE2f5mmYcEHq87f3LtBLP/GL4fjR28vLULniAMGBMfA2\n\tXpLlB0BaRFjJ5B/0Godj2HxsYSWC59x/3hUZi6BloIWmfsEZFhgZFF+t6MUVK6BHXy\n\tenMXj9+7zAFwp9ROPXMc3rW4gz3POROATHzkhT7o="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"lvA3giYm\"; dkim-atps=neutral","Date":"Mon, 20 Nov 2023 04:32:35 +0200","To":"Naushir Patuck <naush@raspberrypi.com>","Message-ID":"<20231120023235.GD524@pendragon.ideasonboard.com>","References":"<20231110110002.21381-1-naush@raspberrypi.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20231110110002.21381-1-naush@raspberrypi.com>","Subject":"Re: [libcamera-devel] [PATCH v1 0/5] Vendor controls and properties","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>","From":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":28104,"web_url":"https://patchwork.libcamera.org/comment/28104/","msgid":"<170046208404.4041136.1133935482713714785@ping.linuxembedded.co.uk>","date":"2023-11-20T06:34:44","subject":"Re: [libcamera-devel] [PATCH v1 0/5] Vendor controls and properties","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Laurent Pinchart via libcamera-devel (2023-11-20 02:32:35)\n> Hi Naush,\n> \n> Thank you for the patches.\n> \n> On Fri, Nov 10, 2023 at 10:59:57AM +0000, Naushir Patuck via libcamera-devel wrote:\n> > Hi,\n> > \n> > This change introduces a first attempt at implementing vendor specific controls\n> > and properties in libcamera.  Vendor controls and properties live in their own\n> > namespace, and each vendor must now reserve a numeric control id range to avoid\n> > any id value clashes.  Vendor controls may either live in the libcamera\n> > control_ids.yaml/property_ids.yaml files or preferably separate vendor specific\n> > files.\n> > \n> > To designate a vendor control, the YAML control description must contain a\n> > \"vendor: <vendor_string>\" tag.  For example,\n> > \n> > - RaspberryPiExampleControl:\n> >     type: string\n> >     vendor: rpi\n> >     description: |\n> >       Example vendor control with the \"rpi\" vendor tag.\n> \n> I'm concerned that having to tag each control with the vendor, coupled\n> with the ability to declare vendor controls in the main control_ids.yaml\n> file, will make it a bit messy and difficult to maintain. I would prefer\n> enforcing separation of vendor controls in per-vendor files right away.\n> You can then add the vendor property at the top level in the YAML file,\n> instead of specifying it per-control.\n> \n> I'm also thinking that we should probably move the control and property\n> YAML files to a subdirectory, but that's something I can do on top.\n\nI would also likely prefer a per-vendor file.\n\n\n> > will create a control in the libcamera::controls::rpi namespace, with the\n> > numeric id value taken from the \"rpi\" reservation.  Additionally, a #define\n> > LIBCAMERA_RPI_VENDOR_CONTROL will be available for applications to selectively\n> > compile in vendor control support.  Similar applies to the property generation.\n> > \n> > The current mechanism for draft controls and propertiers have been deprecated,\n> > and now these are designated with the \"draft\" vendor tag.  Note that this causes\n> > an API breaking change since the numeric control id values for draft control\n> > have their own designated range and namespace.  So, for example, the use of\n> > controls::NOISE_REDUCTION_MODE will need to be replaced with\n> > controls::draft::NOISE_REDUCTION_MODE.\n> \n> I like that, thanks.\n\nYes, moving draft controls to become 'a vendor' set is a good\ndemonstration and abstraction here I think.\n\n\nInterestingly, or rather ... annoyingly - that wasn't identified by the\nabi-compatibility checker ...\n\n(\n```\nsudo apt install abi-compliance-checker \n./utils/abi-compat.sh origin/master HEAD\n```\n)\n\n\n\n> \n> > Naushir Patuck (5):\n> >   controls: Add vendor control/property support to generation scripts\n> >   controls: build: Allow separate vendor control YAML files\n> >   libcamera: control: Add vendor control id range reservation\n> >   libcamera: controls: Use vendor tags for draft controls and properties\n> >   documentation: Document vendor specific control and properties\n> >     handling\n> > \n> >  Documentation/guides/pipeline-handler.rst     |  53 ++++++\n> >  include/libcamera/control_ids.h.in            |   6 +-\n> >  include/libcamera/meson.build                 |  58 +++++-\n> >  include/libcamera/property_ids.h.in           |   8 +-\n> >  meson.build                                   |   2 +\n> >  src/ipa/rpi/common/ipa_base.cpp               |   2 +-\n> >  src/ipa/rpi/vc4/vc4.cpp                       |   2 +-\n> >  src/libcamera/control_ids.cpp.in              |  16 +-\n> >  src/libcamera/control_ids.yaml                |  20 +--\n> >  src/libcamera/control_ids_rpi.yaml            |  17 ++\n> >  src/libcamera/control_ranges.yaml             |  17 ++\n> >  src/libcamera/meson.build                     |  20 ++-\n> >  src/libcamera/property_ids.cpp.in             |  16 +-\n> >  src/libcamera/property_ids.yaml               |   2 +-\n> >  src/py/libcamera/gen-py-controls.py           |  31 +++-\n> >  src/py/libcamera/meson.build                  |  26 +--\n> >  src/py/libcamera/py_controls_generated.cpp.in |   6 +-\n> >  .../libcamera/py_properties_generated.cpp.in  |   4 +-\n> >  utils/gen-controls.py                         | 169 +++++++++++++-----\n> >  19 files changed, 348 insertions(+), 127 deletions(-)\n> >  create mode 100644 src/libcamera/control_ids_rpi.yaml\n> >  create mode 100644 src/libcamera/control_ranges.yaml\n> \n> -- \n> Regards,\n> \n> Laurent Pinchart","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 2E1D9C3200\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 20 Nov 2023 06:34:50 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 23C6E629BC;\n\tMon, 20 Nov 2023 07:34:49 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E6CF861DA9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 20 Nov 2023 07:34:46 +0100 (CET)","from pendragon.ideasonboard.com\n\t(aztw-30-b2-v4wan-166917-cust845.vm26.cable.virginm.net\n\t[82.37.23.78])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 27DB974A;\n\tMon, 20 Nov 2023 07:34:17 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1700462089;\n\tbh=wLdrYlWLviZJPCcQJNIqOt/sANvkwOlVjGxOxFwfKlg=;\n\th=In-Reply-To:References:To:Date:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=PdzBh74nkxLn97cyGYe4D7BSix2W3pxntm2spuA40GGRFyUjV61c5uKjOVCK9qpHS\n\tqMyzvN7KU9n3NWOt6Tx6Zj9PEsxx2sxxWIfLb05TSFjCOEYV8KjFj3W+Z3SFFMKVlX\n\tcAzbg2Zzf3RAn+O1k1y5WzINErvomB7lXINZTvqYlsh2MPgwyg6jaQ3NT8m5nzs4V0\n\tlC/1hJ7VVOD/MVTAO52fLjVMM8M3B0Z5bpTCX4bl5YknINyO3WkhCUwaQzwhIGmzNK\n\tFwjI8kT6aANr1hib963xp0VKXVAoBGB4vqLIZBhBTMF7e2DX8mMRToaAZugSqdy3Xt\n\tHzICnaVy5W39Q==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1700462057;\n\tbh=wLdrYlWLviZJPCcQJNIqOt/sANvkwOlVjGxOxFwfKlg=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=ecyNCIVx72K3GzxsqvEb4gdl7t/ljVmQfBqgx4ARDXlTS0MSEdg3nraTWVkMhKOfv\n\tP+/Oz24nMslxT2g5RTlD+v7/dpAsDFjNS2f9/XlpR49cHwzu+TAMxFFx5qRMeWsAZB\n\tGcSKHFAWFKn/iWgWlZ55+WFKTPTRiXzXxvIx4mQ8="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"ecyNCIVx\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20231120023235.GD524@pendragon.ideasonboard.com>","References":"<20231110110002.21381-1-naush@raspberrypi.com>\n\t<20231120023235.GD524@pendragon.ideasonboard.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tLaurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>, \n\tNaushir Patuck <naush@raspberrypi.com>","Date":"Mon, 20 Nov 2023 06:34:44 +0000","Message-ID":"<170046208404.4041136.1133935482713714785@ping.linuxembedded.co.uk>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH v1 0/5] Vendor controls and properties","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>","From":"Kieran Bingham via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":28105,"web_url":"https://patchwork.libcamera.org/comment/28105/","msgid":"<20231120084020.GJ524@pendragon.ideasonboard.com>","date":"2023-11-20T08:40:20","subject":"Re: [libcamera-devel] [PATCH v1 0/5] Vendor controls and properties","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Kieran,\n\nOn Mon, Nov 20, 2023 at 06:34:44AM +0000, Kieran Bingham wrote:\n> Quoting Laurent Pinchart via libcamera-devel (2023-11-20 02:32:35)\n> > On Fri, Nov 10, 2023 at 10:59:57AM +0000, Naushir Patuck via libcamera-devel wrote:\n> > > Hi,\n> > > \n> > > This change introduces a first attempt at implementing vendor specific controls\n> > > and properties in libcamera.  Vendor controls and properties live in their own\n> > > namespace, and each vendor must now reserve a numeric control id range to avoid\n> > > any id value clashes.  Vendor controls may either live in the libcamera\n> > > control_ids.yaml/property_ids.yaml files or preferably separate vendor specific\n> > > files.\n> > > \n> > > To designate a vendor control, the YAML control description must contain a\n> > > \"vendor: <vendor_string>\" tag.  For example,\n> > > \n> > > - RaspberryPiExampleControl:\n> > >     type: string\n> > >     vendor: rpi\n> > >     description: |\n> > >       Example vendor control with the \"rpi\" vendor tag.\n> > \n> > I'm concerned that having to tag each control with the vendor, coupled\n> > with the ability to declare vendor controls in the main control_ids.yaml\n> > file, will make it a bit messy and difficult to maintain. I would prefer\n> > enforcing separation of vendor controls in per-vendor files right away.\n> > You can then add the vendor property at the top level in the YAML file,\n> > instead of specifying it per-control.\n> > \n> > I'm also thinking that we should probably move the control and property\n> > YAML files to a subdirectory, but that's something I can do on top.\n> \n> I would also likely prefer a per-vendor file.\n> \n> > > will create a control in the libcamera::controls::rpi namespace, with the\n> > > numeric id value taken from the \"rpi\" reservation.  Additionally, a #define\n> > > LIBCAMERA_RPI_VENDOR_CONTROL will be available for applications to selectively\n> > > compile in vendor control support.  Similar applies to the property generation.\n> > > \n> > > The current mechanism for draft controls and propertiers have been deprecated,\n> > > and now these are designated with the \"draft\" vendor tag.  Note that this causes\n> > > an API breaking change since the numeric control id values for draft control\n> > > have their own designated range and namespace.  So, for example, the use of\n> > > controls::NOISE_REDUCTION_MODE will need to be replaced with\n> > > controls::draft::NOISE_REDUCTION_MODE.\n> > \n> > I like that, thanks.\n> \n> Yes, moving draft controls to become 'a vendor' set is a good\n> demonstration and abstraction here I think.\n> \n> \n> Interestingly, or rather ... annoyingly - that wasn't identified by the\n> abi-compatibility checker ...\n> \n> (\n> ```\n> sudo apt install abi-compliance-checker \n> ./utils/abi-compat.sh origin/master HEAD\n> ```\n> )\n\nAs the tool has been unmaintained for 2 years, trying it libabigail may\nbe a good idea when time permits. When :-)\n\n> > > Naushir Patuck (5):\n> > >   controls: Add vendor control/property support to generation scripts\n> > >   controls: build: Allow separate vendor control YAML files\n> > >   libcamera: control: Add vendor control id range reservation\n> > >   libcamera: controls: Use vendor tags for draft controls and properties\n> > >   documentation: Document vendor specific control and properties\n> > >     handling\n> > > \n> > >  Documentation/guides/pipeline-handler.rst     |  53 ++++++\n> > >  include/libcamera/control_ids.h.in            |   6 +-\n> > >  include/libcamera/meson.build                 |  58 +++++-\n> > >  include/libcamera/property_ids.h.in           |   8 +-\n> > >  meson.build                                   |   2 +\n> > >  src/ipa/rpi/common/ipa_base.cpp               |   2 +-\n> > >  src/ipa/rpi/vc4/vc4.cpp                       |   2 +-\n> > >  src/libcamera/control_ids.cpp.in              |  16 +-\n> > >  src/libcamera/control_ids.yaml                |  20 +--\n> > >  src/libcamera/control_ids_rpi.yaml            |  17 ++\n> > >  src/libcamera/control_ranges.yaml             |  17 ++\n> > >  src/libcamera/meson.build                     |  20 ++-\n> > >  src/libcamera/property_ids.cpp.in             |  16 +-\n> > >  src/libcamera/property_ids.yaml               |   2 +-\n> > >  src/py/libcamera/gen-py-controls.py           |  31 +++-\n> > >  src/py/libcamera/meson.build                  |  26 +--\n> > >  src/py/libcamera/py_controls_generated.cpp.in |   6 +-\n> > >  .../libcamera/py_properties_generated.cpp.in  |   4 +-\n> > >  utils/gen-controls.py                         | 169 +++++++++++++-----\n> > >  19 files changed, 348 insertions(+), 127 deletions(-)\n> > >  create mode 100644 src/libcamera/control_ids_rpi.yaml\n> > >  create mode 100644 src/libcamera/control_ranges.yaml","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 8E43CBDE6B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 20 Nov 2023 08:40:17 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 00401629B6;\n\tMon, 20 Nov 2023 09:40:16 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id DAE9961DAD\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 20 Nov 2023 09:40:14 +0100 (CET)","from pendragon.ideasonboard.com (213-243-189-158.bb.dnainternet.fi\n\t[213.243.189.158])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id EC184484;\n\tMon, 20 Nov 2023 09:39:44 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1700469617;\n\tbh=YJF+wQ+dfWOV+csTgmXlnUHaXUfYj1xWrgHb415R3mQ=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=KmdJJFnrwof7TQR+e/UWJK2aajKTaJszvZvue957VHSmrApa7jovssvfUHoziN3rS\n\t65xBMjzT7pRK7/o2mpbpI/0HF6AgvVxOe9oyRZRsFpXhxas0ayoHddSSw6sorSHSM3\n\tSH6cFEks8M9HrRS0+3wyBlc7SPKySIYe1lkBP0R41GFRUL15v197O9zkOB3UG6Ktam\n\ttSNYwuxwbrg4TYIW3Axa7sTHIbUfcnyNLnrTNqSufFqX1ESoSpRHeSgO5eHDSHzIHM\n\tKCTclYAU8WOrWF1t/jcT/rsFW/UnoWcZhywFyShrwdHnkNzZ6WMsoiha/4/8MRLXt+\n\tWaXRSaaH68cXQ==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1700469585;\n\tbh=YJF+wQ+dfWOV+csTgmXlnUHaXUfYj1xWrgHb415R3mQ=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=hjA4dZ97kbIaqFOrAqND5TgXeuNr5n3AfSVIWiV8Q91sGM8NGGCqPvfL2YnU0+6GN\n\tNS+J6jq68+0PRQKXZ6H5VLUpDM4DBksyXor7BrYcCe1zoAQDeBtCpZ0Rw0zUDCQDOI\n\teSzq3Y1BxUBZWmK8rkp/hLXhP9U3+JEVjQO+IlLo="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"hjA4dZ97\"; dkim-atps=neutral","Date":"Mon, 20 Nov 2023 10:40:20 +0200","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20231120084020.GJ524@pendragon.ideasonboard.com>","References":"<20231110110002.21381-1-naush@raspberrypi.com>\n\t<20231120023235.GD524@pendragon.ideasonboard.com>\n\t<170046208404.4041136.1133935482713714785@ping.linuxembedded.co.uk>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<170046208404.4041136.1133935482713714785@ping.linuxembedded.co.uk>","Subject":"Re: [libcamera-devel] [PATCH v1 0/5] Vendor controls and properties","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>","From":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":28106,"web_url":"https://patchwork.libcamera.org/comment/28106/","msgid":"<CAEmqJPoNiQarp2t+mmUx_u48yHpT=sA4v-HW4vyv9DEn3QD0Yg@mail.gmail.com>","date":"2023-11-20T09:46:34","subject":"Re: [libcamera-devel] [PATCH v1 0/5] Vendor controls and properties","submitter":{"id":34,"url":"https://patchwork.libcamera.org/api/people/34/","name":"Naushir Patuck","email":"naush@raspberrypi.com"},"content":"Hi Laurent and Kieran,\n\nThank you for the feedback.\n\nOn Mon, 20 Nov 2023 at 08:40, Laurent Pinchart\n<laurent.pinchart@ideasonboard.com> wrote:\n>\n> Hi Kieran,\n>\n> On Mon, Nov 20, 2023 at 06:34:44AM +0000, Kieran Bingham wrote:\n> > Quoting Laurent Pinchart via libcamera-devel (2023-11-20 02:32:35)\n> > > On Fri, Nov 10, 2023 at 10:59:57AM +0000, Naushir Patuck via libcamera-devel wrote:\n> > > > Hi,\n> > > >\n> > > > This change introduces a first attempt at implementing vendor specific controls\n> > > > and properties in libcamera.  Vendor controls and properties live in their own\n> > > > namespace, and each vendor must now reserve a numeric control id range to avoid\n> > > > any id value clashes.  Vendor controls may either live in the libcamera\n> > > > control_ids.yaml/property_ids.yaml files or preferably separate vendor specific\n> > > > files.\n> > > >\n> > > > To designate a vendor control, the YAML control description must contain a\n> > > > \"vendor: <vendor_string>\" tag.  For example,\n> > > >\n> > > > - RaspberryPiExampleControl:\n> > > >     type: string\n> > > >     vendor: rpi\n> > > >     description: |\n> > > >       Example vendor control with the \"rpi\" vendor tag.\n> > >\n> > > I'm concerned that having to tag each control with the vendor, coupled\n> > > with the ability to declare vendor controls in the main control_ids.yaml\n> > > file, will make it a bit messy and difficult to maintain. I would prefer\n> > > enforcing separation of vendor controls in per-vendor files right away.\n> > > You can then add the vendor property at the top level in the YAML file,\n> > > instead of specifying it per-control.\n> > >\n> > > I'm also thinking that we should probably move the control and property\n> > > YAML files to a subdirectory, but that's something I can do on top.\n> >\n> > I would also likely prefer a per-vendor file.\n\nSure, I'll rework this and only allow vendor specific files for vendor controls.\n\nRegards,\nNaush\n\n> >\n> > > > will create a control in the libcamera::controls::rpi namespace, with the\n> > > > numeric id value taken from the \"rpi\" reservation.  Additionally, a #define\n> > > > LIBCAMERA_RPI_VENDOR_CONTROL will be available for applications to selectively\n> > > > compile in vendor control support.  Similar applies to the property generation.\n> > > >\n> > > > The current mechanism for draft controls and propertiers have been deprecated,\n> > > > and now these are designated with the \"draft\" vendor tag.  Note that this causes\n> > > > an API breaking change since the numeric control id values for draft control\n> > > > have their own designated range and namespace.  So, for example, the use of\n> > > > controls::NOISE_REDUCTION_MODE will need to be replaced with\n> > > > controls::draft::NOISE_REDUCTION_MODE.\n> > >\n> > > I like that, thanks.\n> >\n> > Yes, moving draft controls to become 'a vendor' set is a good\n> > demonstration and abstraction here I think.\n> >\n> >\n> > Interestingly, or rather ... annoyingly - that wasn't identified by the\n> > abi-compatibility checker ...\n> >\n> > (\n> > ```\n> > sudo apt install abi-compliance-checker\n> > ./utils/abi-compat.sh origin/master HEAD\n> > ```\n> > )\n>\n> As the tool has been unmaintained for 2 years, trying it libabigail may\n> be a good idea when time permits. When :-)\n>\n> > > > Naushir Patuck (5):\n> > > >   controls: Add vendor control/property support to generation scripts\n> > > >   controls: build: Allow separate vendor control YAML files\n> > > >   libcamera: control: Add vendor control id range reservation\n> > > >   libcamera: controls: Use vendor tags for draft controls and properties\n> > > >   documentation: Document vendor specific control and properties\n> > > >     handling\n> > > >\n> > > >  Documentation/guides/pipeline-handler.rst     |  53 ++++++\n> > > >  include/libcamera/control_ids.h.in            |   6 +-\n> > > >  include/libcamera/meson.build                 |  58 +++++-\n> > > >  include/libcamera/property_ids.h.in           |   8 +-\n> > > >  meson.build                                   |   2 +\n> > > >  src/ipa/rpi/common/ipa_base.cpp               |   2 +-\n> > > >  src/ipa/rpi/vc4/vc4.cpp                       |   2 +-\n> > > >  src/libcamera/control_ids.cpp.in              |  16 +-\n> > > >  src/libcamera/control_ids.yaml                |  20 +--\n> > > >  src/libcamera/control_ids_rpi.yaml            |  17 ++\n> > > >  src/libcamera/control_ranges.yaml             |  17 ++\n> > > >  src/libcamera/meson.build                     |  20 ++-\n> > > >  src/libcamera/property_ids.cpp.in             |  16 +-\n> > > >  src/libcamera/property_ids.yaml               |   2 +-\n> > > >  src/py/libcamera/gen-py-controls.py           |  31 +++-\n> > > >  src/py/libcamera/meson.build                  |  26 +--\n> > > >  src/py/libcamera/py_controls_generated.cpp.in |   6 +-\n> > > >  .../libcamera/py_properties_generated.cpp.in  |   4 +-\n> > > >  utils/gen-controls.py                         | 169 +++++++++++++-----\n> > > >  19 files changed, 348 insertions(+), 127 deletions(-)\n> > > >  create mode 100644 src/libcamera/control_ids_rpi.yaml\n> > > >  create mode 100644 src/libcamera/control_ranges.yaml\n>\n> --\n> Regards,\n>\n> Laurent Pinchart","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 0CC06C3200\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 20 Nov 2023 09:47:13 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4AEA4629BC;\n\tMon, 20 Nov 2023 10:47:12 +0100 (CET)","from mail-yw1-x1134.google.com (mail-yw1-x1134.google.com\n\t[IPv6:2607:f8b0:4864:20::1134])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 71C3661DAD\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 20 Nov 2023 10:47:10 +0100 (CET)","by mail-yw1-x1134.google.com with SMTP id\n\t00721157ae682-5c08c47c055so44644727b3.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 20 Nov 2023 01:47:10 -0800 (PST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1700473632;\n\tbh=QGpHAV3ugES8EpsSw9K72ugfZPNw67qkwmrS4usvmXk=;\n\th=References:In-Reply-To:Date:To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=LIE0t/GJDzgYU5zc101EMEuqX+cQUMQltPkH1daA7KQ7pOZRfEhmyMlHbix19WIo/\n\tcibO0FD6YDrkqGTeoqtAxXBOsfSTmqi0n0DYmU6UvwJJrANi3oZxt6xrb8SoXVBLXc\n\tMpg4ZnSpFj2bwvGZicPkyjF6InJ37bGxEGmrdTYypDX1T0o/gmpSxTjf1QVZ55fzqw\n\thejeWgdLbrqwF2mEu/HycanhQDKfNXFfXBImP4YRyX80/OFjMLhW8bugFtwbzYIeMS\n\tNfcJXcIWlxFtOGKfV+xxE2fzwXPhpQZ3kN/qbp2zwYNOM4ftqRoL37BFnr6/BeLcDa\n\tjymeyB9YG+7jQ==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1700473629; x=1701078429;\n\tdarn=lists.libcamera.org; \n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:from:to:cc:subject:date:message-id:reply-to;\n\tbh=WLSKWoYD3ZE/cF3ARhcF4EdV7IrXPIcNH0Eru8GcMpc=;\n\tb=EyEFUExrRoHl0N+zdfrRnujn9q66NYH9EjigrJE/MzDQ7zy5k5yA72C2ZFwrLZPWt+\n\tQ6Fui9bmtU8zxugi6YwpNqfyjUwQurcbUJrDtHHcLXwsglPZ1TERqYKrBViqB/MTiysh\n\tNcG8MQOnX1hiyI0L7fJmTZEd5lZ3CJ60ax9ACjrlLYkKhUjkjOKKwlgmfRK8cfN0F4mv\n\t5K/FKjDa1BLlEt6vAPg2mBnpUMmZhAw3SD7TKqkB33sc769GPewbwo0G4tDIuxPDnn4G\n\tS2BoJohVlCup1Jfi57d6zBGlDlQjuccUKHwEG7sAf0N1ckUP87/+zcDWAMokEHIA8aUM\n\t8veA=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"EyEFUExr\"; dkim-atps=neutral","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1700473629; x=1701078429;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=WLSKWoYD3ZE/cF3ARhcF4EdV7IrXPIcNH0Eru8GcMpc=;\n\tb=gvDdSNvpwhCDiR9o6riUNy6S+gSHyshOBEJ+xoWxKQS75gQEpIpuJn4nNuODzel4tl\n\to1khMt1RhYQh2lmWsRfsQDsqi+ten4U2+B+PqlBoIdMfVjsEEH91xKtf39ALixYzcT68\n\tfeiTFSTu+d6sxVEiPcyUxddTk716mbk8VbDtHQXcwG5JB5fVdpYTB/MxnI7zMd1ogXU+\n\th9Dz3xkUk2jCStjqy0KefxnsX5w5rb57YbcWyG1sd6YGSQXWpVFSx3qBnbanutw/vuaF\n\t0cTMed3BBiirgtQ+HSx6rtTjeaBXagqX2wCjigIbDQk353KNerR5dgfgJjJB/fsmZ3dr\n\tTSGQ==","X-Gm-Message-State":"AOJu0Yx51qHA7OOln97u/MMkaooXWpqdbfOcbka49+mxjP0qZyQB93cz\n\ttc0mVDcKvqbEMBtIg9YHvOwrZSMNAQkbbDOAg2DP0g==","X-Google-Smtp-Source":"AGHT+IEJYjdS6jb/2PrN0QaK5VWKIdSK6cVnM8pHtVoL4x5C0+EPCe9vCoQCr16Uxo5tBXY36QoaYx2QG7XE0/v142Q=","X-Received":"by 2002:a0d:c947:0:b0:5c4:33d1:1757 with SMTP id\n\tl68-20020a0dc947000000b005c433d11757mr6754596ywd.13.1700473629037;\n\tMon, 20 Nov 2023 01:47:09 -0800 (PST)","MIME-Version":"1.0","References":"<20231110110002.21381-1-naush@raspberrypi.com>\n\t<20231120023235.GD524@pendragon.ideasonboard.com>\n\t<170046208404.4041136.1133935482713714785@ping.linuxembedded.co.uk>\n\t<20231120084020.GJ524@pendragon.ideasonboard.com>","In-Reply-To":"<20231120084020.GJ524@pendragon.ideasonboard.com>","Date":"Mon, 20 Nov 2023 09:46:34 +0000","Message-ID":"<CAEmqJPoNiQarp2t+mmUx_u48yHpT=sA4v-HW4vyv9DEn3QD0Yg@mail.gmail.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH v1 0/5] Vendor controls and properties","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>","From":"Naushir Patuck via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Naushir Patuck <naush@raspberrypi.com>","Cc":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]