Android Camera2 onCaptureStarted回调

Android Camera2 onCaptureStarted回调,android,android-camera2,Android,Android Camera2,我想在曝光开始时得到信号 我在回调中找到: onCaptureStarted 当相机设备已经开始捕捉请求的输出图像时,在图像曝光开始时,或者当相机设备已经开始处理再处理请求的输入图像时,调用此方法 对于常规捕获请求,在帧捕获开始时调用此回调,因此这是播放快门声音或触发捕获的UI指示器的最合适时间 我使用了它并得到了以下结果: ~0.2ms曝光(ACAMERA传感器曝光时间:170980) A) 图像时间戳与当前onCaptureStarted时间戳之间的差异为:37.488015ms. B) o

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

我在回调中找到:
onCaptureStarted

当相机设备已经开始捕捉请求的输出图像时,在图像曝光开始时,或者当相机设备已经开始处理再处理请求的输入图像时,调用此方法

对于常规捕获请求,在帧捕获开始时调用此回调,因此这是播放快门声音或触发捕获的UI指示器的最合适时间

我使用了它并得到了以下结果:

  • ~0.2ms曝光(ACAMERA传感器曝光时间:170980)
    A) 图像时间戳与当前onCaptureStarted时间戳之间的差异为:37.488015ms.
    B) onCaptureStarted与CameraImageReader::ImageCallback之间的差异为:9.630366
  • ~5ms曝光(ACAMERA传感器曝光时间:4958439)
    A) 图像时间戳与当前onCaptureStarted时间戳之间的差异为:42.577876ms.
    B) onCaptureStarted与CameraImageReader::ImageCallback之间的差异为:9.839168
  • ~20ms曝光(ACAMERA传感器曝光时间:19961992)
    A) 图像时间戳与当前onCaptureStarted时间戳之间的差异为:58.494590ms.
    B) onCaptureStarted与CameraImageReader::ImageCallback之间的差异为:9.060730
  • 注意事项
    1.我使用Pixel2进行了测试(手动曝光+33ms帧时长)
    2.我还使用“模板手册”对其进行了测试,得到了相同的结果。
    3.我还使用S9+进行了测试,得到了相同的结果。
    4.这些数字不准确


    我似乎在曝光结束后收到了回电。与文档中的第二个选项类似:

    或者当相机设备已经开始为重新处理请求处理输入图像时

    但我想得到第一个选择:

    在图像曝光开始时

    1) 我能控制它吗?
    2) 什么是“常规捕获请求”?

    [注意:我使用了'acamerapturesession\u setRepeatingRequest']

    一旦捕获启动,图像将在应用程序可用之前发生很多次。在全分辨率下,曝光完成后,需要像素2~33 ms读取图像帧,再加上一段时间将缓冲区处理成YUV

    因此,如果从onCaptureStarted时间戳中看到大约33毫秒+曝光时间的图像,这是预期的。就你而言:

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

    这似乎和预期的差不多,大约33毫秒用于读取,5毫秒用于完成处理。

    如何匹配onCaptureStarted回调和ImageReader图像?如果重复捕获请求,则在调用它们时会有一个偏移量,因此您可能会将稍后的onCaptureStarted与较早的映像进行比较。我会尝试一次捕获,这样就很容易判断您有相同的图像/捕获开始对。您会问:“onCaptureStarted到OnCaptureStated之间的差异…”?“图像时间戳”在这两个回调中是相同的。我检查的是它们之间的时间。@EddyTalvala-对不起,我错了一件事。“onCaptureStarted与onCaptureCompleted之间的差异”需要是“onCaptureStarted与CameraImageReader::ImageCallback之间的差异”。我编辑了它。感谢提示:我使用“AImageReader\u acquireLatestImage(m\u pReader,&image)”来获取图像。这大致是我的想法(并写下-“似乎我在曝光完成后得到了回调”)。但这并不能回答我的问题。”我想在曝光开始时得到信号。。。但是我想让它像第一个选项一样:在图像曝光的开始1)我能控制它吗?2) 什么是“常规捕获请求”?谢谢!另一件事:“读取图像帧需要像素2~33毫秒”-读出+曝光可能需要比帧持续时间更长的时间?你的意思是像素2传感器有用于读出的缓冲区?图像捕获硬件是一个具有多个阶段的管道。它可以在读取帧N+1的同时暴露帧N,并在帧N+2上进行最后的后处理。从曝光开始到缓冲区对您可用之间的延迟无法保证,尽管大多数设备都会尽量缩短缓冲区,以最小化预览延迟(预览显示的时间间隔有多远)。特别是对于JPEG捕获,压缩可能需要相当长的时间。好的。但再一次“我想在曝光开始时得到信号…”我能得到吗?