ACameraCaptureSession_captureCallbacks
ACaptureCaptureSession_captureCallbacks 结构体,用于 ACameraCaptureSession_capture 和 ACameraCaptureSession_setRepeatingRequest。
摘要
公共属性 |
|
---|---|
context
|
void *
可选的应用上下文。
|
onCaptureBufferLost
|
如果捕获的单个缓冲区无法发送到其目标 ANativeWindow,则会调用此回调。
|
onCaptureCompleted
|
图像捕获完全完成且所有结果元数据都可用时,会调用此回调。
|
onCaptureFailed
|
当相机设备无法为请求生成捕获结果时,将调用此回调,而不是 onCaptureCompleted。
|
onCaptureProgressed
|
当图像捕获取得部分进展时,会调用此回调;图像捕获的部分(但非全部)结果已可用。
|
onCaptureSequenceAborted
|
当捕获序列在通过此 ACameraCaptureSession_captureCallbacks 返回任何捕获结果或捕获失败之前中止时,将独立于 ACameraCaptureSession_captureCallbacks 中的其他回调调用此回调。
|
onCaptureSequenceCompleted
|
当捕获序列完成并且所有捕获结果或捕获失败都已通过此 ACameraCaptureSession_captureCallbacks 返回时,将独立于 ACameraCaptureSession_captureCallbacks 中的其他回调调用此回调。
|
onCaptureStarted
|
当相机设备开始捕获请求的输出图像(在图像曝光开始时)时,会调用此回调。
|
公共属性
context
声明于camera/NdkCameraCaptureSession.h
void * ACameraCaptureSession_captureCallbacks::context
可选的应用上下文。
onCaptureBufferLost
声明于camera/NdkCameraCaptureSession.h
ACameraCaptureSession_captureCallback_bufferLost ACameraCaptureSession_captureCallbacks::onCaptureBufferLost
如果捕获的单个缓冲区无法发送到其目标 ANativeWindow,则会调用此回调。
如果整个捕获失败,则将调用 onCaptureFailed。如果捕获了部分而非全部缓冲区,但结果元数据不可用,则会调用 onCaptureFailed,并使 ACameraCaptureFailure#wasImageCaptured 返回 true,同时针对失败的输出调用一次或多次 onCaptureBufferLost。
请注意,回调中的 ACaptureRequest 指针与应用提交的不匹配,但 ACaptureRequest 的内容与应用提交的匹配。ANativeWindow 指针始终与应用在 ACameraDevice_createCaptureSession 中提交的匹配。
onCaptureCompleted
声明于camera/NdkCameraCaptureSession.h
ACameraCaptureSession_captureCallback_result ACameraCaptureSession_captureCallbacks::onCaptureCompleted
图像捕获完全完成且所有结果元数据都可用时,会调用此回调。
此回调始终在最后一次 onCaptureProgressed 之后触发;换句话说,一旦完整的結果可用,将不再传递部分結果。
对于延迟敏感的性能密集型用例,请考虑改用 onCaptureProgressed。
请注意,回调中的 ACaptureRequest 指针与应用提交的不匹配,但 ACaptureRequest 的内容与应用提交的匹配。
onCaptureFailed
声明于camera/NdkCameraCaptureSession.h
ACameraCaptureSession_captureCallback_failed ACameraCaptureSession_captureCallbacks::onCaptureFailed
当相机设备无法为请求生成捕获结果时,将调用此回调,而不是 onCaptureCompleted。
其他请求不受影响,并且捕获的部分或全部图像缓冲区可能已推送到其各自的输出流。
请注意,回调中的 ACaptureRequest 指针与应用提交的不匹配,但 ACaptureRequest 的内容与应用提交的匹配。
onCaptureProgressed
声明于camera/NdkCameraCaptureSession.h
ACameraCaptureSession_captureCallback_result ACameraCaptureSession_captureCallbacks::onCaptureProgressed
当图像捕获取得部分进展时,会调用此回调;图像捕获的部分(但非全部)结果已可用。
此处提供的结果将包含完整结果的字段的子集。每次捕获可能会发生多次 onCaptureProgressed 调用;给定的结果字段最多只存在于一次部分捕获中。最终的 onCaptureCompleted 调用将始终包含所有字段(特别是组成总结果的所有部分结果的所有字段的并集)。
对于每个请求,某些结果数据可能会比其他数据更早可用。每个部分结果(每个请求)之间的典型延迟是一个单帧间隔。对于注重性能的用例,应用应查询其所需元数据以从部分结果中取得进展,并避免等待完整结果。
对于特定请求,onCaptureProgressed 可能在 onCaptureStarted 之前或之后发生。
每个请求将至少生成 1
个部分结果,最多生成 ACAMERA_REQUEST_PARTIAL_RESULT_COUNT 个部分结果。
根据请求设置,每个请求的部分结果数量会有所不同,但通常只要启用的相机设备子系统保持不变,部分结果数量就可能相同。
请注意,回调中的 ACaptureRequest 指针与应用提交的不匹配,但 ACaptureRequest 的内容与应用提交的匹配。
onCaptureSequenceAborted
声明于camera/NdkCameraCaptureSession.h
ACameraCaptureSession_captureCallback_sequenceAbort ACameraCaptureSession_captureCallbacks::onCaptureSequenceAborted
当捕获序列在通过此 ACameraCaptureSession_captureCallbacks 返回任何捕获结果或捕获失败之前中止时,将独立于 ACameraCaptureSession_captureCallbacks 中的其他回调调用此回调。
由于相机设备的异步性质,并非所有提交的捕获都会立即处理。可以通过各种操作(例如 ACameraCaptureSession_stopRepeating 或 ACameraCaptureSession_abortCaptures)清除挂起的请求。发生此类事件时,不会调用 onCaptureSequenceCompleted。
onCaptureSequenceCompleted
声明于camera/NdkCameraCaptureSession.h
ACameraCaptureSession_captureCallback_sequenceEnd ACameraCaptureSession_captureCallbacks::onCaptureSequenceCompleted
当捕获序列完成并且所有捕获结果或捕获失败都已通过此 ACameraCaptureSession_captureCallbacks 返回时,将独立于 ACameraCaptureSession_captureCallbacks 中的其他回调调用此回调。
总而言之,在此回调被调用之前,此监听器将返回至少一个结果/失败。如果在处理任何请求之前捕获序列中止,则会调用 onCaptureSequenceAborted。
onCaptureStarted
声明于camera/NdkCameraCaptureSession.h
ACameraCaptureSession_captureCallback_start ACameraCaptureSession_captureCallbacks::onCaptureStarted
当相机设备开始捕获请求的输出图像(在图像曝光开始时)时,会调用此回调。
此回调在帧捕获刚开始时调用,因此是播放快门声音或触发捕获 UI 指示器的最合适时机。
提供了用于此捕获的请求,以及曝光开始的实际时间戳。此时间戳与 onCaptureCompleted 回调中 ACameraMetadata 的 ACAMERA_SENSOR_TIMESTAMP 中包含的时间戳以及发送到每个输出 ANativeWindow 的缓冲区中的时间戳匹配。可通过例如 AImage_getTimestamp 或 android.graphics.SurfaceTexture::getTimestamp() 访问这些缓冲区时间戳。
请注意,回调中的 ACaptureRequest 指针与应用提交的不匹配,但 ACaptureRequest 的内容与应用提交的匹配。