v4l2_g_ext_ctrls(9)
π v4l2_g_ext_ctrls(9) β Kernel API Manual β¨
okay so bestie, welcome to the glow-up of v4l2_g_ext_ctrls π this is a page straight out of the Kernel API Manual, and it's genuinely such a slay little helper. sit down, grab a strawberry drink π, and let's get into it.
πΈ NAME πΈ
v4l2_g_ext_ctrls β the helper function that implements the :ref:VIDIOC_G_EXT_CTRLS <vidioc_g_ext_ctrls>`` ioctl π
like, that's the whole vibe. it's the backstage crew making that ioctl happen, iykyk.
β¨ SYNOPSIS β¨
int v4l2_g_ext_ctrls (struct v4l2_ctrl_handler *hdl , struct
video_device *vdev , struct media_device *mdev , struct
v4l2_ext_controls *c );
that's the signature, no cap. four pointers in, an int out π
π ARGUMENTS π
four besties walk into a function, and here's who they are:
hdlβ pointer tostruct v4l2_ctrl_handlerπ the main character of the control world, fr fr.vdevβ pointer tostruct video_deviceπΉ the video device in question.mdevβ pointer tostruct media_deviceπ¦ the media device, keeping the whole media graph cute and connected.cβ pointer tostruct v4l2_ext_controlsπ§ the extended-controls struct carrying the actual request.
π DESCRIPTION π
here's the one (1) caveat and it's lowkey dramatic: if hdl == NULL then they will all return -EINVAL π
so likeβ¦ don't pass a NULL handler. seriously. -EINVAL is the vibe check failing and nobody wants that π
π SEE ALSO π
the extended fam β genuinely iconic lineup, every single one of them π«Ά. first up, the source file:
- Kernel file
./include/media/v4l2-ctrls.h
then the whole squad, in order:
union v4l2_ctrl_ptr(9)v4l2_ctrl_ptr_create(9)struct v4l2_ctrl_ops(9)struct v4l2_ctrl_type_ops(9)v4l2_ctrl_notify_fnc(9)struct v4l2_ctrl(9)struct v4l2_ctrl_ref(9)struct v4l2_ctrl_handler(9)struct v4l2_ctrl_config(9)v4l2_ctrl_fill(9)v4l2_ctrl_handler_init_class(9)v4l2_ctrl_handler_init(9)v4l2_ctrl_handler_free(9)v4l2_ctrl_lock(9)v4l2_ctrl_unlock(9)__v4l2_ctrl_handler_setup(9)v4l2_ctrl_handler_setup(9)v4l2_ctrl_handler_log_status(9)v4l2_ctrl_new_custom(9)v4l2_ctrl_new_std(9)v4l2_ctrl_new_std_menu(9)v4l2_ctrl_new_std_menu_items(9)v4l2_ctrl_new_std_compound(9)v4l2_ctrl_new_int_menu(9)v4l2_ctrl_filter(9)v4l2_ctrl_add_handler(9)v4l2_ctrl_radio_filter(9)v4l2_ctrl_cluster(9)v4l2_ctrl_auto_cluster(9)v4l2_ctrl_find(9)v4l2_ctrl_activate(9)__v4l2_ctrl_grab(9)v4l2_ctrl_grab(9)__v4l2_ctrl_modify_range(9)v4l2_ctrl_modify_range(9)__v4l2_ctrl_modify_dimensions(9)v4l2_ctrl_modify_dimensions(9)v4l2_ctrl_notify(9)v4l2_ctrl_get_name(9)v4l2_ctrl_get_menu(9)v4l2_ctrl_get_int_menu(9)v4l2_ctrl_g_ctrl(9)__v4l2_ctrl_s_ctrl(9)v4l2_ctrl_s_ctrl(9)v4l2_ctrl_g_ctrl_int64(9)__v4l2_ctrl_s_ctrl_int64(9)v4l2_ctrl_s_ctrl_int64(9)__v4l2_ctrl_s_ctrl_string(9)v4l2_ctrl_s_ctrl_string(9)__v4l2_ctrl_s_ctrl_compound(9)v4l2_ctrl_s_ctrl_compound(9)v4l2_ctrl_replace(9)v4l2_ctrl_merge(9)v4l2_ctrl_log_status(9)v4l2_ctrl_subscribe_event(9)v4l2_ctrl_poll(9)v4l2_ctrl_request_setup(9)v4l2_ctrl_request_complete(9)v4l2_ctrl_request_hdl_find(9)v4l2_ctrl_request_hdl_put(9)v4l2_ctrl_request_hdl_ctrl_find(9)v4l2_queryctrl(9)v4l2_query_ext_ctrl_to_v4l2_queryctrl(9)v4l2_query_ext_ctrl(9)v4l2_querymenu(9)v4l2_g_ctrl(9)v4l2_s_ctrl(9)v4l2_try_ext_ctrls(9)v4l2_s_ext_ctrls(9)v4l2_ctrl_subdev_subscribe_event(9)v4l2_ctrl_subdev_log_status(9)v4l2_ctrl_new_fwnode_properties(9)v4l2_ctrl_type_op_equal(9)v4l2_ctrl_type_op_init(9)v4l2_ctrl_type_op_log(9)v4l2_ctrl_type_op_validate(9)
likeβ¦ the whole friend group showed up to the party π obsessed.
that's the page, bestie! and for the cute little sign-off: this one lives in ./include/media π, from the October 2026 era, and it's serving v4l2_g_ext_ctrls(9) energy from start to finish. go read some controls, periodt ππ¦
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms