Невозможно вызвать camera.takePicutre - qcamera: ошибка при создании нового сеанса кодирования jpeg
Я сталкиваюсь с какой-то странной проблемой на Xiaomi MI6 MIUI 9.1 (только, протестировано на 10 разных устройствах и все работает нормально - но также происходит на других Mi6 с другой версией MIUI). У нас есть приложение, которое использует JavaCameraView (которое все еще использует API Camera v1, но я не думаю, что это может быть проблемой) из пакета openCV, и через некоторое время мы вызываем camera.takePicture с обратным вызовом, установленным для сжатых данных изображения jpeg. К сожалению, вызов этого на упомянутом телефоне вызывает сбой родной камеры lib при запуске сжатия данных:
01-08 11:36:37.767 782-12305/? I/QCamera: <HAL><INFO> int qcamera::QCamera2HardwareInterface::takePicture(): 5390: X rc = 0
01-08 11:36:37.767 782-29935/? I/QCamera: <HAL><INFO> static int qcamera::QCamera2HardwareInterface::take_picture(struct camera_device *): 1034: [KPI Perf]: X ret = 0
01-08 11:36:37.770 782-12307/? I/QCamera: <HAL><INFO> int32_t qcamera::QCameraPostProcessor::getJpegEncodingConfig(mm_jpeg_encode_params_t &, qcamera::QCameraStream *, qcamera::QCameraStream *, const mm_camera_super_buf_t *): 658: Src Buffer cnt = 1, res = 4032X3016 len = 18579456 rot = 0 src_dim = 4032X3016 dst_dim = 4032X3016
01-08 11:36:37.770 782-12344/? I/QCamera: <HAL><INFO> static void qcamera::QCamera2HardwareInterface::zsl_channel_cb(mm_camera_super_buf_t *, void *): 161: [KPI Perf]: superbuf frame_idx 1283
01-08 11:36:37.770 782-12307/? I/QCamera: <HAL><INFO> int32_t qcamera::QCameraPostProcessor::getJpegEncodingConfig(mm_jpeg_encode_params_t &, qcamera::QCameraStream *, qcamera::QCameraStream *, const mm_camera_super_buf_t *): 756: Src THUMB buf_cnt = 8, res = 1920X1080 len = 3112960 rot = 0 src_dim = 1920X1080, dst_dim = 256X154
01-08 11:36:37.771 782-12363/? I/QCamera: <HAL><INFO> int32_t qcamera::QCameraReprocessChannel::doReprocess(mm_camera_super_buf_t *, qcamera::QCameraParametersIntf &, qcamera::QCameraStream *, uint8_t): 1817: Online reprocessing id = 1283 buf Id = 0 meta index = 13 type = 3
01-08 11:36:37.802 782-12307/? E/QCamera: <JPEG><ERROR> mm_jpeg_session_send_buffers: 179: Error -2147479547
01-08 11:36:37.802 782-12307/? E/QCamera: <JPEG><ERROR> mm_jpeg_session_change_state: 339: Error -2147479547
01-08 11:36:37.802 782-12307/? E/QCamera: <JPEG><ERROR> mm_jpeg_session_configure: 1838: change state to idle failed -2147479547
01-08 11:36:37.802 782-12307/? E/QCamera: <JPEG><ERROR> mm_jpeg_create_session: 3193: Error
01-08 11:36:37.802 782-12307/? E/QCamera: <HAL><ERROR> int32_t qcamera::QCameraPostProcessor::createJpegSession(qcamera::QCameraChannel *): 500: error creating a new jpeg encoding session
01-08 11:36:37.803 782-12307/? E/QCamera: <HAL><ERROR> static void *qcamera::QCamera2HardwareInterface::deferredWorkRoutine(void *): 11019: cannot create JPEG session
01-08 11:36:37.831 782-12479/? I/QCamera: <HAL><INFO> static void qcamera::QCamera2HardwareInterface::postproc_channel_cb_routine(mm_camera_super_buf_t *, void *): 670: [KPI Perf]: frame_idx 1283
01-08 11:36:37.831 782-12479/? E/QCamera: <HAL><ERROR> int32_t qcamera::QCamera2HardwareInterface::getDefJobStatus(uint32_t &): 11463: job_id (2322) was failed
01-08 11:36:37.851 782-12363/? I/QCamera: <HAL><INFO> int32_t qcamera::QCameraPostProcessor::getJpegEncodingConfig(mm_jpeg_encode_params_t &, qcamera::QCameraStream *, qcamera::QCameraStream *, const mm_camera_super_buf_t *): 658: Src Buffer cnt = 1, res = 4032X3016 len = 18579456 rot = 0 src_dim = 4032X3016 dst_dim = 4032X3016
01-08 11:36:37.851 782-12363/? I/QCamera: <HAL><INFO> int32_t qcamera::QCameraPostProcessor::getJpegEncodingConfig(mm_jpeg_encode_params_t &, qcamera::QCameraStream *, qcamera::QCameraStream *, const mm_camera_super_buf_t *): 756: Src THUMB buf_cnt = 8, res = 1920X1080 len = 3112960 rot = 0 src_dim = 1920X1080, dst_dim = 256X154
01-08 11:36:37.854 782-12305/? I/QCamera: <HAL><INFO> int32_t qcamera::QCameraParameters::setQuadraCfaMode(uint32_t, bool): 4260: Quadra CFA mode 0
01-08 11:36:37.857 782-12363/? E/QCamera: <JPEG><ERROR> mm_jpeg_session_send_buffers: 179: Error -2147479547
01-08 11:36:37.857 782-12363/? E/QCamera: <JPEG><ERROR> mm_jpeg_session_change_state: 339: Error -2147479547
01-08 11:36:37.857 782-12363/? E/QCamera: <JPEG><ERROR> mm_jpeg_session_configure: 1838: change state to idle failed -2147479547
01-08 11:36:37.857 782-12363/? E/QCamera: <JPEG><ERROR> mm_jpeg_create_session: 3193: Error
01-08 11:36:37.858 782-12363/? E/QCamera: <HAL><ERROR> int32_t qcamera::QCameraPostProcessor::encodeData(qcamera_jpeg_data_t *, uint8_t &): 2525: error creating a new jpeg encoding session
01-08 11:39:28.767 782-29935/? I/QCamera: <HAL><INFO> static void qcamera::QCamera2HardwareInterface::stop_preview(struct camera_device *): 421: [KPI Perf]: E PROFILE_STOP_PREVIEW camera id 0
01-08 11:39:28.768 782-12305/? E/QCamera: <HAL><ERROR> int32_t qcamera::QCamera2HardwareInterface::getDefJobStatus(uint32_t &): 11463: job_id (2322) was failed
01-08 11:39:28.770 782-12305/? I/QCamera: <HAL><INFO> int32_t qcamera::QCameraParameters::setQuadraCfaMode(uint32_t, bool): 4260: Quadra CFA mode 0
Я также проверил, что вызывается обратный вызов затвора, затем вызывается обратный вызов необработанного изображения, но переданный массив является нулевым. Любая помощь будет оценена:)