[{"id":3450,"web_url":"https://patchwork.libcamera.org/comment/3450/","msgid":"<20200114232510.GD942549@oden.dyn.berto.se>","date":"2020-01-14T23:25:10","subject":"Re: [libcamera-devel] [PATCH 11/23] libcamera: controls: Add\n\tsupport for float controls","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Jacopo,\n\nThanks for your patch.\n\nOn 2020-01-13 17:42:33 +0100, Jacopo Mondi wrote:\n> Add support for float values in Control<> and ControlValue classes.\n> \n> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n\n> ---\n>  include/libcamera/controls.h         |  3 +++\n>  src/libcamera/control_serializer.cpp | 13 ++++++++++\n>  src/libcamera/controls.cpp           | 36 ++++++++++++++++++++++++++++\n>  3 files changed, 52 insertions(+)\n> \n> diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h\n> index 458b84e8fa8c..8fa33d93b088 100644\n> --- a/include/libcamera/controls.h\n> +++ b/include/libcamera/controls.h\n> @@ -20,6 +20,7 @@ enum ControlType {\n>  \tControlTypeBool,\n>  \tControlTypeInteger32,\n>  \tControlTypeInteger64,\n> +\tControlTypeFloat,\n>  };\n>  \n>  class ControlValue\n> @@ -29,6 +30,7 @@ public:\n>  \tControlValue(bool value);\n>  \tControlValue(int32_t value);\n>  \tControlValue(int64_t value);\n> +\tControlValue(float value);\n>  \n>  \tControlType type() const { return type_; }\n>  \tbool isNone() const { return type_ == ControlTypeNone; }\n> @@ -53,6 +55,7 @@ private:\n>  \t\tbool bool_;\n>  \t\tint32_t integer32_;\n>  \t\tint64_t integer64_;\n> +\t\tfloat float_;\n>  \t};\n>  };\n>  \n> diff --git a/src/libcamera/control_serializer.cpp b/src/libcamera/control_serializer.cpp\n> index a5d6d875c76f..fd91baf15156 100644\n> --- a/src/libcamera/control_serializer.cpp\n> +++ b/src/libcamera/control_serializer.cpp\n> @@ -34,6 +34,7 @@ static constexpr size_t ControlValueSize[] = {\n>  \t[ControlTypeBool]\t= sizeof(bool),\n>  \t[ControlTypeInteger32]\t= sizeof(int32_t),\n>  \t[ControlTypeInteger64]\t= sizeof(int64_t),\n> +\t[ControlTypeFloat]\t= sizeof(float),\n>  };\n>  \n>  } /* namespace */\n> @@ -176,6 +177,12 @@ void ControlSerializer::store(const ControlValue &value,\n>  \t\tbreak;\n>  \t}\n>  \n> +\tcase ControlTypeFloat: {\n> +\t\tfloat data = value.get<float>();\n> +\t\tbuffer.write(&data);\n> +\t\tbreak;\n> +\t}\n> +\n>  \tdefault:\n>  \t\tbreak;\n>  \t}\n> @@ -348,6 +355,12 @@ ControlValue ControlSerializer::load<ControlValue>(ControlType type,\n>  \t\treturn ControlValue(value);\n>  \t}\n>  \n> +\tcase ControlTypeFloat: {\n> +\t\tfloat value;\n> +\t\tb.read(&value);\n> +\t\treturn ControlValue(value);\n> +\t}\n> +\n>  \tdefault:\n>  \t\treturn ControlValue();\n>  \t}\n> diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp\n> index 123a6f19974a..74ce5d0ba4f1 100644\n> --- a/src/libcamera/controls.cpp\n> +++ b/src/libcamera/controls.cpp\n> @@ -58,6 +58,8 @@ LOG_DEFINE_CATEGORY(Controls)\n>   * The control stores a 32-bit integer value\n>   * \\var ControlTypeInteger64\n>   * The control stores a 64-bit integer value\n> + * \\var ControlTypeFloat\n> + * The control stores a 32-bit floating point value\n>   */\n>  \n>  /**\n> @@ -100,6 +102,15 @@ ControlValue::ControlValue(int64_t value)\n>  {\n>  }\n>  \n> +/**\n> + * \\brief Construct a float ControlValue\n> + * \\param[in] value Float value to store\n> + */\n> +ControlValue::ControlValue(float value)\n> +\t: type_(ControlTypeFloat), float_(value)\n> +{\n> +}\n> +\n>  /**\n>   * \\fn ControlValue::type()\n>   * \\brief Retrieve the data type of the value\n> @@ -153,6 +164,14 @@ const int64_t &ControlValue::get<int64_t>() const\n>  \treturn integer64_;\n>  }\n>  \n> +template<>\n> +const float &ControlValue::get<float>() const\n> +{\n> +\tASSERT(type_ == ControlTypeFloat);\n> +\n> +\treturn float_;\n> +}\n> +\n>  template<>\n>  void ControlValue::set<bool>(const bool &value)\n>  {\n> @@ -173,6 +192,13 @@ void ControlValue::set<int64_t>(const int64_t &value)\n>  \ttype_ = ControlTypeInteger64;\n>  \tinteger64_ = value;\n>  }\n> +\n> +template<>\n> +void ControlValue::set<float>(const float &value)\n> +{\n> +\ttype_ = ControlTypeFloat;\n> +\tfloat_ = value;\n> +}\n>  #endif /* __DOXYGEN__ */\n>  \n>  /**\n> @@ -190,6 +216,8 @@ std::string ControlValue::toString() const\n>  \t\treturn std::to_string(integer32_);\n>  \tcase ControlTypeInteger64:\n>  \t\treturn std::to_string(integer64_);\n> +\tcase ControlTypeFloat:\n> +\t\treturn std::to_string(float_);\n>  \t}\n>  \n>  \treturn \"<ValueType Error>\";\n> @@ -211,6 +239,8 @@ bool ControlValue::operator==(const ControlValue &other) const\n>  \t\treturn integer32_ == other.integer32_;\n>  \tcase ControlTypeInteger64:\n>  \t\treturn integer64_ == other.integer64_;\n> +\tcase ControlTypeFloat:\n> +\t\treturn float_ == other.float_;\n>  \tdefault:\n>  \t\treturn false;\n>  \t}\n> @@ -341,6 +371,12 @@ Control<int64_t>::Control(unsigned int id, const char *name)\n>  \t: ControlId(id, name, ControlTypeInteger64)\n>  {\n>  }\n> +\n> +template<>\n> +Control<float>::Control(unsigned int id, const char *name)\n> +\t: ControlId(id, name, ControlTypeFloat)\n> +{\n> +}\n>  #endif /* __DOXYGEN__ */\n>  \n>  /**\n> -- \n> 2.24.0\n> \n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","headers":{"Return-Path":"<niklas.soderlund@ragnatech.se>","Received":["from mail-lf1-x130.google.com (mail-lf1-x130.google.com\n\t[IPv6:2a00:1450:4864:20::130])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0AF4360705\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 15 Jan 2020 00:25:12 +0100 (CET)","by mail-lf1-x130.google.com with SMTP id v201so11198580lfa.11\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 14 Jan 2020 15:25:11 -0800 (PST)","from localhost (h-93-159.A463.priv.bahnhof.se. [46.59.93.159])\n\tby smtp.gmail.com with ESMTPSA id\n\tl7sm7809139lfc.80.2020.01.14.15.25.10\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tTue, 14 Jan 2020 15:25:10 -0800 (PST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to;\n\tbh=UdmjBkFQYTDpXb08zdmca850aQ4+97VkqX19WWle7Sw=;\n\tb=rpcG2zfP4vrH2qktmWQZ4iFKohbaDKHpfl5IPQ8mbR8UuI3E5CmWeEkxlVvxUYccYe\n\t3EDxiZZWVeXJvNL1xQVuj4TAy5FAqd9hNgNgLdXeB5Oe4Imd9OPVaYg8nkE48dL2OUKl\n\t4eXUhywGIiDLeJVIjV4guBMz/D+BN1d5ckKatoBPQG6BWXa9/3w1VOzbMLn0OXT5Wb63\n\tinsCzjwUWmF7TswvodkVzuu27qmxnEcs8cYQIh69foFmfYrLNpvh8JJThG4TX4tcM5Kh\n\tek1aJ/cIHRd7E5hLa+xpbDjALtW3IpPRo23AkdncojYstK7X64jJg3A3cy/SQ5ie+DMK\n\th8lg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to;\n\tbh=UdmjBkFQYTDpXb08zdmca850aQ4+97VkqX19WWle7Sw=;\n\tb=P1BuI+X7HSaNtqLRd8WdV4ZwwxyOsI2VPl5gsP5pguK8C3g8xmHRo91+V0oG8sQR/d\n\tnKXKMo78R57wKsiaU7P3jLS9L2gD1WegCYfloXQ7Jd/P0JDS2vZwH8dp3TYhbJC36FKQ\n\ty6NKE5WTAZ569y5mocJJasXhzZbQY3+f7/kZh+BUwRhWA+a3gVBg4NdmQijyN1Hk7yny\n\tJKqfo9NQdso/Lltjxo7ip4dT5cbmb5yP5Ik8iXRiR0OJ29rpD8sGvkeG1UZ+5z8qnMlm\n\tK2jnTGwJAkwjuqg09CoGEbvq/qIcPi5+gvsLaDtfnrQVQc/tWOpHgZ1uRmpiyGNk8Odf\n\t5VXg==","X-Gm-Message-State":"APjAAAUcHvAQEGQtng4Gxy2IM9iTDOScaBQSgvqP3VDpUjJthQItMtLt\n\txAbVLDwXynC2WcJ6BUvs6iWvQw==","X-Google-Smtp-Source":"APXvYqwuUtWKDk0rp1CETwsXesXY5EQHOUrhkxYe+zr1FncCnWYkC2D/ECdG8bwFjDrHAN1xSeUEug==","X-Received":"by 2002:ac2:5f59:: with SMTP id 25mr3145481lfz.193.1579044311408;\n\tTue, 14 Jan 2020 15:25:11 -0800 (PST)","Date":"Wed, 15 Jan 2020 00:25:10 +0100","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20200114232510.GD942549@oden.dyn.berto.se>","References":"<20200113164245.52535-1-jacopo@jmondi.org>\n\t<20200113164245.52535-12-jacopo@jmondi.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=iso-8859-1","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20200113164245.52535-12-jacopo@jmondi.org>","Subject":"Re: [libcamera-devel] [PATCH 11/23] libcamera: controls: Add\n\tsupport for float controls","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Tue, 14 Jan 2020 23:25:12 -0000"}}]