Проблема
Sony a7iii / a7riii и a9 имеют проблемы со съемкой в автофокусе через API удаленной камеры. Очевидно, что есть обходной путь (потому что он, кажется, хорошо работает с приложением PlayMemories), который я попытался воспроизвести в приложении, которое я сделал, однако оно не кажется совершенно безупречным и вызывает проблемы при многократной съемке снимков. как на время.
Проблема в том, что при AF / w Shutter на (не спрашивайте, почему это не наоборот) камера иногда выдает ошибку на actTakePicture
с 40400.
Попытка обхода
Я попытался обойти это следующим образом:
- Проверьте номер модели и, если a7iii / a7riii / a9 (и пару других)
- Проверьте состояние фокуса и, если не сфокусировано (или ноль)
- Проверьте режим фокусировки и, если AF или ноль (ЭТО ПРОБЛЕМА!)
- Выполнить половинное нажатие затвора
- Ожидание фокуса. Состояние меняется на сфокусированное
Проблема в том, что a7iii e.t.c. похоже, что они не сообщают о своем режиме фокусировки через события или не отвечают на запрос getFocusMode
API, даже если он указан в их поддерживаемых функциях. Это означает, что вместо шага 5. в вышеупомянутом я должен:
- Выполните
actTakePicture
немедленно при ответе на нажатие наполовину, потому что, если камера находится в MF, состояние фокусировки не изменится.
- Если это не удается с 40400 (Съемка не удалась), проигнорируйте ошибку, потому что, возможно, мы находимся в AF.
Теоретически все это работает:
Автофокус
Пользователь нажимает кнопку затвора → Вызов halfPressShutter → Вызов actTakePicture → Если все получится, то все готово, если не получается → Ожидание отхода от события «фокусировка» → Вызов actTakePicture
Ручная фокусировка
Пользователь нажимает кнопку затвора → Вызов halfPressShutter → Вызвать actTakePicture → СЛЕДУЕТ завершить
Следующая часть проблемы
Следующая часть проблемы заключается в том, что, если пользователь находится в MF, камера все равно будет часто выходить из строя с 40400, который запускает поток в режиме «Автофокус», но поскольку мы в MF, мы не не получить никакого изменения в фокусе от событий камеры. По этой причине очень важно, чтобы я мог проверить, находится ли камера в MF или AF, и просто пропустить halfPressShutter
для MF, в противном случае мой код застревает в ожидании изменения focusState
.
Вызов getFocusMode
на a7iii, похоже, возвращает 40401 (камера не готова) и доступен в ответе getMethodTypes
, но, кажется, никогда не становится доступным или отправляет события через getEvent
. Если кому-то удалось сделать это доступным или решить, как его можно отправить с помощью событий, которые были бы невероятными!