{"id":12289,"url":"https://patchwork.libcamera.org/api/1.1/patches/12289/?format=json","web_url":"https://patchwork.libcamera.org/patch/12289/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20210514075808.282479-2-umang.jain@ideasonboard.com>","date":"2021-05-14T07:58:03","name":"[libcamera-devel,v1,1/6] ipa: mojom: Move CameraSensorInfo struct exclusively to IPA IPC","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"b482314891abf18cbd4c78339c272bf9ff343af3","submitter":{"id":86,"url":"https://patchwork.libcamera.org/api/1.1/people/86/?format=json","name":"Umang Jain","email":"umang.jain@ideasonboard.com"},"delegate":{"id":12,"url":"https://patchwork.libcamera.org/api/1.1/users/12/?format=json","username":"uajain","first_name":"Umang","last_name":"Jain","email":"umang.jain@ideasonboard.com"},"mbox":"https://patchwork.libcamera.org/patch/12289/mbox/","series":[{"id":2029,"url":"https://patchwork.libcamera.org/api/1.1/series/2029/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=2029","date":"2021-05-14T07:58:02","name":"External IPU3 IPA support","version":1,"mbox":"https://patchwork.libcamera.org/series/2029/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/12289/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/12289/checks/","tags":{},"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 49EB1C31F6\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 14 May 2021 07:58:24 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 05C7D68924;\n\tFri, 14 May 2021 09:58:24 +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 02CF868911\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 14 May 2021 09:58:23 +0200 (CEST)","from perceval.ideasonboard.com (unknown [103.251.226.50])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 95A3A9F0;\n\tFri, 14 May 2021 09:58:21 +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=\"bGP4KNr+\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1620979102;\n\tbh=b3kobZN422Sowhv2bbZTI+/4ZNINlSIwiFi6sbBTlVU=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=bGP4KNr+tPAo6N05NCWTNJlu8v/EockgBfEGp2QYbIdT9YjELGmzFuS0tyHVnY87s\n\taggI+ySHhfR7xMk9FX/ER41BvW5FbE4r5xz6gsT9A6VA3ltv6SGdWxl+0+5osckMO4\n\tHtqssNAiFSyutlBYbfpcNyRCr6L1HVpFglKmjoeU=","From":"Umang Jain <umang.jain@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Date":"Fri, 14 May 2021 13:28:03 +0530","Message-Id":"<20210514075808.282479-2-umang.jain@ideasonboard.com>","X-Mailer":"git-send-email 2.26.2","In-Reply-To":"<20210514075808.282479-1-umang.jain@ideasonboard.com>","References":"<20210514075808.282479-1-umang.jain@ideasonboard.com>","MIME-Version":"1.0","Subject":"[libcamera-devel] [PATCH v1 1/6] ipa: mojom: Move CameraSensorInfo\n\tstruct exclusively to IPA IPC","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>","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>"},"content":"CameraSensorInfo structure is designed to pass in camera sensor related\ninformation from pipeline-handler to IPA. Since the pipeline-hander\nand IPA are connected via mojom IPC IPA interface, the interface\nitself provides a more suitable placement of CameraSensorInfo,\ninstead of camera_sensor.h (which is a libcamera internal header\nultimately, at this point).\n\nAs CameraSensorInfo is already defined in core.mojom, it is just\na matter of removing [skipHeader] tag to allow code-generation\nof CameraSensorInfo. To be consistent with naming scheme, the\nexisting CameraSensorInfo is renamed to IPACameraSensorInfo.\n\nSince doxygen cannot directly generate documentation from the .mojom\nfiles, the core.mojom documentation is also moved to a new .cpp file.\n\nFinally, update header paths to include IPACameraSensorInfo definition\nfrom IPA interfaces instead of \"libcamera/internal/camera_sensor.h\".\n\nSigned-off-by: Paul Elder <paul.elder@ideasonboard.com>\nSigned-off-by: Umang Jain <umang.jain@ideasonboard.com>\n---\n Documentation/Doxyfile.in                     |   4 +-\n Documentation/meson.build                     |   1 +\n include/libcamera/internal/camera_sensor.h    |  19 +-\n include/libcamera/ipa/core.mojom              |   2 +-\n include/libcamera/ipa/core_ipa_interface.cpp  | 190 ++++++++++++++++++\n include/libcamera/ipa/ipa_interface.h         |   2 -\n include/libcamera/ipa/meson.build             |   4 +\n include/libcamera/ipa/raspberrypi.mojom       |   2 +-\n include/libcamera/ipa/rkisp1.mojom            |   2 +-\n src/ipa/ipu3/ipu3_agc.cpp                     |   2 +-\n src/ipa/raspberrypi/raspberrypi.cpp           |   9 +-\n src/ipa/rkisp1/rkisp1.cpp                     |   6 +-\n src/libcamera/camera_sensor.cpp               | 117 +----------\n src/libcamera/pipeline/ipu3/ipu3.cpp          |   4 +-\n .../pipeline/raspberrypi/raspberrypi.cpp      |   4 +-\n src/libcamera/pipeline/rkisp1/rkisp1.cpp      |   2 +-\n 16 files changed, 218 insertions(+), 152 deletions(-)\n create mode 100644 include/libcamera/ipa/core_ipa_interface.cpp","diff":"diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in\nindex af006724..213adb9b 100644\n--- a/Documentation/Doxyfile.in\n+++ b/Documentation/Doxyfile.in\n@@ -844,7 +844,6 @@ EXCLUDE                = @TOP_SRCDIR@/include/libcamera/span.h \\\n \t\t\t @TOP_SRCDIR@/src/libcamera/pipeline/ \\\n \t\t\t @TOP_SRCDIR@/src/libcamera/tracepoints.cpp \\\n \t\t\t @TOP_BUILDDIR@/include/libcamera/internal/tracepoints.h \\\n-\t\t\t @TOP_BUILDDIR@/include/libcamera/ipa/ \\\n \t\t\t @TOP_BUILDDIR@/src/libcamera/proxy/\n \n # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or\n@@ -861,7 +860,8 @@ EXCLUDE_SYMLINKS       = NO\n # Note that the wildcards are matched against the file with absolute path, so to\n # exclude all test directories for example use the pattern */test/*\n \n-EXCLUDE_PATTERNS       =\n+EXCLUDE_PATTERNS       = @TOP_BUILDDIR@/include/libcamera/ipa/*_serializer.h \\\n+\t\t\t @TOP_BUILDDIR@/include/libcamera/ipa/*_proxy.h\n \n # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names\n # (namespaces, classes, functions, etc.) that should be excluded from the\ndiff --git a/Documentation/meson.build b/Documentation/meson.build\nindex c8521574..86f1134b 100644\n--- a/Documentation/meson.build\n+++ b/Documentation/meson.build\n@@ -23,6 +23,7 @@ if doxygen.found() and dot.found()\n                   input : [\n                       doxyfile,\n                       libcamera_internal_headers,\n+                      libcamera_ipa_docs,\n                       libcamera_ipa_headers,\n                       libcamera_public_headers,\n                       libcamera_sources,\ndiff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h\nindex 2a5c51a1..cf6c1c1e 100644\n--- a/include/libcamera/internal/camera_sensor.h\n+++ b/include/libcamera/internal/camera_sensor.h\n@@ -14,6 +14,7 @@\n #include <libcamera/class.h>\n #include <libcamera/controls.h>\n #include <libcamera/geometry.h>\n+#include <libcamera/ipa/core_ipa_interface.h>\n \n #include \"libcamera/internal/formats.h\"\n #include \"libcamera/internal/log.h\"\n@@ -24,22 +25,6 @@ namespace libcamera {\n class BayerFormat;\n class MediaEntity;\n \n-struct CameraSensorInfo {\n-\tstd::string model;\n-\n-\tuint32_t bitsPerPixel;\n-\n-\tSize activeAreaSize;\n-\tRectangle analogCrop;\n-\tSize outputSize;\n-\n-\tuint64_t pixelRate;\n-\tuint32_t lineLength;\n-\n-\tuint32_t minFrameLength;\n-\tuint32_t maxFrameLength;\n-};\n-\n class CameraSensor : protected Loggable\n {\n public:\n@@ -66,7 +51,7 @@ public:\n \tV4L2Subdevice *device() { return subdev_.get(); }\n \n \tconst ControlList &properties() const { return properties_; }\n-\tint sensorInfo(CameraSensorInfo *info) const;\n+\tint sensorInfo(IPACameraSensorInfo *info) const;\n \n \tvoid updateControlInfo();\n \ndiff --git a/include/libcamera/ipa/core.mojom b/include/libcamera/ipa/core.mojom\nindex 6caaa63e..06ca87c7 100644\n--- a/include/libcamera/ipa/core.mojom\n+++ b/include/libcamera/ipa/core.mojom\n@@ -78,7 +78,7 @@ module libcamera;\n \tuint32 height;\n };\n \n-[skipHeader] struct CameraSensorInfo {\n+struct IPACameraSensorInfo {\n \tstring model;\n \n \tuint32 bitsPerPixel;\ndiff --git a/include/libcamera/ipa/core_ipa_interface.cpp b/include/libcamera/ipa/core_ipa_interface.cpp\nnew file mode 100644\nindex 00000000..19f769ce\n--- /dev/null\n+++ b/include/libcamera/ipa/core_ipa_interface.cpp\n@@ -0,0 +1,190 @@\n+/* SPDX-License-Identifier: LGPL-2.1-or-later */\n+\n+namespace libcamera {\n+\n+/**\n+ * \\struct IPACameraSensorInfo\n+ * \\brief Report the image sensor characteristics\n+ *\n+ * The structure reports image sensor characteristics used by IPA modules to\n+ * tune their algorithms based on the image sensor model currently in use and\n+ * its configuration.\n+ *\n+ * The reported information describes the sensor's intrinsics characteristics,\n+ * such as its pixel array size and the sensor model name, as well as\n+ * information relative to the currently configured mode, such as the produced\n+ * image size and the bit depth of the requested image format.\n+ *\n+ * Instances of this structure are meant to be assembled by the CameraSensor\n+ * class by inspecting the sensor static properties as well as information\n+ * relative to the current configuration.\n+ */\n+\n+/**\n+ * \\var IPACameraSensorInfo::model\n+ * \\brief The image sensor model name\n+ *\n+ * The sensor model name is a free-formed string that uniquely identifies the\n+ * sensor model.\n+ */\n+\n+/**\n+ * \\var IPACameraSensorInfo::bitsPerPixel\n+ * \\brief The number of bits per pixel of the image format produced by the\n+ * image sensor\n+ */\n+\n+/**\n+ * \\var IPACameraSensorInfo::activeAreaSize\n+ * \\brief The size of the pixel array active area of the sensor\n+ */\n+\n+/**\n+ * \\var IPACameraSensorInfo::analogCrop\n+ * \\brief The portion of the pixel array active area which is read-out and\n+ * processed\n+ *\n+ * The analog crop rectangle top-left corner is defined as the displacement\n+ * from the top-left corner of the pixel array active area. The rectangle\n+ * horizontal and vertical sizes define the portion of the pixel array which\n+ * is read-out and provided to the sensor's internal processing pipeline, before\n+ * any pixel sub-sampling method, such as pixel binning, skipping and averaging\n+ * take place.\n+ */\n+\n+/**\n+ * \\var IPACameraSensorInfo::outputSize\n+ * \\brief The size of the images produced by the camera sensor\n+ *\n+ * The output image size defines the horizontal and vertical sizes of the images\n+ * produced by the image sensor. The output image size is defined as the end\n+ * result of the sensor's internal image processing pipeline stages, applied on\n+ * the pixel array portion defined by the analog crop rectangle. Each image\n+ * processing stage that performs pixel sub-sampling techniques, such as pixel\n+ * binning or skipping, or perform any additional digital scaling concur in the\n+ * definition of the output image size.\n+ */\n+\n+/**\n+ * \\var IPACameraSensorInfo::pixelRate\n+ * \\brief The number of pixels produced in a second\n+ *\n+ * To obtain the read-out time in seconds of a full line:\n+ *\n+ * \\verbatim\n+\tlineDuration(s) = lineLength(pixels) / pixelRate(pixels per second)\n+   \\endverbatim\n+ */\n+\n+/**\n+ * \\var IPACameraSensorInfo::lineLength\n+ * \\brief Total line length in pixels\n+ *\n+ * The total line length in pixel clock periods, including blanking.\n+ */\n+\n+/**\n+ * \\var IPACameraSensorInfo::minFrameLength\n+ * \\brief The minimum allowable frame length in units of lines\n+ *\n+ * The sensor frame length comprises of active output lines and blanking lines\n+ * in a frame. The minimum frame length value dictates the minimum allowable\n+ * frame duration of the sensor mode.\n+ *\n+ * To obtain the minimum frame duration:\n+ *\n+ * \\verbatim\n+\tframeDuration(s) = minFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)\n+   \\endverbatim\n+ */\n+\n+/**\n+ * \\var IPACameraSensorInfo::maxFrameLength\n+ * \\brief The maximum allowable frame length in units of lines\n+ *\n+ * The sensor frame length comprises of active output lines and blanking lines\n+ * in a frame. The maximum frame length value dictates the maximum allowable\n+ * frame duration of the sensor mode.\n+ *\n+ * To obtain the maximum frame duration:\n+ *\n+ * \\verbatim\n+\tframeDuration(s) = maxFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)\n+   \\endverbatim\n+ */\n+\n+/**\n+ * \\struct IPABuffer\n+ * \\brief Buffer information for the IPA interface\n+ *\n+ * The IPABuffer structure associates buffer memory with a unique ID. It is\n+ * used to map buffers to the IPA with IPAInterface::mapBuffers(), after which\n+ * buffers will be identified by their ID in the IPA interface.\n+ */\n+\n+/**\n+ * \\var IPABuffer::id\n+ * \\brief The buffer unique ID\n+ *\n+ * Buffers mapped to the IPA are identified by numerical unique IDs. The IDs\n+ * are chosen by the pipeline handler to fulfil the following constraints:\n+ *\n+ * - IDs shall be positive integers different than zero\n+ * - IDs shall be unique among all mapped buffers\n+ *\n+ * When buffers are unmapped with IPAInterface::unmapBuffers() their IDs are\n+ * freed and may be reused for new buffer mappings.\n+ */\n+\n+/**\n+ * \\var IPABuffer::planes\n+ * \\brief The buffer planes description\n+ *\n+ * Stores the dmabuf handle and length for each plane of the buffer.\n+ */\n+\n+/**\n+ * \\struct IPASettings\n+ * \\brief IPA interface initialization settings\n+ *\n+ * The IPASettings structure stores data passed to the IPAInterface::init()\n+ * function. The data contains settings that don't depend on a particular camera\n+ * or pipeline configuration and are valid for the whole life time of the IPA\n+ * interface.\n+ */\n+\n+/**\n+ * \\var IPASettings::configurationFile\n+ * \\brief The name of the IPA configuration file\n+ *\n+ * This field may be an empty string if the IPA doesn't require a configuration\n+ * file.\n+ */\n+\n+/**\n+ * \\var IPASettings::sensorModel\n+ * \\brief The sensor model name\n+ *\n+ * Provides the sensor model name to the IPA.\n+ */\n+\n+/**\n+ * \\struct IPAStream\n+ * \\brief Stream configuration for the IPA interface\n+ *\n+ * The IPAStream structure stores stream configuration parameters needed by the\n+ * IPAInterface::configure() method. It mirrors the StreamConfiguration class\n+ * that is not suitable for this purpose due to not being serializable.\n+ */\n+\n+/**\n+ * \\var IPAStream::pixelFormat\n+ * \\brief The stream pixel format\n+ */\n+\n+/**\n+ * \\var IPAStream::size\n+ * \\brief The stream size in pixels\n+ */\n+\n+} /* namespace libcamera */\ndiff --git a/include/libcamera/ipa/ipa_interface.h b/include/libcamera/ipa/ipa_interface.h\nindex dfe1b40a..4aefaa71 100644\n--- a/include/libcamera/ipa/ipa_interface.h\n+++ b/include/libcamera/ipa/ipa_interface.h\n@@ -18,8 +18,6 @@\n #include <libcamera/geometry.h>\n #include <libcamera/signal.h>\n \n-#include \"libcamera/internal/camera_sensor.h\"\n-\n namespace libcamera {\n \n /*\ndiff --git a/include/libcamera/ipa/meson.build b/include/libcamera/ipa/meson.build\nindex 40c4e737..69bc855e 100644\n--- a/include/libcamera/ipa/meson.build\n+++ b/include/libcamera/ipa/meson.build\n@@ -6,6 +6,10 @@ libcamera_ipa_headers = files([\n     'ipa_module_info.h',\n ])\n \n+libcamera_ipa_docs = files([\n+    'core_ipa_interface.cpp',\n+])\n+\n install_headers(libcamera_ipa_headers,\n                 subdir: libcamera_include_dir / 'ipa')\n \ndiff --git a/include/libcamera/ipa/raspberrypi.mojom b/include/libcamera/ipa/raspberrypi.mojom\nindex 42321bee..0a21f453 100644\n--- a/include/libcamera/ipa/raspberrypi.mojom\n+++ b/include/libcamera/ipa/raspberrypi.mojom\n@@ -63,7 +63,7 @@ interface IPARPiInterface {\n \t * The \\a ipaConfig and \\a controls parameters carry data passed by the\n \t * pipeline handler to the IPA and back.\n \t */\n-\tconfigure(libcamera.CameraSensorInfo sensorInfo,\n+\tconfigure(libcamera.IPACameraSensorInfo sensorInfo,\n \t\t  map<uint32, libcamera.IPAStream> streamConfig,\n \t\t  map<uint32, libcamera.ControlInfoMap> entityControls,\n \t\t  IPAConfig ipaConfig)\ndiff --git a/include/libcamera/ipa/rkisp1.mojom b/include/libcamera/ipa/rkisp1.mojom\nindex cca871a0..66a4607c 100644\n--- a/include/libcamera/ipa/rkisp1.mojom\n+++ b/include/libcamera/ipa/rkisp1.mojom\n@@ -29,7 +29,7 @@ interface IPARkISP1Interface {\n \tstart() => (int32 ret);\n \tstop();\n \n-\tconfigure(libcamera.CameraSensorInfo sensorInfo,\n+\tconfigure(libcamera.IPACameraSensorInfo sensorInfo,\n \t\t  map<uint32, libcamera.IPAStream> streamConfig,\n \t\t  map<uint32, libcamera.ControlInfoMap> entityControls)\n \t\t=> (int32 ret);\ndiff --git a/src/ipa/ipu3/ipu3_agc.cpp b/src/ipa/ipu3/ipu3_agc.cpp\nindex ca54d89a..3adcadf4 100644\n--- a/src/ipa/ipu3/ipu3_agc.cpp\n+++ b/src/ipa/ipu3/ipu3_agc.cpp\n@@ -39,7 +39,7 @@ static constexpr uint32_t kMaxGain = kMaxISO / 100;\n static constexpr uint32_t kMinExposure = 1;\n static constexpr uint32_t kMaxExposure = 1976;\n \n-/* \\todo those should be get from CameraSensorInfo ! */\n+/* \\todo those should be get from IPACameraSensorInfo ! */\n /* line duration in microseconds */\n static constexpr double kLineDuration = 16.8;\n static constexpr double kMaxExposureTime = kMaxExposure * kLineDuration;\ndiff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp\nindex 52d91db2..e5bb8159 100644\n--- a/src/ipa/raspberrypi/raspberrypi.cpp\n+++ b/src/ipa/raspberrypi/raspberrypi.cpp\n@@ -25,7 +25,6 @@\n #include <libcamera/span.h>\n \n #include \"libcamera/internal/buffer.h\"\n-#include \"libcamera/internal/camera_sensor.h\"\n #include \"libcamera/internal/log.h\"\n \n #include <linux/bcm2835-isp.h>\n@@ -90,7 +89,7 @@ public:\n \tvoid start(const ControlList &controls, ipa::RPi::StartConfig *startConfig) override;\n \tvoid stop() override {}\n \n-\tint configure(const CameraSensorInfo &sensorInfo,\n+\tint configure(const IPACameraSensorInfo &sensorInfo,\n \t\t      const std::map<unsigned int, IPAStream> &streamConfig,\n \t\t      const std::map<unsigned int, ControlInfoMap> &entityControls,\n \t\t      const ipa::RPi::IPAConfig &data,\n@@ -102,7 +101,7 @@ public:\n \tvoid signalIspPrepare(const ipa::RPi::ISPConfig &data) override;\n \n private:\n-\tvoid setMode(const CameraSensorInfo &sensorInfo);\n+\tvoid setMode(const IPACameraSensorInfo &sensorInfo);\n \tbool validateSensorControls();\n \tbool validateIspControls();\n \tvoid queueRequest(const ControlList &controls);\n@@ -279,7 +278,7 @@ void IPARPi::start(const ControlList &controls, ipa::RPi::StartConfig *startConf\n \tlastRunTimestamp_ = 0;\n }\n \n-void IPARPi::setMode(const CameraSensorInfo &sensorInfo)\n+void IPARPi::setMode(const IPACameraSensorInfo &sensorInfo)\n {\n \tmode_.bitdepth = sensorInfo.bitsPerPixel;\n \tmode_.width = sensorInfo.outputSize.width;\n@@ -324,7 +323,7 @@ void IPARPi::setMode(const CameraSensorInfo &sensorInfo)\n \tmode_.max_frame_length = sensorInfo.maxFrameLength;\n }\n \n-int IPARPi::configure(const CameraSensorInfo &sensorInfo,\n+int IPARPi::configure(const IPACameraSensorInfo &sensorInfo,\n \t\t      [[maybe_unused]] const std::map<unsigned int, IPAStream> &streamConfig,\n \t\t      const std::map<unsigned int, ControlInfoMap> &entityControls,\n \t\t      const ipa::RPi::IPAConfig &ipaConfig,\ndiff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\nindex 6d45673c..b47ea324 100644\n--- a/src/ipa/rkisp1/rkisp1.cpp\n+++ b/src/ipa/rkisp1/rkisp1.cpp\n@@ -37,7 +37,7 @@ public:\n \tint start() override;\n \tvoid stop() override {}\n \n-\tint configure(const CameraSensorInfo &info,\n+\tint configure(const IPACameraSensorInfo &info,\n \t\t      const std::map<uint32_t, IPAStream> &streamConfig,\n \t\t      const std::map<uint32_t, ControlInfoMap> &entityControls) override;\n \tvoid mapBuffers(const std::vector<IPABuffer> &buffers) override;\n@@ -90,12 +90,12 @@ int IPARkISP1::start()\n }\n \n /**\n- * \\todo The RkISP1 pipeline currently provides an empty CameraSensorInfo\n+ * \\todo The RkISP1 pipeline currently provides an empty IPACameraSensorInfo\n  * if the connected sensor does not provide enough information to properly\n  * assemble one. Make sure the reported sensor information are relevant\n  * before accessing them.\n  */\n-int IPARkISP1::configure([[maybe_unused]] const CameraSensorInfo &info,\n+int IPARkISP1::configure([[maybe_unused]] const IPACameraSensorInfo &info,\n \t\t\t [[maybe_unused]] const std::map<uint32_t, IPAStream> &streamConfig,\n \t\t\t const std::map<uint32_t, ControlInfoMap> &entityControls)\n {\ndiff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp\nindex eb84d9eb..0fb8a258 100644\n--- a/src/libcamera/camera_sensor.cpp\n+++ b/src/libcamera/camera_sensor.cpp\n@@ -33,117 +33,6 @@ namespace libcamera {\n \n LOG_DEFINE_CATEGORY(CameraSensor)\n \n-/**\n- * \\struct CameraSensorInfo\n- * \\brief Report the image sensor characteristics\n- *\n- * The structure reports image sensor characteristics used by IPA modules to\n- * tune their algorithms based on the image sensor model currently in use and\n- * its configuration.\n- *\n- * The reported information describes the sensor's intrinsics characteristics,\n- * such as its pixel array size and the sensor model name, as well as\n- * information relative to the currently configured mode, such as the produced\n- * image size and the bit depth of the requested image format.\n- *\n- * Instances of this structure are meant to be assembled by the CameraSensor\n- * class by inspecting the sensor static properties as well as information\n- * relative to the current configuration.\n- */\n-\n-/**\n- * \\var CameraSensorInfo::model\n- * \\brief The image sensor model name\n- *\n- * The sensor model name is a free-formed string that uniquely identifies the\n- * sensor model.\n- */\n-\n-/**\n- * \\var CameraSensorInfo::bitsPerPixel\n- * \\brief The number of bits per pixel of the image format produced by the\n- * image sensor\n- */\n-\n-/**\n- * \\var CameraSensorInfo::activeAreaSize\n- * \\brief The size of the pixel array active area of the sensor\n- */\n-\n-/**\n- * \\var CameraSensorInfo::analogCrop\n- * \\brief The portion of the pixel array active area which is read-out and\n- * processed\n- *\n- * The analog crop rectangle top-left corner is defined as the displacement\n- * from the top-left corner of the pixel array active area. The rectangle\n- * horizontal and vertical sizes define the portion of the pixel array which\n- * is read-out and provided to the sensor's internal processing pipeline, before\n- * any pixel sub-sampling method, such as pixel binning, skipping and averaging\n- * take place.\n- */\n-\n-/**\n- * \\var CameraSensorInfo::outputSize\n- * \\brief The size of the images produced by the camera sensor\n- *\n- * The output image size defines the horizontal and vertical sizes of the images\n- * produced by the image sensor. The output image size is defined as the end\n- * result of the sensor's internal image processing pipeline stages, applied on\n- * the pixel array portion defined by the analog crop rectangle. Each image\n- * processing stage that performs pixel sub-sampling techniques, such as pixel\n- * binning or skipping, or perform any additional digital scaling concur in the\n- * definition of the output image size.\n- */\n-\n-/**\n- * \\var CameraSensorInfo::pixelRate\n- * \\brief The number of pixels produced in a second\n- *\n- * To obtain the read-out time in seconds of a full line:\n- *\n- * \\verbatim\n-\tlineDuration(s) = lineLength(pixels) / pixelRate(pixels per second)\n-   \\endverbatim\n- */\n-\n-/**\n- * \\var CameraSensorInfo::lineLength\n- * \\brief Total line length in pixels\n- *\n- * The total line length in pixel clock periods, including blanking.\n- */\n-\n-/**\n- * \\var CameraSensorInfo::minFrameLength\n- * \\brief The minimum allowable frame length in units of lines\n- *\n- * The sensor frame length comprises of active output lines and blanking lines\n- * in a frame. The minimum frame length value dictates the minimum allowable\n- * frame duration of the sensor mode.\n- *\n- * To obtain the minimum frame duration:\n- *\n- * \\verbatim\n-\tframeDuration(s) = minFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)\n-   \\endverbatim\n- */\n-\n-/**\n- * \\var CameraSensorInfo::maxFrameLength\n- * \\brief The maximum allowable frame length in units of lines\n- *\n- * The sensor frame length comprises of active output lines and blanking lines\n- * in a frame. The maximum frame length value dictates the maximum allowable\n- * frame duration of the sensor mode.\n- *\n- * To obtain the maximum frame duration:\n- *\n- * \\verbatim\n-\tframeDuration(s) = maxFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)\n-   \\endverbatim\n- */\n-\n /**\n  * \\class CameraSensor\n  * \\brief A camera sensor based on V4L2 subdevices\n@@ -316,7 +205,7 @@ int CameraSensor::validateSensorDriver()\n \t *\n \t * Failures in reading any of the targets are not deemed to be fatal,\n \t * but some properties and features, like constructing a\n-\t * CameraSensorInfo for the IPA module, won't be supported.\n+\t * IPACameraSensorInfo for the IPA module, won't be supported.\n \t *\n \t * \\todo Make support for selection targets mandatory as soon as all\n \t * test platforms have been updated.\n@@ -785,7 +674,7 @@ int CameraSensor::setControls(ControlList *ctrls)\n  *\n  * \\return 0 on success, a negative error code otherwise\n  */\n-int CameraSensor::sensorInfo(CameraSensorInfo *info) const\n+int CameraSensor::sensorInfo(IPACameraSensorInfo *info) const\n {\n \tif (!bayerFormat_)\n \t\treturn -EINVAL;\n@@ -812,7 +701,7 @@ int CameraSensor::sensorInfo(CameraSensorInfo *info) const\n \t}\n \n \t/*\n-\t * CameraSensorInfo::analogCrop::x and CameraSensorInfo::analogCrop::y\n+\t * IPACameraSensorInfo::analogCrop::x and IPACameraSensorInfo::analogCrop::y\n \t * are defined relatively to the active pixel area, while V4L2's\n \t * TGT_CROP target is defined in respect to the full pixel array.\n \t *\ndiff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex ade8ffbd..98c6160f 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -544,7 +544,7 @@ int PipelineHandlerIPU3::configure(Camera *camera, CameraConfiguration *c)\n \tif (ret)\n \t\treturn ret;\n \n-\tCameraSensorInfo sensorInfo;\n+\tIPACameraSensorInfo sensorInfo;\n \tcio2->sensor()->sensorInfo(&sensorInfo);\n \tdata->cropRegion_ = sensorInfo.analogCrop;\n \n@@ -883,7 +883,7 @@ int PipelineHandlerIPU3::initControls(IPU3CameraData *data)\n \tif (ret)\n \t\treturn ret;\n \n-\tCameraSensorInfo sensorInfo{};\n+\tIPACameraSensorInfo sensorInfo{};\n \tret = sensor->sensorInfo(&sensorInfo);\n \tif (ret)\n \t\treturn ret;\ndiff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\nindex 6fbdba04..f2a94dc0 100644\n--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n@@ -211,7 +211,7 @@ public:\n \tBayerFormat::Order nativeBayerOrder_;\n \n \t/* For handling digital zoom. */\n-\tCameraSensorInfo sensorInfo_;\n+\tIPACameraSensorInfo sensorInfo_;\n \tRectangle ispCrop_; /* crop in ISP (camera mode) pixels */\n \tRectangle scalerCrop_; /* crop in sensor native pixels */\n \tbool updateScalerCrop_;\n@@ -1275,7 +1275,7 @@ int RPiCameraData::configureIPA(const CameraConfiguration *config)\n \t\tipaConfig.lsTableHandle = lsTable_;\n \t}\n \n-\t/* We store the CameraSensorInfo for digital zoom calculations. */\n+\t/* We store the IPACameraSensorInfo for digital zoom calculations. */\n \tint ret = sensor_->sensorInfo(&sensorInfo_);\n \tif (ret) {\n \t\tLOG(RPI, Error) << \"Failed to retrieve camera sensor info\";\ndiff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\nindex adebe8b5..6699839c 100644\n--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n@@ -648,7 +648,7 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)\n \t\treturn ret;\n \n \t/* Inform IPA of stream configuration and sensor controls. */\n-\tCameraSensorInfo sensorInfo = {};\n+\tIPACameraSensorInfo sensorInfo = {};\n \tret = data->sensor_->sensorInfo(&sensorInfo);\n \tif (ret) {\n \t\t/* \\todo Turn this into a hard failure. */\n","prefixes":["libcamera-devel","v1","1/6"]}