libyami icon indicating copy to clipboard operation
libyami copied to clipboard

V4L2 decoder does not correctly implement VIDIOC_G_FMT and VIDIOC_S_FMT

Open EwanRoycroft opened this issue 5 years ago • 2 comments

According to the V4L2 documentation, VIDIOC_G_FMT is exclusive to capture devices, and you can use this method with other drivers to get information about the output format; yet yami limits it to V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE.

The documentation also says of VIDIOC_S_FMT that:

"Drivers should not return an error code unless the type field is invalid,"

and that, after setting the format as requested:

"the VIDIOC_S_FMT ioctl returns the current format parameters as VIDIOC_G_FMT does."

I have found that this is not the case with yami. If certain fields are left empty, it will throw an error instead of filling them with the current values.

EwanRoycroft avatar May 05 '20 15:05 EwanRoycroft

yes. we are not fully aligned with spec. the spec original designed for capture or output device. some items may not reasonable to decode or encoder. Are you expect this VIDIOC_S_FMT/VIDIOC_G_FMT behavior in our application? thanks

xuguangxin avatar May 06 '20 05:05 xuguangxin

I have a program that uses the V4L2 driver on the Raspberry Pi to decode video. Assuming other drivers follow the spec, it should work cross-platform; but it fails on yami when making calls to VIDIOC_G_FMT / VIDIOC_S_FMT.

EwanRoycroft avatar May 06 '20 11:05 EwanRoycroft