@@ -814,19 +814,32 @@ std::string V4L2VideoDevice::logPrefix() const
*/
int V4L2VideoDevice::getFormat(V4L2DeviceFormat *format)
{
+ int ret;
+
switch (bufferType_) {
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
case V4L2_BUF_TYPE_VIDEO_OUTPUT:
- return getFormatSingleplane(format);
+ ret = getFormatSingleplane(format);
+ break;
case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
- return getFormatMultiplane(format);
+ ret = getFormatMultiplane(format);
+ break;
case V4L2_BUF_TYPE_META_CAPTURE:
case V4L2_BUF_TYPE_META_OUTPUT:
- return getFormatMeta(format);
+ ret = getFormatMeta(format);
+ break;
default:
- return -EINVAL;
+ ret = -EINVAL;
+ break;
}
+
+ if (ret)
+ return ret;
+
+ LOG(V4L2, Debug) << "returned format: " << *format;
+
+ return 0;
}
/**
@@ -841,19 +854,34 @@ int V4L2VideoDevice::getFormat(V4L2DeviceFormat *format)
*/
int V4L2VideoDevice::tryFormat(V4L2DeviceFormat *format)
{
+ int ret;
+
+ LOG(V4L2, Debug) << "trying format: " << *format;
+
switch (bufferType_) {
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
case V4L2_BUF_TYPE_VIDEO_OUTPUT:
- return trySetFormatSingleplane(format, false);
+ ret = trySetFormatSingleplane(format, false);
+ break;
case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
- return trySetFormatMultiplane(format, false);
+ ret = trySetFormatMultiplane(format, false);
+ break;
case V4L2_BUF_TYPE_META_CAPTURE:
case V4L2_BUF_TYPE_META_OUTPUT:
- return trySetFormatMeta(format, false);
+ ret = trySetFormatMeta(format, false);
+ break;
default:
- return -EINVAL;
+ ret = -EINVAL;
+ break;
}
+
+ if (ret)
+ return ret;
+
+ LOG(V4L2, Debug) << "returned format: " << *format;
+
+ return 0;
}
/**
@@ -869,6 +897,8 @@ int V4L2VideoDevice::setFormat(V4L2DeviceFormat *format)
{
int ret;
+ LOG(V4L2, Debug) << "setting format: " << *format;
+
switch (bufferType_) {
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
case V4L2_BUF_TYPE_VIDEO_OUTPUT:
@@ -894,6 +924,8 @@ int V4L2VideoDevice::setFormat(V4L2DeviceFormat *format)
format_ = *format;
formatInfo_ = &PixelFormatInfo::info(format_.fourcc);
+ LOG(V4L2, Debug) << "returned format: " << *format;
+
return 0;
}
These functions have not been logging the v4l2 formats that they receive and the ones that the device actually returns. This makes debugging much more difficult. And multiple pipeline handlers work around this by adding logging around `setFormat()` calls, but those can be missed, and they don't necessarily include the path of the device node. So add these log messages into the `{get,set,try}Format()` methods themselves. Example: DEBUG V4L2 v4l2_videodevice.cpp:859 /dev/video0[13:cap]: trying format: 640x480-YUYV[]/Unset DEBUG V4L2 v4l2_videodevice.cpp:882 /dev/video0[13:cap]: returned format: 640x480-YUYV[614400/1280]/Rec709/Rec709/Rec601/Limited Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> --- src/libcamera/v4l2_videodevice.cpp | 48 +++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 8 deletions(-)