[{"id":16607,"web_url":"https://patchwork.libcamera.org/comment/16607/","msgid":"<YIeMHtoFYIOGDb7P@pendragon.ideasonboard.com>","date":"2021-04-27T03:59:26","subject":"Re: [libcamera-devel] [PATCH v2 4/7] libcamera: SensorDatabase:\n\tAdds table of v4l2 name and test pattern","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Hiro,\n\nThank you for the patch.\n\nOn Wed, Apr 21, 2021 at 01:23:43PM +0900, Hirokazu Honda wrote:\n> In V4L2 API, a driver returns a name to represent a test pattern,\n> but it is a driver specific what test pattern is represented by\n> the name. Therefore, this adds a mapping table from the name to\n> a test pattern into a static configuration of a sensor.\n> \n> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> ---\n>  include/libcamera/internal/sensor_database.h |  2 ++\n>  src/libcamera/sensor_database.cpp            | 37 ++++++++++++++++++--\n>  2 files changed, 36 insertions(+), 3 deletions(-)\n> \n> diff --git a/include/libcamera/internal/sensor_database.h b/include/libcamera/internal/sensor_database.h\n> index 7d743e46..c0b181f8 100644\n> --- a/include/libcamera/internal/sensor_database.h\n> +++ b/include/libcamera/internal/sensor_database.h\n> @@ -10,11 +10,13 @@\n>  #include <string>\n>  \n>  #include <libcamera/geometry.h>\n> +#include <libcamera/span.h>\n>  \n>  namespace libcamera {\n>  \n>  struct SensorInfo {\n>  \tSize unitCellSize;\n> +\tSpan<const std::pair<const char *, int32_t>> testPatternModeMap;\n>  };\n>  \n>  class SensorDatabase\n> diff --git a/src/libcamera/sensor_database.cpp b/src/libcamera/sensor_database.cpp\n> index 68e69e8b..da469b67 100644\n> --- a/src/libcamera/sensor_database.cpp\n> +++ b/src/libcamera/sensor_database.cpp\n> @@ -9,6 +9,8 @@\n>  \n>  #include <algorithm>\n>  \n> +#include \"libcamera/control_ids.h\"\n> +\n>  namespace libcamera {\n>  \n>  /**\n> @@ -43,25 +45,54 @@ namespace libcamera {\n>  \n>  namespace {\n>  \n> +constexpr std::pair<const char *, int32_t> imx219TestPatternModeMap[] = {\n> +\t{ \"Disabled\", controls::draft::TestPatternModeOff },\n> +\t{ \"Color Bars\", controls::draft::TestPatternModeColorBars },\n> +\t{ \"Solid Color\", controls::draft::TestPatternModeSolidColor },\n> +\t{ \"Grey Color Bars\", controls::draft::TestPatternModeColorBarsFadeToGray },\n> +\t{ \"PN9\", controls::draft::TestPatternModePn9 },\n> +};\n\nYou can make those maps. I know they can't be constexpr, and they will\nbe global variables of non-trivial types, but for this kind of use case\nI really don't see a real problem.\n\n> +\n> +constexpr std::pair<const char *, int32_t> ov5670TestPatternModeMap[] = {\n> +\t{ \"Disabled\", controls::draft::TestPatternModeOff },\n> +\t{ \"Vertical Color Bar Type 1\", controls::draft::TestPatternModeColorBars },\n> +};\n> +\n> +constexpr std::pair<const char *, int32_t> ov13858TestPatternModeMap[] = {\n> +\t{ \"Disabled\", controls::draft::TestPatternModeOff },\n> +\t{ \"Vertical Color Bar Type 1\", controls::draft::TestPatternModeColorBars },\n> +\t{ \"Vertical Color Bar Type 2\", controls::draft::TestPatternModeColorBarsFadeToGray },\n> +};\n> +\n>  /**\n>   * \\brief Sony IMX219 sensor properties\n>   */\n>  constexpr SensorInfo imx219Info = {\n> -\t.unitCellSize = { 1120, 1120 }\n> +\t.unitCellSize = { 1120, 1120 },\n> +\t.testPatternModeMap =\n> +\t\tlibcamera::Span<const std::pair<const char *, int32_t>>(\n> +\t\t\timx219TestPatternModeMap),\n>  };\n>  \n>  /**\n>   * \\brief Omnivision ov5670 sensor properties\n>   */\n>  constexpr SensorInfo ov5670Info = {\n> -\t.unitCellSize = { 1120, 1120 }\n> +\t.unitCellSize = { 1120, 1120 },\n> +\t.testPatternModeMap =\n> +\t\tlibcamera::Span<const std::pair<const char *, int32_t>>(\n> +\t\t\tov5670TestPatternModeMap),\n>  };\n>  \n>  /**\n>   * \\brief Omnivision 13858 sensor properties\n>   */\n>  constexpr SensorInfo ov13858Info = {\n> -\t.unitCellSize = { 1120, 1120 }\n> +\t.unitCellSize = { 1120, 1120 },\n> +\t.testPatternModeMap =\n> +\t\tlibcamera::Span<const std::pair<const char *, int32_t>>(\n> +\t\t\tov13858TestPatternModeMap),\n> +\n>  };\n>  \n>  #define SENSOR_INFO(_sensor) \\","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 09FE3BDCA6\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 27 Apr 2021 03:59:34 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7FFED68880;\n\tTue, 27 Apr 2021 05:59:33 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A5F0960512\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 27 Apr 2021 05:59:32 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 1350FE9;\n\tTue, 27 Apr 2021 05:59:32 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"wMXz7UTZ\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1619495972;\n\tbh=ZHcCJDE309KS+6tjQcmqv2A2tg6fZEJM9J1e58qPwgQ=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=wMXz7UTZ1cca9CTh/1/9mGIEsQlAy6T4n1VkkjNEjwsdG9PfXpTisrNmoDBcGn16T\n\t0/Fign4OnVN/VJ80szjwYanKJb1GGXKquZT2eTbtRpMfbuA3VUZUcw9x+HhS8GMnOb\n\tDIxFKOWs4lRQKjtw2cqHZPwxgjKZD/YYR8aWfPw8=","Date":"Tue, 27 Apr 2021 06:59:26 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Hirokazu Honda <hiroh@chromium.org>","Message-ID":"<YIeMHtoFYIOGDb7P@pendragon.ideasonboard.com>","References":"<20210421042346.312854-1-hiroh@chromium.org>\n\t<20210421042346.312854-5-hiroh@chromium.org>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20210421042346.312854-5-hiroh@chromium.org>","Subject":"Re: [libcamera-devel] [PATCH v2 4/7] libcamera: SensorDatabase:\n\tAdds table of v4l2 name and test pattern","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]