Не удается получить выходной буфер с камеры android - PullRequest
0 голосов
/ 09 апреля 2020

Я работаю с Android Camera2 API и получаю это после получения набора фотографий с камеры на мой смартфон с Android версия 6.0 (API 23):

2020-04-09 20:36:58.556 260-9342/? E/Camera3-Stream: getBuffer: wait for output buffer return timed out after 3000ms
2020-04-09 20:36:58.556 260-9342/? E/Camera3-Device: RequestThread: Can't get output buffer, skipping request: Connection timed out

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

Я использую BackgroundHandler для обработки получения изображений с камеры в BackgroundThread . Затем я создаю дополнительный BackgroundThread для обработки каждого изображения с помощью функций библиотеки OpenCV. Но, У меня есть только один рабочий дополнительный BackgroundThread одновременно . (Некоторые изображения я пропускаю и создаю новый поток, только если нет другого подобного потока.)

Для получения изображений я использую CameraCaptureSession с setRepeatingRequest функция. А также я делаю клон каждого буфера изображения перед обработкой. Итак, мой вопрос: почему произошли ошибки и как их преодолеть?

1 Ответ

1 голос
/ 09 апреля 2020

Вы звоните Image.close () после того, как закончите чтение каждого буфера?

В вашем ImageReader есть только фиксированное количество буферов, и если вы этого не сделаете верните изображения в очередь (закрыв их), и вы в конечном итоге остановите конвейер захвата.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...