[PATCH v6 04/12] libcamera: formats: Add a helper to check for a raw pixel info
Milan Zamazal
mzamazal at redhat.com
Mon May 26 12:15:24 CEST 2025
There is another common pattern checking for raw colour encoding,
present in multiple places:
pixelFormatInfo.colourEncoding == PixelFormatInfo::ColourEncodingRAW
Let's extract it into a helper too.
Signed-off-by: Milan Zamazal <mzamazal at redhat.com>
---
include/libcamera/internal/formats.h | 1 +
src/libcamera/formats.cpp | 9 +++++++--
src/libcamera/pipeline/imx8-isi/imx8-isi.cpp | 7 +++----
src/libcamera/pipeline/ipu3/ipu3.cpp | 4 ++--
src/libcamera/pipeline/rkisp1/rkisp1.cpp | 4 ++--
src/libcamera/pipeline/rkisp1/rkisp1_path.cpp | 7 +++----
6 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/include/libcamera/internal/formats.h b/include/libcamera/internal/formats.h
index bc4417d0..dd81a888 100644
--- a/include/libcamera/internal/formats.h
+++ b/include/libcamera/internal/formats.h
@@ -32,6 +32,7 @@ public:
};
bool isValid() const { return format.isValid(); }
+ bool isRaw() const { return colourEncoding == ColourEncodingRAW; }
static const PixelFormatInfo &info(const PixelFormat &format);
static const PixelFormatInfo &info(const V4L2PixelFormat &format);
diff --git a/src/libcamera/formats.cpp b/src/libcamera/formats.cpp
index c6e0a262..02888acf 100644
--- a/src/libcamera/formats.cpp
+++ b/src/libcamera/formats.cpp
@@ -993,6 +993,12 @@ const std::map<PixelFormat, PixelFormatInfo> pixelFormatInfo{
* \return True if the pixel format info is valid, false otherwise
*/
+/**
+ * \fn bool PixelFormatInfo::isRaw() const
+ * \brief Check if the colour encoding is raw
+ * \return True if the colour encoding is raw, false otherwise
+ */
+
/**
* \brief Retrieve information about a pixel format
* \param[in] format The pixel format
@@ -1222,8 +1228,7 @@ unsigned int PixelFormatInfo::numPlanes() const
*/
bool isFormatRaw(const libcamera::PixelFormat &pixFmt)
{
- return libcamera::PixelFormatInfo::info(pixFmt).colourEncoding ==
- libcamera::PixelFormatInfo::ColourEncodingRAW;
+ return libcamera::PixelFormatInfo::info(pixFmt).isRaw();
}
} /* namespace libcamera */
diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
index ad36ebea..5feaaa65 100644
--- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
+++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
@@ -452,9 +452,8 @@ ISICameraConfiguration::validateYuv(std::set<Stream *> &availableStreams,
/* If the stream is RAW or not supported default it to YUYV. */
const PixelFormatInfo &cfgInfo = PixelFormatInfo::info(cfg.pixelFormat);
- if (cfgInfo.colourEncoding == PixelFormatInfo::ColourEncodingRAW ||
- !formatsMap_.count(cfg.pixelFormat)) {
+ if (cfgInfo.isRaw() || !formatsMap_.count(cfg.pixelFormat)) {
LOG(ISI, Debug) << "Stream " << i << " format: "
<< cfg.pixelFormat << " adjusted to YUYV";
@@ -523,7 +522,7 @@ CameraConfiguration::Status ISICameraConfiguration::validate()
const PixelFormatInfo info = PixelFormatInfo::info(config_[0].pixelFormat);
Status validationStatus;
- if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW)
+ if (info.isRaw())
validationStatus = validateRaw(availableStreams, maxResolution);
else
validationStatus = validateYuv(availableStreams, maxResolution);
@@ -651,7 +650,7 @@ StreamConfiguration PipelineHandlerISI::generateYUVConfiguration(Camera *camera,
for (const auto &[pixFmt, pipeFmt] : ISICameraConfiguration::formatsMap_) {
const PixelFormatInfo &info = PixelFormatInfo::info(pixFmt);
- if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW)
+ if (info.isRaw())
continue;
streamFormats[pixFmt] = { { kMinISISize, sensorSize } };
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index e31e3879..6d10ed7f 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -218,7 +218,7 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate()
for (const StreamConfiguration &cfg : config_) {
const PixelFormatInfo &info = PixelFormatInfo::info(cfg.pixelFormat);
- if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW) {
+ if (info.isRaw()) {
rawCount++;
rawSize = std::max(rawSize, cfg.size);
} else {
@@ -286,7 +286,7 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate()
LOG(IPU3, Debug) << "Validating stream: " << config_[i].toString();
- if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW) {
+ if (info.isRaw()) {
/* Initialize the RAW stream with the CIO2 configuration. */
cfg->size = cio2Configuration_.size;
cfg->pixelFormat = cio2Configuration_.pixelFormat;
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 50c83fb7..4c6be9b7 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -651,7 +651,7 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate()
for (const StreamConfiguration &cfg : config_) {
const PixelFormatInfo &info = PixelFormatInfo::info(cfg.pixelFormat);
- if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW)
+ if (info.isRaw())
rawFormat = cfg.pixelFormat;
maxSize = std::max(maxSize, cfg.size);
@@ -842,7 +842,7 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
Rectangle outputCrop = inputCrop;
const PixelFormat &streamFormat = config->at(0).pixelFormat;
const PixelFormatInfo &info = PixelFormatInfo::info(streamFormat);
- isRaw_ = info.colourEncoding == PixelFormatInfo::ColourEncodingRAW;
+ isRaw_ = info.isRaw();
useDewarper_ = dewarper_ && !isRaw_;
/* YUYV8_2X8 is required on the ISP source path pad for YUV output. */
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp
index 64018dc5..3e437b0c 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp
@@ -188,7 +188,7 @@ RkISP1Path::generateConfiguration(const CameraSensor *sensor, const Size &size,
const PixelFormatInfo &info = PixelFormatInfo::info(format);
/* Populate stream formats for non-RAW configurations. */
- if (info.colourEncoding != PixelFormatInfo::ColourEncodingRAW) {
+ if (!info.isRaw()) {
if (role == StreamRole::Raw)
continue;
@@ -279,7 +279,7 @@ RkISP1Path::validate(const CameraSensor *sensor,
for (const auto &format : streamFormats_) {
const PixelFormatInfo &info = PixelFormatInfo::info(format);
- if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW) {
+ if (info.isRaw()) {
/* Skip raw formats not supported by the sensor. */
uint32_t mbusCode = formatToMediaBus.at(format);
if (std::find(mbusCodes.begin(), mbusCodes.end(), mbusCode) ==
@@ -310,8 +310,7 @@ RkISP1Path::validate(const CameraSensor *sensor,
if (sensorConfig && !rawFormat.isValid())
return CameraConfiguration::Invalid;
- bool isRaw = PixelFormatInfo::info(cfg->pixelFormat).colourEncoding ==
- PixelFormatInfo::ColourEncodingRAW;
+ bool isRaw = PixelFormatInfo::info(cfg->pixelFormat).isRaw();
/*
* If no raw format supported by the sensor has been found, use a
--
2.49.0
More information about the libcamera-devel
mailing list