From f8e998a4c19e66b6a9ba5dc864ac6f6556c87937 Mon Sep 17 00:00:00 2001 From: Jacopo Mondi Date: Fri, 18 Nov 2022 17:32:05 +0100 Subject: libcamera: imx8-isi: Enumerate supported stream formats 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 14d699b7..a3dfd3fc 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); -- cgit v1.2.1