Подтвердить что ты не робот

Идеи источника QualcommCameraHardware native_get_picture: MSM_CAM_IOCTL_GET_PICTURE Ошибка времени ожидания подключения?

Я работаю над библиотекой, чтобы упростить использование Camera API для разработчиков.

Droid Incredible 2, в портретном режиме, используя камеру заднего вида, не может сделать снимок. В частности, я получаю эту последовательность в LogCat:

08-18 09:25:52.094: E/QualcommCameraHardware(1368): native_get_picture: MSM_CAM_IOCTL_GET_PICTURE fd 25 error Connection timed out
08-18 09:25:52.094: E/QualcommCameraHardware(1368): getPicture failed!
08-18 09:25:52.094: E/QualcommCameraHardware(1368): get picture failed, giving jpeg callback with NULL data

Те сообщения появляются через 5 секунд после того, как я вызываю takePicture() на Camera, который подходит для какого-то старого исходного кода, который я вижу для QualcommCameraHardware, который устанавливает тайм-аут 5000 мс при вызове ioctl(), чтобы поговорить с камеры.

Конечным результатом является то, что onPictureTaken() передается null byte[] данных JPEG, то есть у нас нет фотографии.

Устройство работает с моим кодом во всех других проверенных конфигурациях, включая работу в портретном режиме с фронтальной камерой.

Кто-нибудь знает что-то конкретное, которое может вызвать этот конкретный сбой?

UPDATE

Я больше не могу воспроизвести ошибку. Я бы удалил вопрос, но, по-видимому, это невозможно, если есть ответы.

4b9b3361

Ответ 1

MSM_CAM_IOCTL_GET_PICTURE - это вызов ядра, который выполняет функцию

static int msm_get_pic(struct msm_sync *sync, void __user *arg)

Я загрузил источник ядра для своего устройства с HTCdev и нашел функцию, определенную в

drivers/media/video/msm/msm_camera-7x30.c

Можно проверить, какие сообщения ядра отображаются при съемке?

adb shell su -c "dmesg"

Ответ 2

Скорее всего, cameraService, который является частью медиа-процесса, разбился в фоновом режиме. Если вы просто попытаетесь запустить приложение камеры по умолчанию в Android, и оно не появится, просто перезагрузите устройство, чтобы отключить эту ошибку.

Я думаю, что вы повторно используете обратный вызов изображения для обратных вызовов raw и jpeg. Поэтому, если он был вызван как необработанный обратный вызов, данные могут быть пустыми. Поскольку в документе говорится,

Запускает асинхронный захват изображения. Служба камеры инициирует серию обратных вызовов в приложение по мере продвижения изображения. Обратный вызов затвора происходит после захвата изображения. Это можно использовать для запуска звука, чтобы пользователь знал, что изображение было захвачено. Необработанный обратный вызов возникает, когда доступны данные необработанного изображения (ПРИМЕЧАНИЕ: данные будут пустыми, если нет необработанного буфера обратного вызова изображения, или буфер обратного вызова необработанного изображения недостаточно велик для хранения необработанного изображения). Обратный вызов postview возникает, когда доступно масштабированное, полностью обработанное изображение postview (ПРИМЕЧАНИЕ. Не все аппаратные средства поддерживают это). Обратный вызов jpeg возникает, когда доступно сжатое изображение. Если приложение не нуждается в конкретном обратном вызове, вместо метода обратного вызова может быть передан нуль.