forked from marfrit/libva-v4l2-request-fourier
iter18 α-22 (diag): log S_EXT_CTRLS error_idx + request_fd
Tests mechanism 5 (silent partial failure). If error_idx != count after S_EXT_CTRLS, one of the per-request controls was rejected by the kernel even though the ioctl returned 0. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+19
-1
@@ -433,6 +433,7 @@ static int v4l2_ioctl_controls(int video_fd, int request_fd, unsigned long ioc,
|
||||
unsigned int num_controls)
|
||||
{
|
||||
struct v4l2_ext_controls controls;
|
||||
int rc;
|
||||
|
||||
memset(&controls, 0, sizeof(controls));
|
||||
|
||||
@@ -444,7 +445,24 @@ static int v4l2_ioctl_controls(int video_fd, int request_fd, unsigned long ioc,
|
||||
controls.request_fd = request_fd;
|
||||
}
|
||||
|
||||
return ioctl(video_fd, ioc, &controls);
|
||||
rc = ioctl(video_fd, ioc, &controls);
|
||||
|
||||
/*
|
||||
* iter18 α-22 diagnostic: dump error_idx + request_fd after each
|
||||
* S_EXT_CTRLS to detect silent partial failure (mechanism 5).
|
||||
* The kernel sets error_idx to the failing control's index or
|
||||
* count (== num_controls) for "validation passed all" or
|
||||
* "system-wide failure". Log unconditionally so we can correlate.
|
||||
*/
|
||||
if (ioc == VIDIOC_S_EXT_CTRLS) {
|
||||
request_log("α-22: S_EXT_CTRLS rc=%d errno=%d count=%u "
|
||||
"error_idx=%u request_fd=%d which=0x%x\n",
|
||||
rc, rc < 0 ? errno : 0, controls.count,
|
||||
controls.error_idx, controls.request_fd,
|
||||
controls.which);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
int v4l2_get_controls(int video_fd, int request_fd,
|
||||
|
||||
Reference in New Issue
Block a user