Как получить режим фокусировки на a7iii / a7riii / a9 через API удаленной камеры - PullRequest
1 голос
/ 12 апреля 2019

Проблема

Sony a7iii / a7riii и a9 имеют проблемы со съемкой в ​​автофокусе через API удаленной камеры. Очевидно, что есть обходной путь (потому что он, кажется, хорошо работает с приложением PlayMemories), который я попытался воспроизвести в приложении, которое я сделал, однако оно не кажется совершенно безупречным и вызывает проблемы при многократной съемке снимков. как на время.

Проблема в том, что при AF / w Shutter на (не спрашивайте, почему это не наоборот) камера иногда выдает ошибку на actTakePicture с 40400.

Попытка обхода

Я попытался обойти это следующим образом:

  1. Проверьте номер модели и, если a7iii / a7riii / a9 (и пару других)
  2. Проверьте состояние фокуса и, если не сфокусировано (или ноль)
  3. Проверьте режим фокусировки и, если AF или ноль (ЭТО ПРОБЛЕМА!)
  4. Выполнить половинное нажатие затвора
  5. Ожидание фокуса. Состояние меняется на сфокусированное

Проблема в том, что a7iii e.t.c. похоже, что они не сообщают о своем режиме фокусировки через события или не отвечают на запрос getFocusMode API, даже если он указан в их поддерживаемых функциях. Это означает, что вместо шага 5. в вышеупомянутом я должен:

  1. Выполните actTakePicture немедленно при ответе на нажатие наполовину, потому что, если камера находится в MF, состояние фокусировки не изменится.
  2. Если это не удается с 40400 (Съемка не удалась), проигнорируйте ошибку, потому что, возможно, мы находимся в AF.

Теоретически все это работает:

Автофокус

Пользователь нажимает кнопку затвора → Вызов halfPressShutter → Вызов actTakePicture → Если все получится, то все готово, если не получается → Ожидание отхода от события «фокусировка» → Вызов actTakePicture

Ручная фокусировка

Пользователь нажимает кнопку затвора → Вызов halfPressShutter → Вызвать actTakePicture → СЛЕДУЕТ завершить

Следующая часть проблемы

Следующая часть проблемы заключается в том, что, если пользователь находится в MF, камера все равно будет часто выходить из строя с 40400, который запускает поток в режиме «Автофокус», но поскольку мы в MF, мы не не получить никакого изменения в фокусе от событий камеры. По этой причине очень важно, чтобы я мог проверить, находится ли камера в MF или AF, и просто пропустить halfPressShutter для MF, в противном случае мой код застревает в ожидании изменения focusState.

Вызов getFocusMode на a7iii, похоже, возвращает 40401 (камера не готова) и доступен в ответе getMethodTypes, но, кажется, никогда не становится доступным или отправляет события через getEvent. Если кому-то удалось сделать это доступным или решить, как его можно отправить с помощью событий, которые были бы невероятными!

...