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-01-29 11:21:57 +0100
commit4e0a6bf1e4e809bed952b908f9d8ae369b9458a6 (patch)
tree0538fa163f52677d168ba5a3b78b08a277b4f323
parent8e19093264b55e4bb469ddf2801fb923aa060713 (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 getYubMediaBusFormat() 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>
-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 5d0f86de..764e2121 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(PixelFormat *pixelFormat) const;
+ unsigned int getMediaBusFormat(PixelFormat *pixelFormat) const;
std::unique_ptr<CameraSensor> sensor_;
std::unique_ptr<V4L2Subdevice> csis_;
@@ -307,6 +308,15 @@ unsigned int ISICameraData::getYuvMediaBusFormat(PixelFormat *pixelFormat) const
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
*/
@@ -620,16 +630,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;