ACameraCaptureSession_captureCallbacks

ACaptureCaptureSession_captureCallbacks 结构体,用于 ACameraCaptureSession_captureACameraCaptureSession_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 的内容与应用提交的匹配。

另请参阅:ACameraCaptureFailure

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_stopRepeatingACameraCaptureSession_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 回调中 ACameraMetadataACAMERA_SENSOR_TIMESTAMP 中包含的时间戳以及发送到每个输出 ANativeWindow 的缓冲区中的时间戳匹配。可通过例如 AImage_getTimestampandroid.graphics.SurfaceTexture::getTimestamp() 访问这些缓冲区时间戳。

请注意,回调中的 ACaptureRequest 指针与应用提交的不匹配,但 ACaptureRequest 的内容与应用提交的匹配。