[{"id":31865,"web_url":"https://patchwork.libcamera.org/comment/31865/","msgid":"<172952801666.3353069.897225076785394591@ping.linuxembedded.co.uk>","date":"2024-10-21T16:26:56","subject":"Re: [PATCH 1/2] libcamera: Allow enumerating u32 control type","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Harvey Yang (2024-10-11 18:55:11)\n> From: Yudhistira Erlandinata <yerlandinata@google.com>\n> \n> Only allowing V4L2_CTRL_TYPE_U32 control type to be listed in the\n> V4L2Device::controls_, so it can be used together with function\n> V4L2Device::setExtControl. Like many other control types, this type\n> is still not supported in the V4L2Device::getControls and\n> V4L2Device::setControls.\n> \n> Signed-off-by: Yudhistira Erlandinata <yerlandinata@chromium.org>\n> Co-developed-by: Harvey Yang <chenghaoyang@chromium.org>\n> Signed-off-by: Harvey Yang <chenghaoyang@chromium.org>\n> ---\n>  include/libcamera/controls.h  |  6 ++++++\n>  src/libcamera/controls.cpp    | 12 ++++++++++--\n>  src/libcamera/v4l2_device.cpp | 16 +++++++++++++++-\n>  3 files changed, 31 insertions(+), 3 deletions(-)\n> \n> diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h\n> index ca60bbaca..25f68040d 100644\n> --- a/include/libcamera/controls.h\n> +++ b/include/libcamera/controls.h\n> @@ -29,6 +29,7 @@ enum ControlType {\n>         ControlTypeNone,\n>         ControlTypeBool,\n>         ControlTypeByte,\n> +       ControlTypeUnsigned32,\n>         ControlTypeInteger32,\n>         ControlTypeInteger64,\n>         ControlTypeFloat,\n> @@ -62,6 +63,11 @@ struct control_type<uint8_t> {\n>         static constexpr std::size_t size = 0;\n>  };\n>  \n> +template<>\n> +struct control_type<uint32_t> {\n> +       static constexpr ControlType value = ControlTypeUnsigned32;\n\nDoes this need size = 0; ?\n\n> +};\n> +\n>  template<>\n>  struct control_type<int32_t> {\n>         static constexpr ControlType value = ControlTypeInteger32;\n> diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp\n> index 62185d643..8ae295191 100644\n> --- a/src/libcamera/controls.cpp\n> +++ b/src/libcamera/controls.cpp\n> @@ -54,6 +54,7 @@ static constexpr size_t ControlValueSize[] = {\n>         [ControlTypeNone]               = 0,\n>         [ControlTypeBool]               = sizeof(bool),\n>         [ControlTypeByte]               = sizeof(uint8_t),\n> +       [ControlTypeUnsigned32]         = sizeof(uint32_t),\n>         [ControlTypeInteger32]          = sizeof(int32_t),\n>         [ControlTypeInteger64]          = sizeof(int64_t),\n>         [ControlTypeFloat]              = sizeof(float),\n> @@ -74,10 +75,12 @@ static constexpr size_t ControlValueSize[] = {\n>   * The control stores a boolean value\n>   * \\var ControlTypeByte\n>   * The control stores a byte value as an unsigned 8-bit integer\n> + * \\var ControlTypeUnsigned32\n> + * The control stores an unsigned 32-bit integer value\n>   * \\var ControlTypeInteger32\n> - * The control stores a 32-bit integer value\n> + * The control stores a signed 32-bit integer value\n>   * \\var ControlTypeInteger64\n> - * The control stores a 64-bit integer value\n> + * The control stores a signed 64-bit integer value\n>   * \\var ControlTypeFloat\n>   * The control stores a 32-bit floating point value\n>   * \\var ControlTypeString\n> @@ -230,6 +233,11 @@ std::string ControlValue::toString() const\n>                         str += std::to_string(*value);\n>                         break;\n>                 }\n> +               case ControlTypeUnsigned32: {\n> +                       const uint32_t *value = reinterpret_cast<const uint32_t *>(data);\n> +                       str += std::to_string(*value);\n> +                       break;\n> +               }\n>                 case ControlTypeInteger32: {\n>                         const int32_t *value = reinterpret_cast<const int32_t *>(data);\n>                         str += std::to_string(*value);\n> diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp\n> index 68add4f2e..f3454ba24 100644\n> --- a/src/libcamera/v4l2_device.cpp\n> +++ b/src/libcamera/v4l2_device.cpp\n> @@ -9,6 +9,7 @@\n>  \n>  #include <fcntl.h>\n>  #include <map>\n> +#include <stdint.h>\n>  #include <stdlib.h>\n>  #include <string.h>\n>  #include <sys/ioctl.h>\n> @@ -17,11 +18,14 @@\n>  #include <vector>\n>  \n>  #include <linux/v4l2-mediabus.h>\n> +#include <linux/videodev2.h>\n>  \n>  #include <libcamera/base/event_notifier.h>\n>  #include <libcamera/base/log.h>\n>  #include <libcamera/base/utils.h>\n>  \n> +#include <libcamera/controls.h>\n> +\n>  #include \"libcamera/internal/formats.h\"\n>  #include \"libcamera/internal/sysfs.h\"\n>  \n> @@ -488,6 +492,9 @@ ControlType V4L2Device::v4l2CtrlType(uint32_t ctrlType)\n>         case V4L2_CTRL_TYPE_BOOLEAN:\n>                 return ControlTypeBool;\n>  \n> +       case V4L2_CTRL_TYPE_U32:\n> +               return ControlTypeUnsigned32;\n> +\n>         case V4L2_CTRL_TYPE_INTEGER:\n>                 return ControlTypeInteger32;\n>  \n> @@ -536,6 +543,11 @@ std::optional<ControlInfo> V4L2Device::v4l2ControlInfo(const v4l2_query_ext_ctrl\n>                                    static_cast<uint8_t>(ctrl.maximum),\n>                                    static_cast<uint8_t>(ctrl.default_value));\n>  \n> +       case V4L2_CTRL_TYPE_U32:\n> +               return ControlInfo(static_cast<uint32_t>(ctrl.minimum),\n> +                                  static_cast<uint32_t>(ctrl.maximum),\n> +                                  static_cast<uint32_t>(ctrl.default_value));\n> +\n>         case V4L2_CTRL_TYPE_BOOLEAN:\n>                 return ControlInfo(static_cast<bool>(ctrl.minimum),\n>                                    static_cast<bool>(ctrl.maximum),\n> @@ -622,12 +634,14 @@ void V4L2Device::listControls()\n>                 case V4L2_CTRL_TYPE_BITMASK:\n>                 case V4L2_CTRL_TYPE_INTEGER_MENU:\n>                 case V4L2_CTRL_TYPE_U8:\n> +               case V4L2_CTRL_TYPE_U32:\n>                         break;\n>                 /* \\todo Support other control types. */\n>                 default:\n>                         LOG(V4L2, Debug)\n>                                 << \"Control \" << utils::hex(ctrl.id)\n> -                               << \" has unsupported type \" << ctrl.type;\n> +                               << \" has unsupported type \" << ctrl.type\n> +                               << \". Name: \" << ctrl.name;\n\nThis hunk looks like a good change that should be in an independent\npatch. And preumably - if ctrl.name is valid here - then it could\nreplace the hexdump of ctrl.id ...\n\n\n>                         continue;\n>                 }\n>  \n> -- \n> 2.47.0.rc1.288.g06298d1525-goog\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 CFF79C32A3\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 21 Oct 2024 16:27:03 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 86CD365392;\n\tMon, 21 Oct 2024 18:27:02 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2A4916538A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 21 Oct 2024 18:27:00 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 01FCE49E;\n\tMon, 21 Oct 2024 18:25:13 +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=\"k4AgSsgs\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1729527914;\n\tbh=tCfTEEuCmBtF50tnSdTpsVKa2RKQxy+6u/ihwx1SlyQ=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=k4AgSsgsfNzP9WZwWYdqmyXuw1XHLOQY9deoJ4Qoh82y5cPidpqQGc8WWEQQtU2x1\n\tqkFOe9nT//MACsnYmA6DPbjb+zP2AAWCARYFi1Dwnp3FKfTzne+7fiIKW46ZgRGftQ\n\tVnZmEfQicz4k03ZnHN/0wk/NdopO1ppTeD8n//F8=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20241011175653.3530945-2-chenghaoyang@chromium.org>","References":"<20241011175653.3530945-1-chenghaoyang@chromium.org>\n\t<20241011175653.3530945-2-chenghaoyang@chromium.org>","Subject":"Re: [PATCH 1/2] libcamera: Allow enumerating u32 control type","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Yudhistira Erlandinata <yerlandinata@google.com>,\n\tYudhistira Erlandinata <yerlandinata@chromium.org>,\n\tHarvey Yang <chenghaoyang@chromium.org>","To":"Harvey Yang <chenghaoyang@chromium.org>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Mon, 21 Oct 2024 17:26:56 +0100","Message-ID":"<172952801666.3353069.897225076785394591@ping.linuxembedded.co.uk>","User-Agent":"alot/0.10","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":31874,"web_url":"https://patchwork.libcamera.org/comment/31874/","msgid":"<CAEB1ahshSQY4WGOCcBfcopmUr0pcAKWQjKjm1mBdYOOhGLiBcQ@mail.gmail.com>","date":"2024-10-22T09:39:32","subject":"Re: [PATCH 1/2] libcamera: Allow enumerating u32 control type","submitter":{"id":117,"url":"https://patchwork.libcamera.org/api/people/117/","name":"Cheng-Hao Yang","email":"chenghaoyang@chromium.org"},"content":"Hi Kieran,\n\nOn Tue, Oct 22, 2024 at 12:27 AM Kieran Bingham\n<kieran.bingham@ideasonboard.com> wrote:\n>\n> Quoting Harvey Yang (2024-10-11 18:55:11)\n> > From: Yudhistira Erlandinata <yerlandinata@google.com>\n> >\n> > Only allowing V4L2_CTRL_TYPE_U32 control type to be listed in the\n> > V4L2Device::controls_, so it can be used together with function\n> > V4L2Device::setExtControl. Like many other control types, this type\n> > is still not supported in the V4L2Device::getControls and\n> > V4L2Device::setControls.\n> >\n> > Signed-off-by: Yudhistira Erlandinata <yerlandinata@chromium.org>\n> > Co-developed-by: Harvey Yang <chenghaoyang@chromium.org>\n> > Signed-off-by: Harvey Yang <chenghaoyang@chromium.org>\n> > ---\n> >  include/libcamera/controls.h  |  6 ++++++\n> >  src/libcamera/controls.cpp    | 12 ++++++++++--\n> >  src/libcamera/v4l2_device.cpp | 16 +++++++++++++++-\n> >  3 files changed, 31 insertions(+), 3 deletions(-)\n> >\n> > diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h\n> > index ca60bbaca..25f68040d 100644\n> > --- a/include/libcamera/controls.h\n> > +++ b/include/libcamera/controls.h\n> > @@ -29,6 +29,7 @@ enum ControlType {\n> >         ControlTypeNone,\n> >         ControlTypeBool,\n> >         ControlTypeByte,\n> > +       ControlTypeUnsigned32,\n> >         ControlTypeInteger32,\n> >         ControlTypeInteger64,\n> >         ControlTypeFloat,\n> > @@ -62,6 +63,11 @@ struct control_type<uint8_t> {\n> >         static constexpr std::size_t size = 0;\n> >  };\n> >\n> > +template<>\n> > +struct control_type<uint32_t> {\n> > +       static constexpr ControlType value = ControlTypeUnsigned32;\n>\n> Does this need size = 0; ?\n\nSorry, I don't get what you mean...?\n\n>\n> > +};\n> > +\n> >  template<>\n> >  struct control_type<int32_t> {\n> >         static constexpr ControlType value = ControlTypeInteger32;\n> > diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp\n> > index 62185d643..8ae295191 100644\n> > --- a/src/libcamera/controls.cpp\n> > +++ b/src/libcamera/controls.cpp\n> > @@ -54,6 +54,7 @@ static constexpr size_t ControlValueSize[] = {\n> >         [ControlTypeNone]               = 0,\n> >         [ControlTypeBool]               = sizeof(bool),\n> >         [ControlTypeByte]               = sizeof(uint8_t),\n> > +       [ControlTypeUnsigned32]         = sizeof(uint32_t),\n> >         [ControlTypeInteger32]          = sizeof(int32_t),\n> >         [ControlTypeInteger64]          = sizeof(int64_t),\n> >         [ControlTypeFloat]              = sizeof(float),\n> > @@ -74,10 +75,12 @@ static constexpr size_t ControlValueSize[] = {\n> >   * The control stores a boolean value\n> >   * \\var ControlTypeByte\n> >   * The control stores a byte value as an unsigned 8-bit integer\n> > + * \\var ControlTypeUnsigned32\n> > + * The control stores an unsigned 32-bit integer value\n> >   * \\var ControlTypeInteger32\n> > - * The control stores a 32-bit integer value\n> > + * The control stores a signed 32-bit integer value\n> >   * \\var ControlTypeInteger64\n> > - * The control stores a 64-bit integer value\n> > + * The control stores a signed 64-bit integer value\n> >   * \\var ControlTypeFloat\n> >   * The control stores a 32-bit floating point value\n> >   * \\var ControlTypeString\n> > @@ -230,6 +233,11 @@ std::string ControlValue::toString() const\n> >                         str += std::to_string(*value);\n> >                         break;\n> >                 }\n> > +               case ControlTypeUnsigned32: {\n> > +                       const uint32_t *value = reinterpret_cast<const uint32_t *>(data);\n> > +                       str += std::to_string(*value);\n> > +                       break;\n> > +               }\n> >                 case ControlTypeInteger32: {\n> >                         const int32_t *value = reinterpret_cast<const int32_t *>(data);\n> >                         str += std::to_string(*value);\n> > diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp\n> > index 68add4f2e..f3454ba24 100644\n> > --- a/src/libcamera/v4l2_device.cpp\n> > +++ b/src/libcamera/v4l2_device.cpp\n> > @@ -9,6 +9,7 @@\n> >\n> >  #include <fcntl.h>\n> >  #include <map>\n> > +#include <stdint.h>\n> >  #include <stdlib.h>\n> >  #include <string.h>\n> >  #include <sys/ioctl.h>\n> > @@ -17,11 +18,14 @@\n> >  #include <vector>\n> >\n> >  #include <linux/v4l2-mediabus.h>\n> > +#include <linux/videodev2.h>\n> >\n> >  #include <libcamera/base/event_notifier.h>\n> >  #include <libcamera/base/log.h>\n> >  #include <libcamera/base/utils.h>\n> >\n> > +#include <libcamera/controls.h>\n> > +\n> >  #include \"libcamera/internal/formats.h\"\n> >  #include \"libcamera/internal/sysfs.h\"\n> >\n> > @@ -488,6 +492,9 @@ ControlType V4L2Device::v4l2CtrlType(uint32_t ctrlType)\n> >         case V4L2_CTRL_TYPE_BOOLEAN:\n> >                 return ControlTypeBool;\n> >\n> > +       case V4L2_CTRL_TYPE_U32:\n> > +               return ControlTypeUnsigned32;\n> > +\n> >         case V4L2_CTRL_TYPE_INTEGER:\n> >                 return ControlTypeInteger32;\n> >\n> > @@ -536,6 +543,11 @@ std::optional<ControlInfo> V4L2Device::v4l2ControlInfo(const v4l2_query_ext_ctrl\n> >                                    static_cast<uint8_t>(ctrl.maximum),\n> >                                    static_cast<uint8_t>(ctrl.default_value));\n> >\n> > +       case V4L2_CTRL_TYPE_U32:\n> > +               return ControlInfo(static_cast<uint32_t>(ctrl.minimum),\n> > +                                  static_cast<uint32_t>(ctrl.maximum),\n> > +                                  static_cast<uint32_t>(ctrl.default_value));\n> > +\n> >         case V4L2_CTRL_TYPE_BOOLEAN:\n> >                 return ControlInfo(static_cast<bool>(ctrl.minimum),\n> >                                    static_cast<bool>(ctrl.maximum),\n> > @@ -622,12 +634,14 @@ void V4L2Device::listControls()\n> >                 case V4L2_CTRL_TYPE_BITMASK:\n> >                 case V4L2_CTRL_TYPE_INTEGER_MENU:\n> >                 case V4L2_CTRL_TYPE_U8:\n> > +               case V4L2_CTRL_TYPE_U32:\n> >                         break;\n> >                 /* \\todo Support other control types. */\n> >                 default:\n> >                         LOG(V4L2, Debug)\n> >                                 << \"Control \" << utils::hex(ctrl.id)\n> > -                               << \" has unsupported type \" << ctrl.type;\n> > +                               << \" has unsupported type \" << ctrl.type\n> > +                               << \". Name: \" << ctrl.name;\n>\n> This hunk looks like a good change that should be in an independent\n> patch. And preumably - if ctrl.name is valid here - then it could\n> replace the hexdump of ctrl.id ...\n\nRight, I'll remove this hunk from the patch.\n\nBR,\nHarvey\n\n>\n>\n> >                         continue;\n> >                 }\n> >\n> > --\n> > 2.47.0.rc1.288.g06298d1525-goog\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 C30A8C3274\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 22 Oct 2024 09:39:47 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B2B6265392;\n\tTue, 22 Oct 2024 11:39:46 +0200 (CEST)","from mail-lj1-x229.google.com (mail-lj1-x229.google.com\n\t[IPv6:2a00:1450:4864:20::229])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 6CC646053E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 22 Oct 2024 11:39:44 +0200 (CEST)","by mail-lj1-x229.google.com with SMTP id\n\t38308e7fff4ca-2fb3debdc09so42638871fa.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 22 Oct 2024 02:39:44 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=chromium.org header.i=@chromium.org\n\theader.b=\"SVhhk69z\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=chromium.org; s=google; t=1729589984; x=1730194784;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:cc:to:subject:message-id:date:from\n\t:in-reply-to:references:mime-version:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=PTsm00eNi1lPE80l6dTBuQl23+DkWsG01aelCu/A4gA=;\n\tb=SVhhk69znnaPfLOcSWkKbSkWfT5mRIAJ2AcDo/pahhXaJTuQ1MPU0ji1l8rN6KL3FC\n\t4hGicIl8x91YlNq8eE8eRIvYIS9TFSHtNrV653J7gVbMgf7HqOrW7Wwka3UxxMedB246\n\tzJsyYnx5F8mDLrDb8OHDGH+DRmTZjFRDADrR0=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1729589984; x=1730194784;\n\th=content-transfer-encoding:cc:to:subject:message-id:date:from\n\t:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc\n\t:subject:date:message-id:reply-to;\n\tbh=PTsm00eNi1lPE80l6dTBuQl23+DkWsG01aelCu/A4gA=;\n\tb=mO//7d2hPvYf/cMiWjRnKFEkqqIQTVGQGSBZ+40nPdyZNhb4jzNaZkyEg05vljQtIB\n\tieZ9RVqrL6prr9157cLGaBVZUMRBzN1OmhH9YG+FDYjMWy5uG+eUG2ArX+qC6TBDPqwY\n\tEhY/vDAFsNRAgWtKC0r4ce+KwO1jLpOWF6jgPGziNbqisvePGSfaX1DZM2gykpdo5n4U\n\t1Uxati9lhMbI/DAarP3p5bWgMjYi8WcV6lBquZI/7Pg4uWXSK6EuuEr7mc7V0xVkHm5g\n\ti/a9KVYHmOC/MMI9wh6iTKTw2/T3BsSWkz2pgeb6WEwovHcUYUc/PdIBGfx0hdhm19c+\n\txC8g==","X-Gm-Message-State":"AOJu0YyjcAf0OzH2dIP9sqMSugyonBPxCdq5TCENOsca/HPB1iZ1gfB+\n\tXBEKQsLQ9SE6e6ZvFfWHP1+u9v02FIuEQn9ocmZ65cfAIVzX27EuM7cNqVx0BOc7/C6s9MU0pWA\n\tHg7uyXZGkj+zdJdlUz5yaplL5M7YFGTFRRQ52","X-Google-Smtp-Source":"AGHT+IFfutJHdG7P4LPMn2Wxr33ub/+xGk3sDFlGZlTj3cEsNBlaxNWDTd0Gdk6hFPw/8Wn17nHmFh8T7L5gffIyUKI=","X-Received":"by 2002:a05:651c:198b:b0:2fb:5035:11da with SMTP id\n\t38308e7fff4ca-2fc93354e07mr10098461fa.33.1729589983416;\n\tTue, 22 Oct 2024 02:39:43 -0700 (PDT)","MIME-Version":"1.0","References":"<20241011175653.3530945-1-chenghaoyang@chromium.org>\n\t<20241011175653.3530945-2-chenghaoyang@chromium.org>\n\t<172952801666.3353069.897225076785394591@ping.linuxembedded.co.uk>","In-Reply-To":"<172952801666.3353069.897225076785394591@ping.linuxembedded.co.uk>","From":"Cheng-Hao Yang <chenghaoyang@chromium.org>","Date":"Tue, 22 Oct 2024 17:39:32 +0800","Message-ID":"<CAEB1ahshSQY4WGOCcBfcopmUr0pcAKWQjKjm1mBdYOOhGLiBcQ@mail.gmail.com>","Subject":"Re: [PATCH 1/2] libcamera: Allow enumerating u32 control type","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org, \n\tYudhistira Erlandinata <yerlandinata@google.com>, \n\tYudhistira Erlandinata <yerlandinata@chromium.org>","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","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":31875,"web_url":"https://patchwork.libcamera.org/comment/31875/","msgid":"<CAEB1ahvJbmRZBcM1r7nSfRqffSkdXfFcbcYctGCbtzKjCGWeZg@mail.gmail.com>","date":"2024-10-22T09:44:34","subject":"Re: [PATCH 1/2] libcamera: Allow enumerating u32 control type","submitter":{"id":117,"url":"https://patchwork.libcamera.org/api/people/117/","name":"Cheng-Hao Yang","email":"chenghaoyang@chromium.org"},"content":"Hi Kieran,\n\nOn Tue, Oct 22, 2024 at 5:39 PM Cheng-Hao Yang\n<chenghaoyang@chromium.org> wrote:\n>\n> Hi Kieran,\n>\n> On Tue, Oct 22, 2024 at 12:27 AM Kieran Bingham\n> <kieran.bingham@ideasonboard.com> wrote:\n> >\n> > Quoting Harvey Yang (2024-10-11 18:55:11)\n> > > From: Yudhistira Erlandinata <yerlandinata@google.com>\n> > >\n> > > Only allowing V4L2_CTRL_TYPE_U32 control type to be listed in the\n> > > V4L2Device::controls_, so it can be used together with function\n> > > V4L2Device::setExtControl. Like many other control types, this type\n> > > is still not supported in the V4L2Device::getControls and\n> > > V4L2Device::setControls.\n> > >\n> > > Signed-off-by: Yudhistira Erlandinata <yerlandinata@chromium.org>\n> > > Co-developed-by: Harvey Yang <chenghaoyang@chromium.org>\n> > > Signed-off-by: Harvey Yang <chenghaoyang@chromium.org>\n> > > ---\n> > >  include/libcamera/controls.h  |  6 ++++++\n> > >  src/libcamera/controls.cpp    | 12 ++++++++++--\n> > >  src/libcamera/v4l2_device.cpp | 16 +++++++++++++++-\n> > >  3 files changed, 31 insertions(+), 3 deletions(-)\n> > >\n> > > diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h\n> > > index ca60bbaca..25f68040d 100644\n> > > --- a/include/libcamera/controls.h\n> > > +++ b/include/libcamera/controls.h\n> > > @@ -29,6 +29,7 @@ enum ControlType {\n> > >         ControlTypeNone,\n> > >         ControlTypeBool,\n> > >         ControlTypeByte,\n> > > +       ControlTypeUnsigned32,\n> > >         ControlTypeInteger32,\n> > >         ControlTypeInteger64,\n> > >         ControlTypeFloat,\n> > > @@ -62,6 +63,11 @@ struct control_type<uint8_t> {\n> > >         static constexpr std::size_t size = 0;\n> > >  };\n> > >\n> > > +template<>\n> > > +struct control_type<uint32_t> {\n> > > +       static constexpr ControlType value = ControlTypeUnsigned32;\n> >\n> > Does this need size = 0; ?\n>\n> Sorry, I don't get what you mean...?\n\nAh sorry, CrOS mtkisp7 branch doesn't have the patch from Paul.\nAdded in the next version.\n\n>\n> >\n> > > +};\n> > > +\n> > >  template<>\n> > >  struct control_type<int32_t> {\n> > >         static constexpr ControlType value = ControlTypeInteger32;\n> > > diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp\n> > > index 62185d643..8ae295191 100644\n> > > --- a/src/libcamera/controls.cpp\n> > > +++ b/src/libcamera/controls.cpp\n> > > @@ -54,6 +54,7 @@ static constexpr size_t ControlValueSize[] = {\n> > >         [ControlTypeNone]               = 0,\n> > >         [ControlTypeBool]               = sizeof(bool),\n> > >         [ControlTypeByte]               = sizeof(uint8_t),\n> > > +       [ControlTypeUnsigned32]         = sizeof(uint32_t),\n> > >         [ControlTypeInteger32]          = sizeof(int32_t),\n> > >         [ControlTypeInteger64]          = sizeof(int64_t),\n> > >         [ControlTypeFloat]              = sizeof(float),\n> > > @@ -74,10 +75,12 @@ static constexpr size_t ControlValueSize[] = {\n> > >   * The control stores a boolean value\n> > >   * \\var ControlTypeByte\n> > >   * The control stores a byte value as an unsigned 8-bit integer\n> > > + * \\var ControlTypeUnsigned32\n> > > + * The control stores an unsigned 32-bit integer value\n> > >   * \\var ControlTypeInteger32\n> > > - * The control stores a 32-bit integer value\n> > > + * The control stores a signed 32-bit integer value\n> > >   * \\var ControlTypeInteger64\n> > > - * The control stores a 64-bit integer value\n> > > + * The control stores a signed 64-bit integer value\n> > >   * \\var ControlTypeFloat\n> > >   * The control stores a 32-bit floating point value\n> > >   * \\var ControlTypeString\n> > > @@ -230,6 +233,11 @@ std::string ControlValue::toString() const\n> > >                         str += std::to_string(*value);\n> > >                         break;\n> > >                 }\n> > > +               case ControlTypeUnsigned32: {\n> > > +                       const uint32_t *value = reinterpret_cast<const uint32_t *>(data);\n> > > +                       str += std::to_string(*value);\n> > > +                       break;\n> > > +               }\n> > >                 case ControlTypeInteger32: {\n> > >                         const int32_t *value = reinterpret_cast<const int32_t *>(data);\n> > >                         str += std::to_string(*value);\n> > > diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp\n> > > index 68add4f2e..f3454ba24 100644\n> > > --- a/src/libcamera/v4l2_device.cpp\n> > > +++ b/src/libcamera/v4l2_device.cpp\n> > > @@ -9,6 +9,7 @@\n> > >\n> > >  #include <fcntl.h>\n> > >  #include <map>\n> > > +#include <stdint.h>\n> > >  #include <stdlib.h>\n> > >  #include <string.h>\n> > >  #include <sys/ioctl.h>\n> > > @@ -17,11 +18,14 @@\n> > >  #include <vector>\n> > >\n> > >  #include <linux/v4l2-mediabus.h>\n> > > +#include <linux/videodev2.h>\n> > >\n> > >  #include <libcamera/base/event_notifier.h>\n> > >  #include <libcamera/base/log.h>\n> > >  #include <libcamera/base/utils.h>\n> > >\n> > > +#include <libcamera/controls.h>\n> > > +\n> > >  #include \"libcamera/internal/formats.h\"\n> > >  #include \"libcamera/internal/sysfs.h\"\n> > >\n> > > @@ -488,6 +492,9 @@ ControlType V4L2Device::v4l2CtrlType(uint32_t ctrlType)\n> > >         case V4L2_CTRL_TYPE_BOOLEAN:\n> > >                 return ControlTypeBool;\n> > >\n> > > +       case V4L2_CTRL_TYPE_U32:\n> > > +               return ControlTypeUnsigned32;\n> > > +\n> > >         case V4L2_CTRL_TYPE_INTEGER:\n> > >                 return ControlTypeInteger32;\n> > >\n> > > @@ -536,6 +543,11 @@ std::optional<ControlInfo> V4L2Device::v4l2ControlInfo(const v4l2_query_ext_ctrl\n> > >                                    static_cast<uint8_t>(ctrl.maximum),\n> > >                                    static_cast<uint8_t>(ctrl.default_value));\n> > >\n> > > +       case V4L2_CTRL_TYPE_U32:\n> > > +               return ControlInfo(static_cast<uint32_t>(ctrl.minimum),\n> > > +                                  static_cast<uint32_t>(ctrl.maximum),\n> > > +                                  static_cast<uint32_t>(ctrl.default_value));\n> > > +\n> > >         case V4L2_CTRL_TYPE_BOOLEAN:\n> > >                 return ControlInfo(static_cast<bool>(ctrl.minimum),\n> > >                                    static_cast<bool>(ctrl.maximum),\n> > > @@ -622,12 +634,14 @@ void V4L2Device::listControls()\n> > >                 case V4L2_CTRL_TYPE_BITMASK:\n> > >                 case V4L2_CTRL_TYPE_INTEGER_MENU:\n> > >                 case V4L2_CTRL_TYPE_U8:\n> > > +               case V4L2_CTRL_TYPE_U32:\n> > >                         break;\n> > >                 /* \\todo Support other control types. */\n> > >                 default:\n> > >                         LOG(V4L2, Debug)\n> > >                                 << \"Control \" << utils::hex(ctrl.id)\n> > > -                               << \" has unsupported type \" << ctrl.type;\n> > > +                               << \" has unsupported type \" << ctrl.type\n> > > +                               << \". Name: \" << ctrl.name;\n> >\n> > This hunk looks like a good change that should be in an independent\n> > patch. And preumably - if ctrl.name is valid here - then it could\n> > replace the hexdump of ctrl.id ...\n>\n> Right, I'll remove this hunk from the patch.\n>\n> BR,\n> Harvey\n>\n> >\n> >\n> > >                         continue;\n> > >                 }\n> > >\n> > > --\n> > > 2.47.0.rc1.288.g06298d1525-goog\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 BCD8EC3272\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 22 Oct 2024 09:44:48 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9DE9D65395;\n\tTue, 22 Oct 2024 11:44:47 +0200 (CEST)","from mail-lj1-x22e.google.com (mail-lj1-x22e.google.com\n\t[IPv6:2a00:1450:4864:20::22e])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 180386538B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 22 Oct 2024 11:44:46 +0200 (CEST)","by mail-lj1-x22e.google.com with SMTP id\n\t38308e7fff4ca-2fb51e00c05so75878021fa.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 22 Oct 2024 02:44:46 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=chromium.org header.i=@chromium.org\n\theader.b=\"UZRxhEcl\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=chromium.org; s=google; t=1729590285; x=1730195085;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:cc:to:subject:message-id:date:from\n\t:in-reply-to:references:mime-version:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=+84CxZmCfzkzHEEveLUHxYPhiH/LWwwGiKDmDzIARr0=;\n\tb=UZRxhEcldUuD6w9OHAX03zlLtK418y8soBs5bCSsBsugwkX1qvKoLehbHIHNAM41uR\n\tRAlutk40uuUnBWMPtR4ULgzqpSsYe3jpHFhY+tAU3IGy84eW1qc13qoIP53dgRMkUsDE\n\t+l6wOpqUVYYKbqhOB1uWJqKPExQMAnweilKcU=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1729590285; x=1730195085;\n\th=content-transfer-encoding:cc:to:subject:message-id:date:from\n\t:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc\n\t:subject:date:message-id:reply-to;\n\tbh=+84CxZmCfzkzHEEveLUHxYPhiH/LWwwGiKDmDzIARr0=;\n\tb=r5ueEG96oXSW2n0l46/F3u7he5WJ3nUyIb7F+xEWCB27+N8PbtJpCW86/IhlAG//xu\n\t5zdxXz5IadgeaktDLNdCi/b6Yxbd3UOmKrnWFT3LKldwOiVC0uCEgVpXG95TtDiDNOKB\n\t28toDpS9L0JQBjJMfP5ctfueITdJweUkud7iZ/hwOhEUHWHwZiVPGdhckvG50nH6rE/D\n\tvFN+hF1URwUCXJcp/wItD/Xmhi0PkxRn5J9ywtQW/3TVti9ErPhuO3Wp6Dqai9FZenQs\n\tA5vi7Lj6GfcU3h9gecryxejzmEOK+dNAyUbdyTxr06ITkd7cqzXpzMpwj2C4/IhlsLXT\n\tC+WQ==","X-Gm-Message-State":"AOJu0Yxf2AYA9lNGmVWI6BuFFDEtggYlx52RIuAJxNq1a+K/x3k7oZmj\n\tKCPArEXWHgAVbALwZaR+GvMYq/GfOUAX0dB9bMZcCg/Ci6Qvx0SJksf2xYsigCfoYJs23lHMGv1\n\tO6vtNHMBQcxHFyzo+9xkhWrOHMr4nSH0pFFtM","X-Google-Smtp-Source":"AGHT+IH7uzjTSbH1c6uhr/mPubQh+SbQFC6qwhz/ITn/sFNjHehtZSGI81zPg2cpWwiYyhHlGJQU/oVFvNBIB+GHKL0=","X-Received":"by 2002:a05:651c:2211:b0:2fb:5206:1675 with SMTP id\n\t38308e7fff4ca-2fb82fb099cmr109468301fa.27.1729590285229;\n\tTue, 22 Oct 2024 02:44:45 -0700 (PDT)","MIME-Version":"1.0","References":"<20241011175653.3530945-1-chenghaoyang@chromium.org>\n\t<20241011175653.3530945-2-chenghaoyang@chromium.org>\n\t<172952801666.3353069.897225076785394591@ping.linuxembedded.co.uk>\n\t<CAEB1ahshSQY4WGOCcBfcopmUr0pcAKWQjKjm1mBdYOOhGLiBcQ@mail.gmail.com>","In-Reply-To":"<CAEB1ahshSQY4WGOCcBfcopmUr0pcAKWQjKjm1mBdYOOhGLiBcQ@mail.gmail.com>","From":"Cheng-Hao Yang <chenghaoyang@chromium.org>","Date":"Tue, 22 Oct 2024 17:44:34 +0800","Message-ID":"<CAEB1ahvJbmRZBcM1r7nSfRqffSkdXfFcbcYctGCbtzKjCGWeZg@mail.gmail.com>","Subject":"Re: [PATCH 1/2] libcamera: Allow enumerating u32 control type","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org, \n\tYudhistira Erlandinata <yerlandinata@google.com>, \n\tYudhistira Erlandinata <yerlandinata@chromium.org>","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","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>"}}]