[libcamera-devel] [PATCH] libcamera: imx8-isi: Enumerate supported stream formats
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Sat Nov 19 01:32:03 CET 2022
Hi Jacopo,
Thank you for the patch.
On Fri, Nov 18, 2022 at 05:40:35PM +0100, Jacopo Mondi via libcamera-devel wrote:
> 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 <jacopo at jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> 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<PixelFormat, std::vector<SizeRange>> 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<PixelFormat, std::vector<SizeRange>> 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);
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list