Как автоматически сфокусировать указанную c область с помощью Camera2 API? (feat. Подробности захвата потока) - PullRequest
0 голосов
/ 20 марта 2020

Я работаю с Camera2 API для создания приложения камеры и хочу сделать снимки, сфокусированные на c области предварительного просмотра. Сейчас не нужно реагировать на сенсорные действия пользователя, просто нужно автоматически фокусировать указанную c область при нажатии кнопки захвата.

После некоторого поиска в Google я обнаружил, что должен использовать эти функции: CONTROL_AF_REGIONS , CONTROL_AF_MODE_AUTO Но я не знаю, куда я помещаю эти логи c в мой источник.

Я имею в виду Google Camera2Basi c образец, ниже приведено то, что я изучал о процессе захвата изображения до сих пор.

1.Preview - 2.Lock Focus - 3.Capture Picture от PreviewRequestBuilder

4.Снимок неподвижного изображения от CaptureBuilder

5. Разблокировать фокус от PreviewRequestBuilder

Я нашел есть 2 CaptureRequest.Builder, и у них есть свои CaptureCallback.

  • PreviewRequestBuilder: используется для предварительного просмотра в TextureView
  • CaptureBuilder: используется для захвата неподвижного изображения в ImageReader

Детали каждого потока * 1 036 *

  1. Предварительный просмотр: этап отображения предварительного просмотра на экране перед захватом

    • Переменная состояния: STATE_PREVIEW (начальное значение)
    • AF_TRIGGER: IDLE
    • AF_MODE: CONTINUOUS_PICTURE
    • AF_STATE: изначально PASSIVE_SCAN и изменение на PASSIVE_FOCUSED
    • setRepeatingRequest вызывается для отображения непрерывного предварительного просмотра
  2. Блокировка фокуса: когда пользователь нажимал кнопку захвата

    • Переменная состояния: STATE_WAITING_LOCK
    • AF_TRIGGER: START
    • AF_MODE: CONTINUOUS_PICTURE
    • AF_STATE: все еще PASSIVE_SCAN в данный момент, но изменится после блокировки фокуса
    • Мне интересно, почему есть один capture вызов на этом этапе
  3. Захват изображения: после блокировки фокуса

    • Переменная состояния: STATE_PICTURE_TAKEN
    • AF_TRIGGER: START
    • AF_MODE: CONTINUOUS_PICTURE
    • AF_STATE: FOCUSED_LOCKED
    • captureStillPicture называется
  4. Захват неподвижного изображения

    • Переменная состояния: STATE_PICTURE_TAKEN
    • AF_TRIGGER: IDLE
    • AF_MODE: CONTINUOUS_PICTURE
    • AF_STATE: как может быть вызвано FOCUSED_LOCKED без AF_TRIGGER_START
    • capture чтобы сделать снимок
  5. Разблокировать фокус: после захвата вернуться к предварительному просмотру

    • Переменная состояния: STATE_PREVIEW
    • AF_TRIGGER: CANCEL
    • AF_MODE: CONTINUOUS_PICTURE
    • AF_STATE: PASSIVE_FOCUSED

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

С уважением, Ли

...