Захват изображения без предварительного просмотра с использованием Camera 2 API - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь изменить базовый пример Camera2 API (https://github.com/googlesamples/android-Camera2Basic), чтобы он делал снимок каждые x секунд (а затем обрабатывал его в фоновом потоке; мне даже не нужно сохранять изображение на диск), при этом отображается плавный предварительный просмотр. К сожалению, вызов capture() в сеансе захвата останавливает предварительный просмотр на секунду или две, что приводит к ухудшению работы пользователя.

Есть ли способ напрямую перейти к поверхности предварительного просмотра и прочитать байты изображения? Меня не волнует качество изображения, гладкий UX является приоритетом.

1 Ответ

0 голосов
/ 02 июля 2018

Если устройство камеры имеет уровень LEGACY , это, к сожалению, ожидается.

Даже для ОГРАНИЧЕННОГО устройства камера должна поддерживать BURST_CAPTURE , чтобы гарантировать захват с полным разрешением с высокой скоростью. Все устройства уровня FULL или выше поддерживают BURST_CAPTURE.

Однако даже на устройствах с более низкими возможностями вы можете плавно захватывать несжатые кадры YUV с разрешением видеозаписи. Это означает добавление в конфигурацию сеанса ImageReader с форматом YUV_420_888, а затем обработку изображений, которые из этого получаются. JPEG-файлы на устройствах LEGACY, к сожалению, всегда работают медленно, а некоторые устройства LEGACY не имеют достаточной мощности ЦП для плавного создания данных YUV (потому что должны быть некоторые преобразования внутри).

Для получения более подробной информации вы можете проверить выходные данные StreamConfigurationMap и посмотреть, какие выходные разрешения YUV работают при минимальной длительности кадра 1/30 с; они должны гарантировать бесперебойную работу для ОГРАНИЧЕННЫХ или более качественных устройств.

...