[PATCH 2/2] libcamera: pipeline: Use isRaw() helper to check RAW pixel formats

Jacopo Mondi jacopo.mondi at ideasonboard.com
Tue Oct 1 20:53:22 CEST 2024


Hi Umang

On Mon, Sep 30, 2024 at 08:50:39PM GMT, Umang Jain wrote:
> Use the isRaw() helper provided by the PixelFormat class in order to
> determine if the given pixel format is a raw format or not.

I'm a bit worried our definition of RAW colour encoding is somewhat
mis-leading, but indeed that's how we use it already

>
> Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>

Reviewed-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>

Thanks
  j

> ---
>  src/ipa/rkisp1/rkisp1.cpp                     |  3 +--
>  src/libcamera/pipeline/imx8-isi/imx8-isi.cpp  | 13 ++++--------
>  src/libcamera/pipeline/ipu3/ipu3.cpp          |  6 ++----
>  src/libcamera/pipeline/mali-c55/mali-c55.cpp  | 20 +++++--------------
>  src/libcamera/pipeline/rkisp1/rkisp1.cpp      |  9 +++------
>  src/libcamera/pipeline/rkisp1/rkisp1_path.cpp | 13 +++++-------
>  6 files changed, 20 insertions(+), 44 deletions(-)
>
> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
> index 9e161cab..d0917c19 100644
> --- a/src/ipa/rkisp1/rkisp1.cpp
> +++ b/src/ipa/rkisp1/rkisp1.cpp
> @@ -273,8 +273,7 @@ int IPARkISP1::configure(const IPAConfigInfo &ipaConfig,
>  	context_.configuration.raw = std::any_of(streamConfig.begin(), streamConfig.end(),
>  		[](auto &cfg) -> bool {
>  			PixelFormat pixelFormat{ cfg.second.pixelFormat };
> -			const PixelFormatInfo &format = PixelFormatInfo::info(pixelFormat);
> -			return format.colourEncoding == PixelFormatInfo::ColourEncodingRAW;
> +			return pixelFormat.isRaw();
>  		});
>
>  	for (auto const &a : algorithms()) {
> diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
> index 72aa6c75..e531ff5e 100644
> --- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
> +++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
> @@ -313,8 +313,7 @@ unsigned int ISICameraData::getYuvMediaBusFormat(const PixelFormat &pixelFormat)
>
>  unsigned int ISICameraData::getMediaBusFormat(PixelFormat *pixelFormat) const
>  {
> -	if (PixelFormatInfo::info(*pixelFormat).colourEncoding ==
> -	    PixelFormatInfo::ColourEncodingRAW)
> +	if (pixelFormat->isRaw())
>  		return getRawMediaBusFormat(pixelFormat);
>
>  	return getYuvMediaBusFormat(*pixelFormat);
> @@ -453,8 +452,7 @@ ISICameraConfiguration::validateYuv(std::set<Stream *> &availableStreams,
>  		LOG(ISI, Debug) << "Stream " << i << ": " << cfg.toString();
>
>  		/* If the stream is RAW or not supported default it to YUYV. */
> -		const PixelFormatInfo &cfgInfo = PixelFormatInfo::info(cfg.pixelFormat);
> -		if (cfgInfo.colourEncoding == PixelFormatInfo::ColourEncodingRAW ||
> +		if (cfg.pixelFormat.isRaw() ||
>  		    !formatsMap_.count(cfg.pixelFormat)) {
>
>  			LOG(ISI, Debug) << "Stream " << i << " format: "
> @@ -522,10 +520,8 @@ CameraConfiguration::Status ISICameraConfiguration::validate()
>  		maxResolution.width = std::min(2048U, maxResolution.width);
>
>  	/* Validate streams according to the format of the first one. */
> -	const PixelFormatInfo info = PixelFormatInfo::info(config_[0].pixelFormat);
> -
>  	Status validationStatus;
> -	if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW)
> +	if (config_[0].pixelFormat.isRaw())
>  		validationStatus = validateRaw(availableStreams, maxResolution);
>  	else
>  		validationStatus = validateYuv(availableStreams, maxResolution);
> @@ -652,8 +648,7 @@ StreamConfiguration PipelineHandlerISI::generateYUVConfiguration(Camera *camera,
>  	std::map<PixelFormat, std::vector<SizeRange>> streamFormats;
>
>  	for (const auto &[pixFmt, pipeFmt] : ISICameraConfiguration::formatsMap_) {
> -		const PixelFormatInfo &info = PixelFormatInfo::info(pixFmt);
> -		if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW)
> +		if (pixFmt.isRaw())
>  			continue;
>
>  		streamFormats[pixFmt] = { { kMinISISize, sensorSize } };
> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> index 430aa902..4e7f43ac 100644
> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> @@ -215,9 +215,7 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate()
>  	Size rawSize;
>
>  	for (const StreamConfiguration &cfg : config_) {
> -		const PixelFormatInfo &info = PixelFormatInfo::info(cfg.pixelFormat);
> -
> -		if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW) {
> +		if (cfg.pixelFormat.isRaw()) {
>  			rawCount++;
>  			rawSize = std::max(rawSize, cfg.size);
>  		} else {
> @@ -285,7 +283,7 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate()
>
>  		LOG(IPU3, Debug) << "Validating stream: " << config_[i].toString();
>
> -		if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW) {
> +		if (config_[i].pixelFormat.isRaw()) {
>  			/* Initialize the RAW stream with the CIO2 configuration. */
>  			cfg->size = cio2Configuration_.size;
>  			cfg->pixelFormat = cio2Configuration_.pixelFormat;
> diff --git a/src/libcamera/pipeline/mali-c55/mali-c55.cpp b/src/libcamera/pipeline/mali-c55/mali-c55.cpp
> index 45c71c1d..a659a99c 100644
> --- a/src/libcamera/pipeline/mali-c55/mali-c55.cpp
> +++ b/src/libcamera/pipeline/mali-c55/mali-c55.cpp
> @@ -31,16 +31,6 @@
>  #include "libcamera/internal/v4l2_subdevice.h"
>  #include "libcamera/internal/v4l2_videodevice.h"
>
> -namespace {
> -
> -bool isFormatRaw(const libcamera::PixelFormat &pixFmt)
> -{
> -	return libcamera::PixelFormatInfo::info(pixFmt).colourEncoding ==
> -	       libcamera::PixelFormatInfo::ColourEncodingRAW;
> -}
> -
> -} /* namespace */
> -
>  namespace libcamera {
>
>  LOG_DEFINE_CATEGORY(MaliC55)
> @@ -227,7 +217,7 @@ PixelFormat MaliC55CameraData::bestRawFormat() const
>  	 */
>  	for (const auto &maliFormat : maliC55FmtToCode) {
>  		PixelFormat pixFmt = maliFormat.first;
> -		if (!isFormatRaw(pixFmt))
> +		if (!pixFmt.isRaw())
>  			continue;
>
>  		unsigned int rawCode = maliFormat.second;
> @@ -330,7 +320,7 @@ CameraConfiguration::Status MaliC55CameraConfiguration::validate()
>  	bool frPipeAvailable = true;
>  	StreamConfiguration *rawConfig = nullptr;
>  	for (StreamConfiguration &config : config_) {
> -		if (!isFormatRaw(config.pixelFormat))
> +		if (!config.pixelFormat.isRaw())
>  			continue;
>
>  		if (rawConfig) {
> @@ -375,7 +365,7 @@ CameraConfiguration::Status MaliC55CameraConfiguration::validate()
>  	/* Adjust processed streams. */
>  	Size maxYuvSize;
>  	for (StreamConfiguration &config : config_) {
> -		if (isFormatRaw(config.pixelFormat))
> +		if (config.pixelFormat.isRaw())
>  			continue;
>
>  		/* Adjust format and size for processed streams. */
> @@ -599,7 +589,7 @@ PipelineHandlerMaliC55::generateConfiguration(Camera *camera,
>  		std::map<PixelFormat, std::vector<SizeRange>> formats;
>  		for (const auto &maliFormat : maliC55FmtToCode) {
>  			PixelFormat pixFmt = maliFormat.first;
> -			bool isRaw = isFormatRaw(pixFmt);
> +			bool isRaw = pixFmt.isRaw();
>
>  			/* RAW formats are only supported on the FR pipe. */
>  			if (pipe != &pipes_[MaliC55FR] && isRaw)
> @@ -795,7 +785,7 @@ int PipelineHandlerMaliC55::configure(Camera *camera,
>  		Stream *stream = streamConfig.stream();
>  		MaliC55Pipe *pipe = pipeFromStream(data, stream);
>
> -		if (isFormatRaw(streamConfig.pixelFormat))
> +		if (streamConfig.pixelFormat.isRaw())
>  			ret = configureRawStream(data, streamConfig, subdevFormat);
>  		else
>  			ret = configureProcessedStream(data, streamConfig, subdevFormat);
> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> index c02c7cf3..6cee7893 100644
> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> @@ -485,8 +485,7 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate()
>  	 */
>  	if (config_.size() > 1) {
>  		for (const auto &cfg : config_) {
> -			if (PixelFormatInfo::info(cfg.pixelFormat).colourEncoding ==
> -			    PixelFormatInfo::ColourEncodingRAW) {
> +			if (cfg.pixelFormat.isRaw()) {
>  				config_.resize(1);
>  				status = Adjusted;
>  				break;
> @@ -566,8 +565,7 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate()
>  	Size maxSize;
>
>  	for (const StreamConfiguration &cfg : config_) {
> -		const PixelFormatInfo &info = PixelFormatInfo::info(cfg.pixelFormat);
> -		if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW)
> +		if (cfg.pixelFormat.isRaw())
>  			rawFormat = cfg.pixelFormat;
>
>  		maxSize = std::max(maxSize, cfg.size);
> @@ -749,8 +747,7 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
>  		<< " crop " << rect;
>
>  	const PixelFormat &streamFormat = config->at(0).pixelFormat;
> -	const PixelFormatInfo &info = PixelFormatInfo::info(streamFormat);
> -	isRaw_ = info.colourEncoding == PixelFormatInfo::ColourEncodingRAW;
> +	isRaw_ = streamFormat.isRaw();
>
>  	/* YUYV8_2X8 is required on the ISP source path pad for YUV output. */
>  	if (!isRaw_)
> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp
> index da8d25c3..cb6117b9 100644
> --- a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp
> +++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp
> @@ -182,10 +182,8 @@ RkISP1Path::generateConfiguration(const CameraSensor *sensor, const Size &size,
>  	PixelFormat rawFormat;
>
>  	for (const auto &format : streamFormats_) {
> -		const PixelFormatInfo &info = PixelFormatInfo::info(format);
> -
>  		/* Populate stream formats for non-RAW configurations. */
> -		if (info.colourEncoding != PixelFormatInfo::ColourEncodingRAW) {
> +		if (!format.isRaw()) {
>  			if (role == StreamRole::Raw)
>  				continue;
>
> @@ -217,6 +215,7 @@ RkISP1Path::generateConfiguration(const CameraSensor *sensor, const Size &size,
>  		 * Store the raw format with the highest bits per pixel for
>  		 * later usage.
>  		 */
> +		const PixelFormatInfo &info = PixelFormatInfo::info(format);
>  		if (info.bitsPerPixel > rawBitsPerPixel) {
>  			rawBitsPerPixel = info.bitsPerPixel;
>  			rawFormat = format;
> @@ -272,9 +271,7 @@ CameraConfiguration::Status RkISP1Path::validate(const CameraSensor *sensor,
>  	bool found = false;
>
>  	for (const auto &format : streamFormats_) {
> -		const PixelFormatInfo &info = PixelFormatInfo::info(format);
> -
> -		if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW) {
> +		if (format.isRaw()) {
>  			/* Skip raw formats not supported by the sensor. */
>  			uint32_t mbusCode = formatToMediaBus.at(format);
>  			if (std::find(mbusCodes.begin(), mbusCodes.end(), mbusCode) ==
> @@ -285,6 +282,7 @@ CameraConfiguration::Status RkISP1Path::validate(const CameraSensor *sensor,
>  			 * Store the raw format with the highest bits per pixel
>  			 * for later usage.
>  			 */
> +			const PixelFormatInfo &info = PixelFormatInfo::info(format);
>  			if (info.bitsPerPixel > rawBitsPerPixel) {
>  				rawBitsPerPixel = info.bitsPerPixel;
>  				rawFormat = format;
> @@ -297,8 +295,7 @@ CameraConfiguration::Status RkISP1Path::validate(const CameraSensor *sensor,
>  		}
>  	}
>
> -	bool isRaw = PixelFormatInfo::info(cfg->pixelFormat).colourEncoding ==
> -		     PixelFormatInfo::ColourEncodingRAW;
> +	bool isRaw = cfg->pixelFormat.isRaw();
>
>  	/*
>  	 * If no raw format supported by the sensor has been found, use a
> --
> 2.45.2
>


More information about the libcamera-devel mailing list