core: Filter enumerate() to only return real VIDEO_CAPTURE devices
UVC cameras commonly expose multiple /dev/video* nodes per physical
device: typically one or two real Video Capture interfaces plus matching
Metadata Capture siblings. Our enumerate() was accepting all of them by
filename pattern alone, so a Logitech BRIO (with video0/2 real + video1/3
metadata-only) showed up as four rows in `pareidolia cameras` and got
exercised four times by the capture hardware test.
The metadata-only nodes don't have VIDEO_CAPTURE capability, so opening
them for capture (set_format, REQBUFS, STREAMON) fails after the
firmware-touching ioctls have already woken the device. On the BRIO this
puts the IR illuminator into a 'warmed' state that lingers for several
seconds after the test ends — visible IR LEDs glowing between test runs
— and also causes control-query timeouts on subsequent v4l2-ctl
inspections.
Querying VIDIOC_QUERYCAP on the node (the device_caps field, which is
per-node rather than the union across the driver) and filtering by
VIDEO_CAPTURE excludes the metadata siblings without any extra fragility:
real capture devices keep advertising the cap; metadata ones don't.
After this, `pareidolia cameras` on a BRIO returns:
PATH NAME KIND
/dev/video2 Logitech BRIO ir
/dev/video0 Logitech BRIO rgb
instead of four rows where two were unusable noise.