fourier-local: stateless control modernization + HEVC strip
Compound patch carrying the fork's pre-Step-1 substrate, originally authored by Jernej Škrabec / fourier on top of bootlin'sa3c2476: - src/h264.c + src/picture.c: V4L2_CID_MPEG_VIDEO_H264_* renamed to V4L2_CID_STATELESS_H264_*, struct shapes tracked to mainline (V4L2_CID_STATELESS_H264_DECODE_MODE/_START_CODE added to the passthrough shim). - include/hevc-ctrls.h: redirect shim to <linux/v4l2-controls.h> (kernel-side HEVC controls now live in the canonical UAPI header). - src/meson.build: src/h265.c / src/h265.h commented out — HEVC build path is excluded from this fork (RK3568 hantro G1/G2 has no HEVC, and the kernel-side HEVC controls have a separate rework in flight upstream). - src/tiled_yuv.S: aarch64 stub for tiled_to_planar (assembly source was sunxi-cedrus armv7-only; aarch64 needs a stub to keep the build linking). - include/h264-ctrls.h: removed (dead post-fourier — no source includes it; the passthrough shim's CID aliases live in the kernel header now). Functionally equivalent to the prior fork master commits:c1f5108V4L2_PIX_FMT_H264_SLICE rename4ccbfe9Strip HEVC build pathda9f2a5include/h264-ctrls.h passthrough + CID aliasesfc4bb10src/h264.c track upstream UAPI shape13e9b64src/h264.c drop num_slices field4d14ffbsrc/tiled_yuv.S aarch64 stub1b02c9bsrc/h264.c include utils.h Folded into one commit during 2026-05-04 Step 1 reconciliation (see ../phase0_evidence/2026-05-04/findings.md). Per-patch history of the early fork commits preserved on the pre-step1 branch. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+47
-13
@@ -428,37 +428,71 @@ int v4l2_export_buffer(int video_fd, unsigned int type, unsigned int index,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int v4l2_set_control(int video_fd, int request_fd, unsigned int id, void *data,
|
||||
unsigned int size)
|
||||
static int v4l2_ioctl_controls(int video_fd, int request_fd, unsigned long ioc,
|
||||
struct v4l2_ext_control *control_array,
|
||||
unsigned int num_controls)
|
||||
{
|
||||
struct v4l2_ext_control control;
|
||||
struct v4l2_ext_controls controls;
|
||||
int rc;
|
||||
|
||||
memset(&control, 0, sizeof(control));
|
||||
memset(&controls, 0, sizeof(controls));
|
||||
|
||||
control.id = id;
|
||||
control.ptr = data;
|
||||
control.size = size;
|
||||
|
||||
controls.controls = &control;
|
||||
controls.count = 1;
|
||||
controls.controls = control_array;
|
||||
controls.count = num_controls;
|
||||
|
||||
if (request_fd >= 0) {
|
||||
controls.which = V4L2_CTRL_WHICH_REQUEST_VAL;
|
||||
controls.request_fd = request_fd;
|
||||
}
|
||||
|
||||
rc = ioctl(video_fd, VIDIOC_S_EXT_CTRLS, &controls);
|
||||
return ioctl(video_fd, ioc, &controls);
|
||||
}
|
||||
|
||||
int v4l2_get_controls(int video_fd, int request_fd,
|
||||
struct v4l2_ext_control *control_array,
|
||||
unsigned int num_controls)
|
||||
{
|
||||
int rc;
|
||||
|
||||
rc = v4l2_ioctl_controls(video_fd, request_fd, VIDIOC_G_EXT_CTRLS,
|
||||
control_array, num_controls);
|
||||
if (rc < 0) {
|
||||
request_log("Unable to set control: %s\n", strerror(errno));
|
||||
request_log("Unable to get control(s): %s\n", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int v4l2_set_controls(int video_fd, int request_fd,
|
||||
struct v4l2_ext_control *control_array,
|
||||
unsigned int num_controls)
|
||||
{
|
||||
int rc;
|
||||
|
||||
rc = v4l2_ioctl_controls(video_fd, request_fd, VIDIOC_S_EXT_CTRLS,
|
||||
control_array, num_controls);
|
||||
if (rc < 0) {
|
||||
request_log("Unable to set control(s): %s\n", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int v4l2_set_control(int video_fd, int request_fd, unsigned int id, void *data,
|
||||
unsigned int size)
|
||||
{
|
||||
struct v4l2_ext_control control;
|
||||
|
||||
memset(&control, 0, sizeof(control));
|
||||
|
||||
control.id = id;
|
||||
control.ptr = data;
|
||||
control.size = size;
|
||||
|
||||
return v4l2_set_controls(video_fd, request_fd, &control, 1);
|
||||
}
|
||||
|
||||
int v4l2_set_stream(int video_fd, unsigned int type, bool enable)
|
||||
{
|
||||
enum v4l2_buf_type buf_type = type;
|
||||
|
||||
Reference in New Issue
Block a user