Camera2 API 中的 CaptureRequest.SENSOR_FRAME_DURATION 的目的是什么以及如何使用?

API*_*024 1 android android-camera2

使用 Camera2 API 在 Android 中设置手动控件时, CaptureRequest.SENSOR_FRAME_DURATION的用途是什么?

\n\n

我已经阅读了几次文档,但仍然无法\xe2\x80\x99理解其目的,以及相对于曝光时间和ISO设置什么值。

\n\n

我了解 CaptureRequest.SENSOR_EXPOSURE_TIME 指定传感器允许进入的光量;另外,CaptureRequest.SENSOR_SENSITIVITY 是传感器对光的灵敏度 (ISO),但不知道 SENSOR_FRAME_DURATION 及其与曝光时间和传感器灵敏度的关系。

\n\n

例如,如果我设置 1 秒或 30 秒的长曝光时间,那么我应该在 SENSOR_FRAME_DURATION 中设置什么值?它与其他传感器控制有何关系?

\n

Edd*_*ala 5

FRAME_DURATION 与输出帧率的概念相同。即,从图像传感器读出图像的频率是多少?帧速率通常以每秒帧数报告,而 FRAME_DURATION 是其倒数 - 单帧的持续时间。

由于camera2 API都是关于每帧控制的,因此将持续时间作为每帧属性是合适的。

FRAME_DURATION 不能短于 EXPOSURE_TIME(因为在曝光完成之前您无法从传感器读取图像),但 API 会为您处理此问题 - 如果您要求的 FRAME_DURATION 与 EXPOSURE_TIME 相比太短,它会自动获取增加。

也就是说,通常您可能需要一致的帧速率(例如用于视频录制的 30fps),因此您可以将 FRAME_DURATION 设置为 1/30s = 33333333 ns,然后更改 EXPOSURE_TIME 进行手动曝光控制。只要将 EXPOSURE_TIME 保持在 1/30 秒以下,您就会获得稳定的帧速率,并且仍然可以进行手动曝光控制。

可能的最小帧持续时间(以及最大帧速率)取决于您在相机捕获会话中要求的输出分辨率和格式。一般来说,分辨率越高,读取时间越长,从而限制了最短帧持续时间。支持 BURST_CAPTURE 相机功能的相机可以处理至少 20fps 的 8 MP 捕获,或更高。

在图像传感器级别,帧持续时间是通过添加额外的垂直消隐时间来实现的,以便 EXPOSURE + VBLANK = FRAME_DURATION。整体情况也更加复杂,因为典型的 CMOS 图像传感器可以曝光图像的某些行,而其他行则被读出(卷帘快门),因此实际时序图看起来更复杂。然而,当您只进行基本的手动曝光控制时,通常不必关心。