我想在曝光开始时得到信号。

我在doc中找到了回调:
onCaptureStarted


  当照相机设备已开始捕获请求的输出图像时,在图像曝光开始时或照相机设备已开始处理用于重新处理请求的输入图像时,将调用此方法。
  
  对于常规捕获请求,将在开始捕获帧时立即调用此回调,因此这是播放快门声音或触发UI捕获指示的最合适时间。


我用它并得到以下结果:


约0.2毫秒的曝光时间(ACAMERA_SENSOR_EXPOSURE_TIME:170980)
A)图像时间戳与当前onCaptureStarted时间戳之间的差异为:37.488015 ms。
B)onCaptureStarted与CameraImageReader :: ImageCallback之间的区别是:9.630366
约5毫秒的曝光时间(ACAMERA_SENSOR_EXPOSURE_TIME:4958439)
A)图像时间戳与当前onCaptureStarted时间戳之间的差异为:42.577876 ms。
B)onCaptureStarted与CameraImageReader :: ImageCallback之间的区别是:9.839168
约20毫秒的曝光时间(ACAMERA_SENSOR_EXPOSURE_TIME:19961992)
A)图像时间戳与当前onCaptureStarted时间戳之间的差异为:58.494590 ms。
B)onCaptureStarted与CameraImageReader :: ImageCallback之间的区别是:9.060730


笔记
1.我使用Pixel2进行了测试(手动曝光+ 33ms帧持续时间)
2.我也使用“ TEMPLATE_MANUAL”对其进行了测试,并获得了相同的结果。
3.我也使用S9 +进行了测试,并获得了相同的结果。
4.数字不正确。



似乎在曝光结束后我得到了回调。就像文档中的第二个选项:


  或相机设备已开始处理用于重新处理请求的输入图像时。


但我想像第一个选择一样得到它:


  在图像曝光开始时


1)我可以控制它吗?
2)什么是“常规捕获请求”?
[注意:我使用了'ACameraCaptureSession_setRepeatingRequest']

最佳答案

在图像可供应用程序使用之前,onCaptureStarted将会发生很多。在全分辨率下,曝光完成后需要2到33 ms的像素才能读出图像帧,还需要一些时间来完成将缓冲区处理为YUV的过程。

因此,如果您在onCaptureStarted时间戳之后大约33毫秒+曝光时间看到Image可用回调,则可以预期。在您的情况下:


0.2毫秒曝光:37.488015毫秒-170980 ns = 37.3毫秒用于读取+处理
5毫秒曝光:42.577876毫秒-4958439 ns = 37.6毫秒,用于读取+处理
20毫秒曝光:58.494590毫秒-19961992 ns = 38.53毫秒,用于读取+处理


这似乎与预期的差不多,读出约为33毫秒,完成处理约为5毫秒。

08-16 22:07