[{"id":17865,"web_url":"https://patchwork.libcamera.org/comment/17865/","msgid":"<YNlnUb6B/xBgPlE+@pendragon.ideasonboard.com>","date":"2021-06-28T06:08:17","subject":"Re: [libcamera-devel] [PATCH v3 1/3] libcamera: Add support for\n\tmonochrome sensors","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi David,\n\nThank you for the patch.\n\nOn Fri, Jun 18, 2021 at 11:04:28PM +0100, David Plowman wrote:\n> This commit adds support for monochrome (greyscale) raw sensors. These\n> are sensors that have no colour filter array, so all pixels are the\n> same and there are no distinct colour channels.\n> \n> These sensors still require many of an ISP's processing stages, such\n> as denoise, tone mapping, but not those that involve colours (such as\n> demosaic, or colour matrices).\n\nAt some point we may want to rename BayerFormat to CFAPattern or\nsomething similar, what do you think ? It's not a dependency for this\npatch, so\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n>  include/libcamera/internal/bayer_format.h |  3 ++-\n>  src/libcamera/bayer_format.cpp            | 14 ++++++++++++--\n>  src/libcamera/camera_sensor.cpp           |  3 +++\n>  src/libcamera/property_ids.yaml           |  4 ++++\n>  4 files changed, 21 insertions(+), 3 deletions(-)\n> \n> diff --git a/include/libcamera/internal/bayer_format.h b/include/libcamera/internal/bayer_format.h\n> index 5b8c1dc9..723382d4 100644\n> --- a/include/libcamera/internal/bayer_format.h\n> +++ b/include/libcamera/internal/bayer_format.h\n> @@ -23,7 +23,8 @@ public:\n>  \t\tBGGR = 0,\n>  \t\tGBRG = 1,\n>  \t\tGRBG = 2,\n> -\t\tRGGB = 3\n> +\t\tRGGB = 3,\n> +\t\tMONO = 4\n>  \t};\n>  \n>  \tenum Packing : uint16_t {\n> diff --git a/src/libcamera/bayer_format.cpp b/src/libcamera/bayer_format.cpp\n> index ed61202c..11355f14 100644\n> --- a/src/libcamera/bayer_format.cpp\n> +++ b/src/libcamera/bayer_format.cpp\n> @@ -45,6 +45,8 @@ namespace libcamera {\n>   * \\brief G then R on the first row, B then G on the second row.\n>   * \\var BayerFormat::RGGB\n>   * \\brief R then G on the first row, G then B on the second row.\n> + * \\var BayerFormat::MONO\n> + * \\brief Monochrome image data, there is no colour filter array.\n>   */\n>  \n>  /**\n> @@ -111,6 +113,8 @@ const std::map<BayerFormat, V4L2PixelFormat, BayerFormatComparator> bayerToV4l2{\n>  \t{ { BayerFormat::GBRG, 16, BayerFormat::None }, V4L2PixelFormat(V4L2_PIX_FMT_SGBRG16) },\n>  \t{ { BayerFormat::GRBG, 16, BayerFormat::None }, V4L2PixelFormat(V4L2_PIX_FMT_SGRBG16) },\n>  \t{ { BayerFormat::RGGB, 16, BayerFormat::None }, V4L2PixelFormat(V4L2_PIX_FMT_SRGGB16) },\n> +\t{ { BayerFormat::MONO, 8, BayerFormat::None }, V4L2PixelFormat(V4L2_PIX_FMT_GREY) },\n> +\t{ { BayerFormat::MONO, 10, BayerFormat::CSI2Packed }, V4L2PixelFormat(V4L2_PIX_FMT_Y10P) },\n>  };\n>  \n>  const std::unordered_map<unsigned int, BayerFormat> mbusCodeToBayer{\n> @@ -146,6 +150,8 @@ const std::unordered_map<unsigned int, BayerFormat> mbusCodeToBayer{\n>  \t{ MEDIA_BUS_FMT_SGBRG16_1X16, { BayerFormat::GBRG, 16, BayerFormat::None } },\n>  \t{ MEDIA_BUS_FMT_SGRBG16_1X16, { BayerFormat::GRBG, 16, BayerFormat::None } },\n>  \t{ MEDIA_BUS_FMT_SRGGB16_1X16, { BayerFormat::RGGB, 16, BayerFormat::None } },\n> +\t{ MEDIA_BUS_FMT_Y8_1X8, { BayerFormat::MONO, 8, BayerFormat::None } },\n> +\t{ MEDIA_BUS_FMT_Y10_1X10, { BayerFormat::MONO, 10, BayerFormat::None } },\n>  };\n>  \n>  } /* namespace */\n> @@ -198,9 +204,10 @@ std::string BayerFormat::toString() const\n>  \t\t\"BGGR\",\n>  \t\t\"GBRG\",\n>  \t\t\"GRBG\",\n> -\t\t\"RGGB\"\n> +\t\t\"RGGB\",\n> +\t\t\"MONO\"\n>  \t};\n> -\tif (isValid() && order <= RGGB)\n> +\tif (isValid() && order <= MONO)\n>  \t\tresult = orderStrings[order];\n>  \telse\n>  \t\treturn \"INVALID\";\n> @@ -280,6 +287,9 @@ BayerFormat BayerFormat::transform(Transform t) const\n>  {\n>  \tBayerFormat result = *this;\n>  \n> +\tif (order == MONO)\n> +\t\treturn result;\n> +\n>  \t/*\n>  \t * Observe that flipping bit 0 of the Order enum performs a horizontal\n>  \t * mirror on the Bayer pattern (e.g. RGGB goes to GRBG). Similarly,\n> diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp\n> index 3e135353..fb67c15a 100644\n> --- a/src/libcamera/camera_sensor.cpp\n> +++ b/src/libcamera/camera_sensor.cpp\n> @@ -427,6 +427,9 @@ int CameraSensor::initProperties()\n>  \t\tcase BayerFormat::RGGB:\n>  \t\t\tcfa = properties::draft::RGGB;\n>  \t\t\tbreak;\n> +\t\tcase BayerFormat::MONO:\n> +\t\t\tcfa = properties::draft::MONO;\n> +\t\t\tbreak;\n>  \t\t}\n>  \n>  \t\tproperties_.set(properties::draft::ColorFilterArrangement, cfa);\n> diff --git a/src/libcamera/property_ids.yaml b/src/libcamera/property_ids.yaml\n> index 104e9aaf..12ecbce5 100644\n> --- a/src/libcamera/property_ids.yaml\n> +++ b/src/libcamera/property_ids.yaml\n> @@ -706,5 +706,9 @@ controls:\n>            description: |\n>              Sensor is not Bayer; output has 3 16-bit values for each pixel,\n>              instead of just 1 16-bit value per pixel.\n> +        - name: MONO\n> +          value: 5\n> +          description: |\n> +            Sensor is not Bayer; output consists of a single colour channel.\n>  \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 5C28DC321E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 28 Jun 2021 06:08:21 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id BF94F684D5;\n\tMon, 28 Jun 2021 08:08:20 +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 AC9E36028C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 28 Jun 2021 08:08:19 +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 23C96B8A;\n\tMon, 28 Jun 2021 08:08:19 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"FFSoxy44\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1624860499;\n\tbh=siTLTDQPIjSXn3xBucFcOMVUC3+4LJTwxpifEEFmu2s=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=FFSoxy44JsoU6/C5FhAx+nE2Ptpm+Rlke8mmsMekV67QVx2XVMZVtE0FMSKLngqRx\n\t8W/2CHkQxV76D7VSr3HmnVAMvwEaaFYT9WPFhsMhS1+MkR2UHY1ceXNYr10Rsb8dMq\n\t34UTl4/jNUv7l/DMho6/nWL9qkzMYEses0yEeu9M=","Date":"Mon, 28 Jun 2021 09:08:17 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"David Plowman <david.plowman@raspberrypi.com>","Message-ID":"<YNlnUb6B/xBgPlE+@pendragon.ideasonboard.com>","References":"<20210618220430.31457-1-david.plowman@raspberrypi.com>\n\t<20210618220430.31457-2-david.plowman@raspberrypi.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20210618220430.31457-2-david.plowman@raspberrypi.com>","Subject":"Re: [libcamera-devel] [PATCH v3 1/3] libcamera: Add support for\n\tmonochrome sensors","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>"}}]