[{"id":16903,"web_url":"https://patchwork.libcamera.org/comment/16903/","msgid":"<49296d9f-c531-a6cc-2dcf-0eb76f080726@ideasonboard.com>","date":"2021-05-11T16:31:38","subject":"Re: [libcamera-devel] [PATCH] ipa: mojom: Move CameraSensorInfo\n\tstruct exclusively to IPA IPC","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Umang,\n\nOn 11/05/2021 12:56, Umang Jain wrote:\n> CameraSensorInfo structure is designed to pass in camera sensor related\n> information from pipeline-handler to IPA. Since the pipeline-hander\n> and IPA are connected via mojom IPC IPA interface, the interface\n> itself provides a more suitable placement of CameraSensorInfo,\n> instead of camera_sensor.h (which is a libcamera internal header\n> ultimately, at this point).\n> \n> As CameraSensorInfo is already defined in core.mojom, it is just\n> a matter of removing [skipHeader] tag to allow code-generation\n> of CameraSensorInfo. Also, update header paths to include\n> CameraSensorInfo definition from IPA interfaces instead of\n> \"libcamera/internal/camera_sensor.h\".\n> \n> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n> ---\n>  include/libcamera/internal/camera_sensor.h |  17 +---\n>  include/libcamera/ipa/core.mojom           | 112 ++++++++++++++++++++-\n>  include/libcamera/ipa/ipa_interface.h      |   2 -\n>  src/ipa/raspberrypi/raspberrypi.cpp        |   1 -\n>  src/libcamera/camera_sensor.cpp            | 111 --------------------\n>  5 files changed, 112 insertions(+), 131 deletions(-)\n> \n> diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h\n> index 2a5c51a1..0905ebfa 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\nHrm, I feel like that deserves it's own 'group' (i.e. a new line above\nit) because it's the IPA as a sub component almost ... but equally, it's\nin the right place here by alphabetical sorting so ... I suspect it's fine.\n\n\n\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> diff --git a/include/libcamera/ipa/core.mojom b/include/libcamera/ipa/core.mojom\n> index 6caaa63e..2a09b233 100644\n> --- a/include/libcamera/ipa/core.mojom\n> +++ b/include/libcamera/ipa/core.mojom\n> @@ -78,7 +78,117 @@ module libcamera;\n>  \tuint32 height;\n>  };\n>  \n> -[skipHeader] struct CameraSensorInfo {\n> +/**\n> + * \\struct CameraSensorInfo\n> + * \\brief Report the image sensor characteristics\n\nI haven't checked yet, but do we need to do anything to make sure\ndoxygen parses this?\n\nHopefully doxygen will pick it up from the generated header file - but\ncan you check that it builds please?\n\n\n\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> +struct CameraSensorInfo {\n>  \tstring model;\n>  \n>  \tuint32 bitsPerPixel;\n> diff --git a/include/libcamera/ipa/ipa_interface.h b/include/libcamera/ipa/ipa_interface.h\n> index 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\nCertainly glad to see this go now ;-)\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n\n>  namespace libcamera {\n>  \n>  /*\n> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp\n> index 52d91db2..87774500 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> diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp\n> index eb84d9eb..170de827 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>","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 D74E0BF829\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 11 May 2021 16:31:45 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 26B3368918;\n\tTue, 11 May 2021 18:31:45 +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 03B3C61538\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 11 May 2021 18:31:42 +0200 (CEST)","from [192.168.0.20]\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 1B236436;\n\tTue, 11 May 2021 18:31:41 +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=\"e1pgSUYn\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1620750702;\n\tbh=rikZCG6V8Ms3XLiHs9ZCm68iksKtJcvNN7Kf96WVTsU=;\n\th=Reply-To:To:References:From:Subject:Date:In-Reply-To:From;\n\tb=e1pgSUYnUmZoUM7WHHBpIYwLlOSsjwdm3uG8nHAF3EmaJIZbbNFw25sckhNX/5lZW\n\tpH2xT7M/YEByFYB/ct7QBoSxRu3E2ERYmhX7b9GabqPaQfWnerETGNSkkgUI6cgnSs\n\t/tFahkQslTER5X3egsCdGNXfotKNmpVhoiC5Z3/8=","To":"Umang Jain <umang.jain@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20210511115611.57642-1-umang.jain@ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Organization":"Ideas on Board","Message-ID":"<49296d9f-c531-a6cc-2dcf-0eb76f080726@ideasonboard.com>","Date":"Tue, 11 May 2021 17:31:38 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101\n\tThunderbird/78.7.1","MIME-Version":"1.0","In-Reply-To":"<20210511115611.57642-1-umang.jain@ideasonboard.com>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH] 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>","Reply-To":"kieran.bingham@ideasonboard.com","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>"}},{"id":16905,"web_url":"https://patchwork.libcamera.org/comment/16905/","msgid":"<YJrREha6ct/UkBDH@pendragon.ideasonboard.com>","date":"2021-05-11T18:46:42","subject":"Re: [libcamera-devel] [PATCH] ipa: mojom: Move CameraSensorInfo\n\tstruct exclusively to IPA IPC","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hello,\n\nOn Tue, May 11, 2021 at 05:31:38PM +0100, Kieran Bingham wrote:\n> On 11/05/2021 12:56, Umang Jain wrote:\n> > CameraSensorInfo structure is designed to pass in camera sensor related\n> > information from pipeline-handler to IPA. Since the pipeline-hander\n> > and IPA are connected via mojom IPC IPA interface, the interface\n> > itself provides a more suitable placement of CameraSensorInfo,\n> > instead of camera_sensor.h (which is a libcamera internal header\n> > ultimately, at this point).\n> > \n> > As CameraSensorInfo is already defined in core.mojom, it is just\n> > a matter of removing [skipHeader] tag to allow code-generation\n> > of CameraSensorInfo. Also, update header paths to include\n> > CameraSensorInfo definition from IPA interfaces instead of\n> > \"libcamera/internal/camera_sensor.h\".\n> > \n> > Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n> > ---\n> >  include/libcamera/internal/camera_sensor.h |  17 +---\n> >  include/libcamera/ipa/core.mojom           | 112 ++++++++++++++++++++-\n> >  include/libcamera/ipa/ipa_interface.h      |   2 -\n> >  src/ipa/raspberrypi/raspberrypi.cpp        |   1 -\n> >  src/libcamera/camera_sensor.cpp            | 111 --------------------\n> >  5 files changed, 112 insertions(+), 131 deletions(-)\n> > \n> > diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h\n> > index 2a5c51a1..0905ebfa 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> Hrm, I feel like that deserves it's own 'group' (i.e. a new line above\n> it) because it's the IPA as a sub component almost ... but equally, it's\n> in the right place here by alphabetical sorting so ... I suspect it's fine.\n> \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> > diff --git a/include/libcamera/ipa/core.mojom b/include/libcamera/ipa/core.mojom\n> > index 6caaa63e..2a09b233 100644\n> > --- a/include/libcamera/ipa/core.mojom\n> > +++ b/include/libcamera/ipa/core.mojom\n> > @@ -78,7 +78,117 @@ module libcamera;\n> >  \tuint32 height;\n> >  };\n> >  \n> > -[skipHeader] struct CameraSensorInfo {\n> > +/**\n> > + * \\struct CameraSensorInfo\n\nI wonder if we should rename this to IPACameraSensorInfo to match the\nother structures.\n\n> > + * \\brief Report the image sensor characteristics\n> \n> I haven't checked yet, but do we need to do anything to make sure\n> doxygen parses this?\n> \n> Hopefully doxygen will pick it up from the generated header file - but\n> can you check that it builds please?\n\nAs far as I can tell, mojo doesn't process comments, and doxygen can't\nparse mojom files. We may need to move this to an otherwise empty .cpp\nfile.\n\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> > +struct CameraSensorInfo {\n> >  \tstring model;\n> >  \n> >  \tuint32 bitsPerPixel;\n> > diff --git a/include/libcamera/ipa/ipa_interface.h b/include/libcamera/ipa/ipa_interface.h\n> > index 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> \n> Certainly glad to see this go now ;-)\n> \n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> \n> >  namespace libcamera {\n> >  \n> >  /*\n> > diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp\n> > index 52d91db2..87774500 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> > diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp\n> > index eb84d9eb..170de827 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","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 303D1BF829\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 11 May 2021 18:46:53 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8E57068918;\n\tTue, 11 May 2021 20:46:52 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 583D668915\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 11 May 2021 20:46:51 +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 CF06F4A2;\n\tTue, 11 May 2021 20:46:50 +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=\"M4qTClTW\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1620758811;\n\tbh=xx9FVW+eV4cAk9jJni8FjkJ36T6ZAsjpSyyn5+zlkv0=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=M4qTClTW/Iz4jzRdb/7UaK9H5xSZhrVud6fA4k3lrBd+vB9fJ5trsu1UVSpTB4jjl\n\trntJ6aXFnkgEUjd/ifZy6Oqu/bcwBZPxn4rOVBKtpnslugu2HCs7H15QvAE0ogDb0t\n\tXJSvDcnje5Dkmys4KE+aqf6niJY+aSamVyu/Z2gg=","Date":"Tue, 11 May 2021 21:46:42 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<YJrREha6ct/UkBDH@pendragon.ideasonboard.com>","References":"<20210511115611.57642-1-umang.jain@ideasonboard.com>\n\t<49296d9f-c531-a6cc-2dcf-0eb76f080726@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<49296d9f-c531-a6cc-2dcf-0eb76f080726@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH] 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>","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>"}},{"id":16910,"web_url":"https://patchwork.libcamera.org/comment/16910/","msgid":"<2bc5ba3b-f544-cd41-37e3-e3480783bae2@ideasonboard.com>","date":"2021-05-12T06:47:19","subject":"Re: [libcamera-devel] [PATCH] ipa: mojom: Move CameraSensorInfo\n\tstruct exclusively to IPA IPC","submitter":{"id":86,"url":"https://patchwork.libcamera.org/api/people/86/","name":"Umang Jain","email":"umang.jain@ideasonboard.com"},"content":"Hi Laurent,\n\nOn 5/12/21 12:16 AM, Laurent Pinchart wrote:\n> Hello,\n>\n> On Tue, May 11, 2021 at 05:31:38PM +0100, Kieran Bingham wrote:\n>> On 11/05/2021 12:56, Umang Jain wrote:\n>>> CameraSensorInfo structure is designed to pass in camera sensor related\n>>> information from pipeline-handler to IPA. Since the pipeline-hander\n>>> and IPA are connected via mojom IPC IPA interface, the interface\n>>> itself provides a more suitable placement of CameraSensorInfo,\n>>> instead of camera_sensor.h (which is a libcamera internal header\n>>> ultimately, at this point).\n>>>\n>>> As CameraSensorInfo is already defined in core.mojom, it is just\n>>> a matter of removing [skipHeader] tag to allow code-generation\n>>> of CameraSensorInfo. Also, update header paths to include\n>>> CameraSensorInfo definition from IPA interfaces instead of\n>>> \"libcamera/internal/camera_sensor.h\".\n>>>\n>>> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n>>> ---\n>>>   include/libcamera/internal/camera_sensor.h |  17 +---\n>>>   include/libcamera/ipa/core.mojom           | 112 ++++++++++++++++++++-\n>>>   include/libcamera/ipa/ipa_interface.h      |   2 -\n>>>   src/ipa/raspberrypi/raspberrypi.cpp        |   1 -\n>>>   src/libcamera/camera_sensor.cpp            | 111 --------------------\n>>>   5 files changed, 112 insertions(+), 131 deletions(-)\n>>>\n>>> diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h\n>>> index 2a5c51a1..0905ebfa 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>> Hrm, I feel like that deserves it's own 'group' (i.e. a new line above\n>> it) because it's the IPA as a sub component almost ... but equally, it's\n>> in the right place here by alphabetical sorting so ... I suspect it's fine.\n>>\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>>> diff --git a/include/libcamera/ipa/core.mojom b/include/libcamera/ipa/core.mojom\n>>> index 6caaa63e..2a09b233 100644\n>>> --- a/include/libcamera/ipa/core.mojom\n>>> +++ b/include/libcamera/ipa/core.mojom\n>>> @@ -78,7 +78,117 @@ module libcamera;\n>>>   \tuint32 height;\n>>>   };\n>>>   \n>>> -[skipHeader] struct CameraSensorInfo {\n>>> +/**\n>>> + * \\struct CameraSensorInfo\n> I wonder if we should rename this to IPACameraSensorInfo to match the\n> other structures.\nyes, I agree and have applied the changes locally.\n>\n>>> + * \\brief Report the image sensor characteristics\n>> I haven't checked yet, but do we need to do anything to make sure\n>> doxygen parses this?\n>>\n>> Hopefully doxygen will pick it up from the generated header file - but\n>> can you check that it builds please?\n> As far as I can tell, mojo doesn't process comments, and doxygen can't\n> parse mojom files. We may need to move this to an otherwise empty .cpp\n> file.\nPinged epaul for that on IRC and see what path we should take.\nI will follow up there itself\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>>> +struct CameraSensorInfo {\n>>>   \tstring model;\n>>>   \n>>>   \tuint32 bitsPerPixel;\n>>> diff --git a/include/libcamera/ipa/ipa_interface.h b/include/libcamera/ipa/ipa_interface.h\n>>> index 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>> Certainly glad to see this go now ;-)\n>>\n>> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>>\n>>>   namespace libcamera {\n>>>   \n>>>   /*\n>>> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp\n>>> index 52d91db2..87774500 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>>> diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp\n>>> index eb84d9eb..170de827 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","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 E440DC31E3\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 12 May 2021 06:47:27 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 3B4206891C;\n\tWed, 12 May 2021 08:47:27 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id DDDA3602B6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 12 May 2021 08:47:25 +0200 (CEST)","from localhost.localdomain (unknown [103.251.226.24])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 5ADDEB2C;\n\tWed, 12 May 2021 08:47:24 +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=\"IIegHsHF\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1620802045;\n\tbh=9Wi6B644H2/4AvHHP/MEs+klX/jaPu4AlHOBcWYKIX0=;\n\th=Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=IIegHsHFfr+rUCEzoiK5nXa6MQvsEbSIoWovAarv9G0xAx2jtaRyMBpMDcfxpmHck\n\tgD0MMoBPoBblePwXxDteqFpqk9YRJj6Lu8RFMQB2RAc0LTvNLZkcGWZitECBTL3QSA\n\tjrCE86YfEW8nkLV2OsfPXhCXYuRQmsO2XdNejonc=","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>","References":"<20210511115611.57642-1-umang.jain@ideasonboard.com>\n\t<49296d9f-c531-a6cc-2dcf-0eb76f080726@ideasonboard.com>\n\t<YJrREha6ct/UkBDH@pendragon.ideasonboard.com>","From":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<2bc5ba3b-f544-cd41-37e3-e3480783bae2@ideasonboard.com>","Date":"Wed, 12 May 2021 12:17:19 +0530","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101\n\tThunderbird/68.11.0","MIME-Version":"1.0","In-Reply-To":"<YJrREha6ct/UkBDH@pendragon.ideasonboard.com>","Content-Language":"en-US","Subject":"Re: [libcamera-devel] [PATCH] 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>","Cc":"libcamera-devel@lists.libcamera.org","Content-Transfer-Encoding":"7bit","Content-Type":"text/plain; charset=\"us-ascii\"; Format=\"flowed\"","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]