摄像头sc233hgs驱动 v4l2驱动层设置参数方法

📅 2026/7/28 2:24:26 👁️ 阅读次数 📝 编程学习
摄像头sc233hgs驱动 v4l2驱动层设置参数方法

主要是下面的几个接口:
v4l2_ctrl_new_std
v4l2_ctrl_new_int_menu
v4l2_ctrl_new_std_menu_items

这三个接口都属于 Linux V4L2(Video for Linux 2)驱动开发中的控制项创建函数,用于为 V4L2 设备(如摄像头、视频采集卡)添加可配置的控制参数(如亮度、对比度、帧率模式等),定义在 <linux/v4l2-ctrls.h> 头文件中。

  1. v4l2_ctrl_new_std
    功能
    创建标准类型的 V4L2 控制项(如整数、布尔、枚举等基础类型),是最常用的通用控制项创建接口。
    函数原型:
    struct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl,
    const struct v4l2_ctrl_ops *ops,
    u32 id, s32 min, s32 max, u32 step, s32 def);
    参数说明
    hdl 控制项处理器(句柄),所有控制项都挂载到该处理器下
    ops 控制项操作回调函数集(如 g_ctrl/s_ctrl,NULL 表示使用默认操作)
    id 控制项 ID(如 V4L2_CID_BRIGHTNESS、V4L2_CID_CONTRAST 等标准 ID)
    min 控制项最小值
    max 控制项最大值
    step 步长(调节时的最小增量,如亮度按 1 调节则 step=1)
    def 默认值
    使用场景
    创建数值型、布尔型等连续 / 离散范围的标准控制项,如亮度、对比度、曝光值等。
  2. v4l2_ctrl_new_int_menu
    功能
    创建整数菜单型控制项(即选项为离散整数的下拉菜单),适用于 “固定可选值” 的场景(如帧率模式、分辨率选项)。
    函数原型:
    struct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl,
    const struct v4l2_ctrl_ops *ops,
    u32 id, s32 def, int n_choices,
    const s32 *choices);
    参数说明
    hdl/ops/id/def 同 v4l2_ctrl_new_std
    n_choices 菜单选项的数量
    choices 菜单选项的整数数组(如 {10, 20, 30} 表示可选 10/20/30)
    使用场景
    控制项值为固定离散整数,如帧率(10/20/30fps)、分辨率模式(1=720p,2=1080p)等。
  3. v4l2_ctrl_new_std_menu_items
    功能
    基于 V4L2 标准菜单 ID 创建菜单型控制项,是 v4l2_ctrl_new_int_menu 的 “标准封装版”,仅用于 V4L2 预定义的菜单型控制项。
    函数原型
    struct v4l2_ctrl *v4l2_ctrl_new_std_menu_items(struct v4l2_ctrl_handler *hdl,
    const struct v4l2_ctrl_ops *ops,
    u32 id, s32 def);
    参数说明
    hdl/ops/id/def 同前,其中 id 必须是 V4L2 预定义的菜单型 ID(如 V4L2_CID_POWER_LINE_FREQUENCY)
    使用场景
    创建 V4L2 标准定义的菜单控制项,无需手动指定选项数组(框架已内置选项),如电源频率(50Hz/60Hz)、白平衡模式等。
    **

上面三个函数的被调用的时机:

1:驱动层调用
当你通过 v4l2_ctrl_new_std/v4l2_ctrl_new_int_menu 等函数创建完所有控制项后,必须调用 v4l2_ctrl_handler_setup,确保:
控制项的默认值被设置为当前值;
若实现了 s_ctrl 回调(硬件寄存器操作),默认值会被写入硬件(比如初始化时将亮度默认值 128 写入寄存器)。
2:应用层调用
通过命令行工具触发(如 v4l2-ctl)
通过应用程序触发(实际业务场景)