[PATCH 1/2] libcamera: v4l2_videodevice: Fix devices which set both V4L2_CAP_VIDEO and V4L2_CAP_META

Laurent Pinchart laurent.pinchart at ideasonboard.com
Wed May 1 00:11:40 CEST 2024


Hi Hans,

Thank you for the patch.

On Tue, Apr 30, 2024 at 07:17:27PM +0200, Hans de Goede wrote:
> The /dev/video# nodes of the IPU6 driver set both V4L2_CAP_VIDEO_CAPTURE
> and V4L2_CAP_META_CAPTURE.
> 
> This was resulting in V4L2VideoDevice::getFormat() / tryFormat() /
> setFormat() calling the metadata related ioctls instead of the videocap
> ioctls causing things to not work.
> 
> Fix this by making V4L2Capability::isMeta() return false when the device
> also has one of the video capabilities.

This seems to be a quick hack. What would it take to solve the issue
correctly ?

> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> ---
>  include/libcamera/internal/v4l2_videodevice.h | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h
> index d157a447..5816c18d 100644
> --- a/include/libcamera/internal/v4l2_videodevice.h
> +++ b/include/libcamera/internal/v4l2_videodevice.h
> @@ -92,6 +92,10 @@ struct V4L2Capability final : v4l2_capability {
>  	}
>  	bool isMeta() const
>  	{
> +		/* Treat devs which combine video and meta as video not meta */

s/devs/devices/
s/meta/metadata/g

> +		if (isVideo())
> +			return false;
> +
>  		return device_caps() & (V4L2_CAP_META_CAPTURE |
>  					V4L2_CAP_META_OUTPUT);
>  	}

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list