[{"id":21088,"web_url":"https://patchwork.libcamera.org/comment/21088/","msgid":"<YZr7JG+hSc/xGXtt@pendragon.ideasonboard.com>","date":"2021-11-22T02:06:28","subject":"Re: [libcamera-devel] [PATCH v6 2/4] libcamera: camera_sensor:\n\tReference test pattern modes by enum type","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, Nov 10, 2021 at 04:22:05PM +0900, Hirokazu Honda wrote:\n> The CameraSensor stores TestPatternModes as an int32_t. This prevents\n> the compiler from verifying the usage against the defined enum types.\n> \n> Fix references to the TestPatternMode to store the value as the\n> TestPatternModeEnum type which is defined by the control generator.\n> \n> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> ---\n>  include/libcamera/internal/camera_sensor.h            | 10 +++++++---\n>  include/libcamera/internal/camera_sensor_properties.h |  3 ++-\n>  src/libcamera/camera_sensor.cpp                       |  4 ++--\n>  src/libcamera/pipeline/ipu3/ipu3.cpp                  |  7 ++++---\n>  4 files changed, 15 insertions(+), 9 deletions(-)\n> \n> diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h\n> index d25a1165..edef2220 100644\n> --- a/include/libcamera/internal/camera_sensor.h\n> +++ b/include/libcamera/internal/camera_sensor.h\n> @@ -14,8 +14,10 @@\n>  #include <libcamera/base/class.h>\n>  #include <libcamera/base/log.h>\n>  \n> +#include <libcamera/control_ids.h>\n>  #include <libcamera/controls.h>\n>  #include <libcamera/geometry.h>\n> +\n>  #include <libcamera/ipa/core_ipa_interface.h>\n>  \n>  #include \"libcamera/internal/formats.h\"\n> @@ -40,7 +42,8 @@ public:\n>  \tconst std::vector<unsigned int> &mbusCodes() const { return mbusCodes_; }\n>  \tconst std::vector<Size> sizes(unsigned int mbusCode) const;\n>  \tSize resolution() const;\n> -\tconst std::vector<int32_t> &testPatternModes() const\n> +\tconst std::vector<controls::draft::TestPatternModeEnum>\n> +\t\t&testPatternModes() const\n>  \t{\n>  \t\treturn testPatternModes_;\n>  \t}\n> @@ -71,7 +74,8 @@ private:\n>  \tvoid initVimcDefaultProperties();\n>  \tvoid initStaticProperties();\n>  \tvoid initTestPatternModes(\n> -\t\tconst std::map<int32_t, int32_t> &testPatternModeMap);\n> +\t\tconst std::map<controls::draft::TestPatternModeEnum, int32_t>\n> +\t\t\t&testPatternModeMap);\n>  \tint initProperties();\n>  \n>  \tconst MediaEntity *entity_;\n> @@ -84,7 +88,7 @@ private:\n>  \tV4L2Subdevice::Formats formats_;\n>  \tstd::vector<unsigned int> mbusCodes_;\n>  \tstd::vector<Size> sizes_;\n> -\tstd::vector<int32_t> testPatternModes_;\n> +\tstd::vector<controls::draft::TestPatternModeEnum> testPatternModes_;\n>  \n>  \tSize pixelArraySize_;\n>  \tRectangle activeArea_;\n> diff --git a/include/libcamera/internal/camera_sensor_properties.h b/include/libcamera/internal/camera_sensor_properties.h\n> index 67c77920..5c7e5e87 100644\n> --- a/include/libcamera/internal/camera_sensor_properties.h\n> +++ b/include/libcamera/internal/camera_sensor_properties.h\n> @@ -10,6 +10,7 @@\n>  #include <map>\n>  #include <string>\n>  \n> +#include <libcamera/control_ids.h>\n>  #include <libcamera/geometry.h>\n>  \n>  namespace libcamera {\n> @@ -18,7 +19,7 @@ struct CameraSensorProperties {\n>  \tstatic const CameraSensorProperties *get(const std::string &sensor);\n>  \n>  \tSize unitCellSize;\n> -\tstd::map<int32_t, int32_t> testPatternModes;\n> +\tstd::map<controls::draft::TestPatternModeEnum, int32_t> testPatternModes;\n>  };\n>  \n>  } /* namespace libcamera */\n> diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp\n> index 9fdb8c09..f0aa9f24 100644\n> --- a/src/libcamera/camera_sensor.cpp\n> +++ b/src/libcamera/camera_sensor.cpp\n> @@ -311,7 +311,7 @@ void CameraSensor::initStaticProperties()\n>  }\n>  \n>  void CameraSensor::initTestPatternModes(\n> -\tconst std::map<int32_t, int32_t> &testPatternModes)\n> +\tconst std::map<controls::draft::TestPatternModeEnum, int32_t> &testPatternModes)\n>  {\n>  \tconst auto &v4l2TestPattern = controls().find(V4L2_CID_TEST_PATTERN);\n>  \tif (v4l2TestPattern == controls().end()) {\n> @@ -327,7 +327,7 @@ void CameraSensor::initTestPatternModes(\n>  \t * control index is supported in the below for loop that creates the\n>  \t * list of supported test patterns.\n>  \t */\n> -\tstd::map<int32_t, int32_t> indexToTestPatternMode;\n> +\tstd::map<int32_t, controls::draft::TestPatternModeEnum> indexToTestPatternMode;\n>  \tfor (const auto &it : testPatternModes)\n>  \t\tindexToTestPatternMode[it.second] = it.first;\n>  \n> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> index eb714aa6..63cb7f11 100644\n> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> @@ -981,13 +981,14 @@ int PipelineHandlerIPU3::updateControls(IPU3CameraData *data)\n>  \t\treturn ret;\n>  \n>  \tControlInfoMap::Map controls = IPU3Controls;\n> -\tconst std::vector<int32_t> &testPatternModes = sensor->testPatternModes();\n> +\tconst std::vector<controls::draft::TestPatternModeEnum>\n> +\t\t&testPatternModes = sensor->testPatternModes();\n>  \tif (!testPatternModes.empty()) {\n>  \t\tstd::vector<ControlValue> values;\n>  \t\tvalues.reserve(testPatternModes.size());\n>  \n> -\t\tfor (int32_t pattern : testPatternModes)\n> -\t\t\tvalues.emplace_back(pattern);\n> +\t\tfor (auto pattern : testPatternModes)\n> +\t\t\tvalues.emplace_back(static_cast<int32_t>(pattern));\n>  \n>  \t\tcontrols[&controls::draft::TestPatternMode] = ControlInfo(values);\n>  \t}","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 D70E2BDB13\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 22 Nov 2021 02:06:54 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 3B1796036F;\n\tMon, 22 Nov 2021 03:06:54 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0EA6260228\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 22 Nov 2021 03:06:52 +0100 (CET)","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 786D2A1B;\n\tMon, 22 Nov 2021 03:06:51 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"umFG4v0z\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1637546811;\n\tbh=eQ8pKbo7lrTEJGFKKIyKAe3mPWWccsCQY8+SY3ng3Yk=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=umFG4v0zsY99iYYHzDJdicvhvX+j2EW1zwL+xjJZ2v/QOijOb+zo7FpBZkZd3T0Rs\n\tBNi8k9FHQKJzkpv787h8dQ4kaXgxUnWBvR6LM/h/RU5lPogoxDs59qsIACE+8ris3E\n\tQ39dvZLtm5gsUjljB60ePqvCI5JtDIgvevCcxKlo=","Date":"Mon, 22 Nov 2021 04:06:28 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Hirokazu Honda <hiroh@chromium.org>","Message-ID":"<YZr7JG+hSc/xGXtt@pendragon.ideasonboard.com>","References":"<20211110072207.3273703-1-hiroh@chromium.org>\n\t<20211110072207.3273703-2-hiroh@chromium.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20211110072207.3273703-2-hiroh@chromium.org>","Subject":"Re: [libcamera-devel] [PATCH v6 2/4] libcamera: camera_sensor:\n\tReference test pattern modes by enum type","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","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]