[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