summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo.mondi@ideasonboard.com>2023-01-29 11:21:57 +0100
committerJacopo Mondi <jacopo.mondi@ideasonboard.com>2023-04-30 18:40:18 +0200
commit14995410fe8546350d35108398e8b853c9ced002 (patch)
treeb3d28ba92dcf46081b2e74bbe1f2a5525cca58d0
parentdd78f2f8add6ad284183e73b4e1eee0f35bd76ba (diff)
libcamera: imx8-isi: Automatically select media bus code
The ISICameraConfiguration::validate() function selects which media bus format to configure the sensor with based on the pixel format of the first configured stream using the media bus code associated to it in the formatsMap_ map. In order to remove the PixelFormamt-to-mbus-code association in formatsMap_ provide a wrapper function for the newly introduced getRawMediaBusFormat() and getYuvMediaBusFormat() that automatically selects what media bus format to use based on the first stream pixel format. Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com> Tested-by: Daniel Scally <dan.scally@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r--src/libcamera/pipeline/imx8-isi/imx8-isi.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
index 148f108d..ee3dc4ad 100644
--- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
+++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
@@ -61,6 +61,7 @@ public:
unsigned int getRawMediaBusFormat(PixelFormat *pixelFormat) const;
unsigned int getYuvMediaBusFormat(const PixelFormat &pixelFormat) const;
+ unsigned int getMediaBusFormat(PixelFormat *pixelFormat) const;
std::unique_ptr<CameraSensor> sensor_;
std::unique_ptr<V4L2Subdevice> csis_;
@@ -318,6 +319,15 @@ unsigned int ISICameraData::getYuvMediaBusFormat(const PixelFormat &pixelFormat)
return supportedCodes[0];
}
+unsigned int ISICameraData::getMediaBusFormat(PixelFormat *pixelFormat) const
+{
+ if (PixelFormatInfo::info(*pixelFormat).colourEncoding ==
+ PixelFormatInfo::ColourEncodingRAW)
+ return getRawMediaBusFormat(pixelFormat);
+
+ return getYuvMediaBusFormat(*pixelFormat);
+}
+
/* -----------------------------------------------------------------------------
* Camera Configuration
*/
@@ -631,16 +641,16 @@ CameraConfiguration::Status ISICameraConfiguration::validate()
* image quality in exchange of a usually slower frame rate.
* Usage of the STILL_CAPTURE role could be consider for this.
*/
- const PipeFormat &pipeFmt = formatsMap_.at(config_[0].pixelFormat);
-
Size maxSize;
for (const auto &cfg : config_) {
if (cfg.size > maxSize)
maxSize = cfg.size;
}
+ PixelFormat pixelFormat = config_[0].pixelFormat;
+
V4L2SubdeviceFormat sensorFormat{};
- sensorFormat.mbus_code = pipeFmt.sensorCode;
+ sensorFormat.mbus_code = data_->getMediaBusFormat(&pixelFormat);
sensorFormat.size = maxSize;
LOG(ISI, Debug) << "Computed sensor configuration: " << sensorFormat;