[libcamera-devel] Are camera sensor drivers required to support VIDIOC_SUBDEV_ENUM_FRAME_SIZE ioctl?

Andrey Konovalov andrey.konovalov at linaro.org
Thu Oct 17 19:39:56 CEST 2019


Sorry, I mixed up the errno value.

On 17.10.2019 13:34, Andrey Konovalov wrote:
> Hi,
> 
> (The current) libcamera wouldn't work with sensors which don't support VIDIOC_SUBDEV_ENUM_FRAME_SIZE ioctl:
> 1) to "enumerate all media bus codes and frame sizes supported by the subdevice on a pad",
>     V4L2Subdevice::formats() calls V4L2Subdevice::enumPadSizes()
> 2) V4L2Subdevice::enumPadSizes() calls ioctl(VIDIOC_SUBDEV_ENUM_FRAME_SIZE, &sizeEnum), and the sensor driver
>     which doesn't implement the enum_frame_size entry in v4l2_subdev_pad_ops returns -EINVAL for the very first pad.

Not -EINVAL, but -ENOTTY.

Thanks,
Andrey

> 3) V4L2Subdevice::enumPadSizes() returns the empty vector of the sizes supported by the pad w/o logging any error.
> 4) V4L2Subdevice::formats() sees sizes.empty()==TRUE, and returns the empty list of the formats supported by the sensor.
> 
> Many camera sensor drivers don't support VIDIOC_SUBDEV_ENUM_FRAME_SIZE, but do implement
> VIDIOC_SUBDEV_[G,S]_FMT(which=V4L2_SUBDEV_FORMAT_TRY). The recently submitted to lkml drivers included.
> 
> What is the right way to fix that?
> Add VIDIOC_SUBDEV_ENUM_FRAME_SIZE to all the sensor drivers?
> Or extend libcamera's V4L2Subdevice::enumPadSizes() to use the VIDIOC_SUBDEV_[G,S]_FMT(which=V4L2_SUBDEV_FORMAT_TRY)
>   to find out the sizes supported by the sensor when VIDIOC_SUBDEV_ENUM_FRAME_SIZE is not implemented?
> (Or maybe the both?)
> 
> Thanks,
> Andrey


More information about the libcamera-devel mailing list