Skip to content

fix(imx296): 降低 vertical_blankin 最小值以恢复 60fps 帧率#9

Open
ypwhs wants to merge 1 commit into
rk3576from
feature/imx296-vblank-min
Open

fix(imx296): 降低 vertical_blankin 最小值以恢复 60fps 帧率#9
ypwhs wants to merge 1 commit into
rk3576from
feature/imx296-vblank-min

Conversation

@ypwhs

@ypwhs ypwhs commented Jun 21, 2026

Copy link
Copy Markdown
Member

问题描述

IMX296 驱动中 V4L2_CID_VBLANKvertical_blanking)的最小值被错误地设为默认值 1162,导致:

  • 全幅(1456×1088)时 VMAX = 1088 + 1162 = 2250,帧率被限制在约 30fps。
  • ROI 裁切到 448×272 时 VMAX = 272 + 1162 = 1434,帧率仅约 47fps。
  • 用户期望通过 ROI 获得更高帧率(如 60fps),但 v4l2-ctl 无法将 vertical_blanking 设置到 1162 以下。

驱动注释本身已经写明对应关系:60fps -> vblank=37,50fps -> 262,30fps -> 1162。因此最小值应为 37,而非 1162。

修复方案

drivers/media/i2c/imx296.c 中:

  1. 新增 IMX296_VBLANK_MIN 37U
  2. V4L2_CID_VBLANK 控制器的最小值从 IMX296_VBLANK_DEFAULT 改为 IMX296_VBLANK_MIN,默认值保持 1162 不变。

这样用户可以按需降低 vblank 以提升帧率:

  • 全幅 60fps:vblank=37,VMAX=1125。
  • 448×272 ROI 60fps:vblank≈854,VMAX≈1126。
  • 默认行为不变(vblank=1162,30fps)。

测试验证

当前已在设备端确认 vertical_blanking 控制范围最小为 1162,设置更低值会被钳位回 1162。合并本补丁后需要重新编译烧录 boot.img,并验证:

  1. v4l2-ctl -d /dev/v4l-subdev3 --set-ctrl=vertical_blanking=37 成功。
  2. 全幅预览帧率达到 60fps。
  3. ROI 模式下降低 vblank 后帧率相应提升。
  4. 不同曝光时间下画面稳定(VMAX 需大于 exposure lines + MIN_MEMORY_WAIT_LINES)。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant