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

Message ID 20240930152039.72459-3-umang.jain@ideasonboard.com
State Rejected
Headers show
Series
  • libcamera: pixelformat: Add isRaw() helper
Related show

Commit Message

Umang Jain Sept. 30, 2024, 3:20 p.m. UTC
Use the isRaw() helper provided by the PixelFormat class in order to
determine if the given pixel format is a raw format or not.

Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
---
 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(-)

Comments

Jacopo Mondi Oct. 1, 2024, 6:53 p.m. UTC | #1
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@ideasonboard.com>

Reviewed-by: Jacopo Mondi <jacopo.mondi@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
>

Patch
diff mbox series

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