On 24/10/2023 03:51, Laurent Pinchart wrote:
Due to a historical mishap, the v4l2_subdev_frame_interval structure is the only part of the V4L2 subdev userspace API that doesn't contain a 'which' field. This prevents trying frame intervals using the subdev 'TRY' state mechanism. Add a 'which' field is simple as the structure has 8 reserved fields.
"Adding"
This would however break userspace as the field is currently set to 0, corresponding to V4L2_SUBDEV_FORMAT_TRY, while the corresponding ioctls currently operate on the 'ACTIVE' state. We thus need to add a new
That's not the only problem. It wouldn't work even if 0 would be 'ACTIVE'. The userspace is required to clear the reserved fields, but the newly added 'which' field is no longer a reserved field, and thus the userspace might not clear it, leading to it being uninitialized. But this is solved with the V4L2_SUBDEV_CLIENT_CAP_WHICH_INTERVAL.
subdev client cap, V4L2_SUBDEV_CLIENT_CAP_WHICH_INTERVAL, to indicate that userspace is aware of this new field. All drivers that implement the subdev .g_frame_interval() and .s_frame_interval() operations are updated to return -EINVAL when
.get_frame_interval() and .set_frame_interval() now =). Tomi