@@ -624,10 +624,25 @@ int Vc4CameraData::platformConfigure(const RPi::RPiCameraConfiguration *rpiConfi
* supports it.
*/
if (sensorMetadata_) {
+ static const std::map<uint32_t, V4L2PixelFormat> metaFormats{
+ { MEDIA_BUS_FMT_META_8, V4L2PixelFormat(V4L2_META_FMT_GENERIC_8) },
+ { MEDIA_BUS_FMT_META_10, V4L2PixelFormat(V4L2_META_FMT_GENERIC_CSI2_10) },
+ { MEDIA_BUS_FMT_META_12, V4L2PixelFormat(V4L2_META_FMT_GENERIC_CSI2_12) },
+ { MEDIA_BUS_FMT_META_14, V4L2PixelFormat(V4L2_META_FMT_GENERIC_CSI2_14) },
+ };
+
V4L2SubdeviceFormat embeddedFormat = sensor_->embeddedDataFormat();
+ const auto metaFormat = metaFormats.find(embeddedFormat.code);
+ if (metaFormat == metaFormats.end()) {
+ LOG(RPI, Error)
+ << "Unsupported metadata format "
+ << utils::hex(embeddedFormat.code, 4);
+ return -EINVAL;
+ }
+
V4L2DeviceFormat format{};
- format.fourcc = V4L2PixelFormat(V4L2_META_FMT_SENSOR_DATA);
- format.planes[0].size = embeddedFormat.size.width * embeddedFormat.size.height;
+ format.fourcc = metaFormat->second;
+ format.size = embeddedFormat.size;
LOG(RPI, Debug) << "Setting embedded data format " << format;
ret = unicam_[Unicam::Embedded].dev()->setFormat(&format);
The Unicam embedded data video device suffers from two issues with the upstream driver: - The driver uses the generic metadata V4L2_META_FMT_GENERIC_* formats, instead of the downstream V4L2_META_FMT_SENSOR_DATA. - The driver requires the width and height of the embedded data stream to be configured. Fix them both. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- src/libcamera/pipeline/rpi/vc4/vc4.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-)