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

Hans de Goede hdegoede at redhat.com
Wed May 1 13:57:59 CEST 2024


Hi Laurent,

On 5/1/24 12:11 AM, Laurent Pinchart wrote:
> 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 ?

I honestly don't know. Since the whole metadata stuff is all new
and somewhat in flux I think properly fixing this is best
delayed until we actually figure out what we want to do here /
how this all is going to work.

Regards,

Hans



> 
>> 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);
>>  	}
> 



More information about the libcamera-devel mailing list