From patchwork Fri Nov 18 16:40:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 17814 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 3FDD3BE08B for ; Fri, 18 Nov 2022 16:40:44 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id C13986308F; Fri, 18 Nov 2022 17:40:43 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1668789643; bh=v6YPX9tbKNAm8wiL4sUZIBCwCcVh53GutQv+FLM3XdM=; h=To:Date:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=vMcJlcfqvMuReLqkN5czO6pf92DbodBpuyCCn6dzS7j+rRcUNIuR0n4x75MdDm+pO ULxighNHKmvD0r1XxEGIF7muMbOx3i18gj0kznOl/bLFQlOna2BUvtqT92VklrEYNB y4pG1fIW+poHQG2suOYcabkU4F2eSFLK4PiOykkssiWAQfJkOrDkn679LHhVIBXfyC T5Thvuoq1laiOQHkFD/lAvWEzo1SxgpyncAbkRzpRN5O/t7ocXtbhrqWksdDgCPujO 9SKVGbwms3uqMQXeLpjDrspRJ6xVHG6enw4IPipWC/CZcHqsrGG3sS3HcxitSfeGnj 56nrnLGa/+kcQ== Received: from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net [217.70.183.194]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id DC3086308D for ; Fri, 18 Nov 2022 17:40:41 +0100 (CET) Received: (Authenticated sender: jacopo@jmondi.org) by mail.gandi.net (Postfix) with ESMTPSA id 5CD0340005; Fri, 18 Nov 2022 16:40:41 +0000 (UTC) To: libcamera-devel@lists.libcamera.org Date: Fri, 18 Nov 2022 17:40:35 +0100 Message-Id: <20221118164035.23740-1-jacopo@jmondi.org> X-Mailer: git-send-email 2.38.1 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH] libcamera: imx8-isi: Enumerate supported stream formats X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jacopo Mondi via libcamera-devel From: Jacopo Mondi Reply-To: Jacopo Mondi Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Add to the formats map all the supported ISI video capture stream formats. This allows to populate the list of stream formats for all the non-RAW use cases, as the ISI can perform colorspace conversion between YUV and RGB. Signed-off-by: Jacopo Mondi Reviewed-by: Laurent Pinchart --- src/libcamera/pipeline/imx8-isi/imx8-isi.cpp | 62 +++++++++++++++++++- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp index 14d699b7a42b..a3dfd3fc529c 100644 --- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp +++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp @@ -188,11 +188,51 @@ const ISICameraConfiguration::FormatMap ISICameraConfiguration::formatsMap_ = { { MEDIA_BUS_FMT_YUV8_1X24, MEDIA_BUS_FMT_UYVY8_1X16 }, }, + { + formats::AVUY8888, + { MEDIA_BUS_FMT_YUV8_1X24, + MEDIA_BUS_FMT_UYVY8_1X16 }, + }, + { + formats::NV12, + { MEDIA_BUS_FMT_YUV8_1X24, + MEDIA_BUS_FMT_UYVY8_1X16 }, + }, + { + formats::NV16, + { MEDIA_BUS_FMT_YUV8_1X24, + MEDIA_BUS_FMT_UYVY8_1X16 }, + }, + { + formats::YUV444, + { MEDIA_BUS_FMT_YUV8_1X24, + MEDIA_BUS_FMT_UYVY8_1X16 }, + }, { formats::RGB565, { MEDIA_BUS_FMT_RGB888_1X24, MEDIA_BUS_FMT_RGB565_1X16 }, }, + { + formats::BGR888, + { MEDIA_BUS_FMT_RGB888_1X24, + MEDIA_BUS_FMT_RGB565_1X16 }, + }, + { + formats::RGB888, + { MEDIA_BUS_FMT_RGB888_1X24, + MEDIA_BUS_FMT_RGB565_1X16 }, + }, + { + formats::XRGB8888, + { MEDIA_BUS_FMT_RGB888_1X24, + MEDIA_BUS_FMT_RGB565_1X16 }, + }, + { + formats::ABGR8888, + { MEDIA_BUS_FMT_RGB888_1X24, + MEDIA_BUS_FMT_RGB565_1X16 }, + }, { formats::SBGGR8, { MEDIA_BUS_FMT_SBGGR8_1X8, @@ -546,6 +586,7 @@ PipelineHandlerISI::generateConfiguration(Camera *camera, return nullptr; } + bool isRaw = false; for (const auto &role : roles) { /* * Prefer the following formats @@ -553,6 +594,7 @@ PipelineHandlerISI::generateConfiguration(Camera *camera, * - ViewFinder/VideoRecording: 1080p YUYV * - RAW: sensor's native format and resolution */ + std::map> streamFormats; PixelFormat pixelFormat; Size size; @@ -614,6 +656,9 @@ PipelineHandlerISI::generateConfiguration(Camera *camera, size = data->sensor_->resolution(); pixelFormat = rawPipeFormat->first; + streamFormats[pixelFormat] = { { kMinISISize, size } }; + isRaw = true; + break; } @@ -622,9 +667,20 @@ PipelineHandlerISI::generateConfiguration(Camera *camera, return nullptr; } - /* \todo Add all supported formats. */ - std::map> streamFormats; - streamFormats[pixelFormat] = { { kMinISISize, size } }; + /* + * For non-RAW configurations the ISI can perform colorspace + * conversion. List all the supported output formats here. + */ + if (!isRaw) { + for (const auto &[pixFmt, pipeFmt] : ISICameraConfiguration::formatsMap_) { + const PixelFormatInfo &info = PixelFormatInfo::info(pixFmt); + if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW) + continue; + + streamFormats[pixFmt] = { { kMinISISize, size } }; + } + } + StreamFormats formats(streamFormats); StreamConfiguration cfg(formats);