Я столкнулся с ошибкой api camera2 на моем устройстве.
Я использую ZSL, и после некоторых фотографий камера не работает и останавливает захват изображений. Расследования привели меня к причине, что круговой буфер изображения пуст.
Круговой буфер изображения пуст, потому что функция onImageAvailable () не вызывается после этой ошибки.
Странно то, что все исправляется только после перезагрузки.
Для тестирования я использую проект ZSLDemo от Google.
Вот фрагмент кода с функцией onImageAvailable ().
class CaptureImageAvailableListener(private val activity: MainActivity, internal var params: CameraParams) : ImageReader.OnImageAvailableListener {
override fun onImageAvailable(reader: ImageReader) {
println("Try to add image into RingBuffer")
val image: Image = reader.acquireNextImage()
camViewModel.getZSLCoordinator().imageBuffer.add(image)
if (null == params.debugResult || null == params.debugImage) {
if (null != params.debugResult) {
params.debugImage = image
val tempPair = ZSLPair(image, params.debugResult!!)
recaptureRequest(activity, params, tempPair)
} else {
params.debugImage = image
}
}
}
}
UPD: в logcat я обнаружил ошибки:
QCamera : <HAL><INFO> handleMetadataWithLock: 3911: Start of reporting error frame#=800,streamID=3, mCameraId: 0
mm-camera: <IFACE ><ERROR> 2473: iface_axi_handle_output_error: iface_axi_handle_output_error: OUTPUT_ERROR session_id 3
mm-camera: <IFACE ><ERROR> 2291: iface_axi_fill_framedrop_struct_from_bufq_handle: Error! Uncleared Error mask 0x100 frame_id 6
QCamera : <HAL><INFO> handleMetadataWithLock: 3927: End of reporting error frame#=800, streamID=3 mCameraId: 0
Camera : <HAL><INFO> handleMetadataWithLock: 4078: Stream STATUS_ERROR frame_number=800,streamID=3 mCameraId: 0
QCamera : <HAL><INFO> handleMetadataWithLock: 4087: CAMERA3_BUFFER_STATUS_ERROR frame_number=800,buffer=0xf5496968 mCameraId: 0
Camera3-OutputStream: returnBufferCheckedLocked: A frame is dropped for stream 2 due to buffer error.