Ручная фокусировка со вспышкой с использованием камеры Android2

Как выполнить ручную (сенсорную) фокусировку со вспышкой с помощью Android camera2 API?

Мои настройки CaptureRequest: 1. тип — TEMPLATE_PREVIEW 2. CONTROL_AE_MODE — CONTROL_AE_MODE_OFF 3. FLASH_MODE — FLASH_MODE_SINGLE 4. CONTROL_AF_TRIGGER — CONTROL_AF_TRIGGER_START

Применение:

CaptureSession.capture(captureRequest.build(), captureCallback, null);

Результат: Камера сфокусируется, если света достаточно. В противном случае вспышка мигает очень быстро и фокусировка невозможна.


person Maxim Metelskiy    schedule 23.12.2014    source источник
comment
Непонятно, что вы хотите сделать. Вы используете ручную экспозицию, но хотите включить вспышку для фокусировки или просто хотите, чтобы вспышка сработала для окончательного снимка? Или что-то совсем другое? Прямо сейчас вы одновременно запускаете одну вспышку и пытаетесь запустить автофокусировку одним запросом, что вряд ли сработает.   -  person Eddy Talvala    schedule 08.01.2015
comment
Я хочу, чтобы вспышка срабатывала для фокусировки и для окончательного захвата. Как вспышка в режиме приложения Google Camera   -  person Maxim Metelskiy    schedule 09.01.2015
comment
Если вы используете AE_MODE_OFF, вам придется вручную управлять вспышкой, что в настоящее время возможно только ограниченным образом. Вам нужно будет переключить вспышку на ФАКЕЛ, прежде чем начать фокусировку, а затем установить ее на ОДИНОЧНУЮ для съемки с высоким разрешением.   -  person Eddy Talvala    schedule 10.01.2015
comment
Спасибо, @Эдди! Я думал об этом. Но похоже на взлом. Неужели постоянно включенный Flash — это такая сложная функция с использованием camera2 API?   -  person Maxim Metelskiy    schedule 11.01.2015


Ответы (1)


Вы можете попробовать выполнить ручную (сенсорную) фокусировку со вспышкой следующим образом:

mPreviewBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH);

при использовании TRIGGER используйте как AE, так и AF:

mPreviewBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_CANCEL);
mPreviewBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START);
mPreviewBuilder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, CameraMetadata.CONTROL_AE_PRECAPTURE_TRIGGER_START);

а потом:

mCameraCaptureSession.setRepeatingRequest(mPreviewBuilder.build(), mPreviewSessionCallback, mHandler);
person yydcdut    schedule 23.12.2014
comment
Спасибо за ответ! Забыл упомянуть, что мне всегда нужна вспышка, а не авто. И я не уверен насчет setRepeatingRequest. Сенсорный фокус — это всего лишь одно действие. И последний вопрос: можно ли управлять работой flash по параметру FLASH_MODE, а не по CONTROL_AE_MODE? - person Maxim Metelskiy; 23.12.2014
comment
FLASH всегда включен: mBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_TORCH); - person yydcdut; 24.12.2014
comment
setRepeatingRequest означает запрос бесконечно повторяющегося захвата изображений этим сеансом захвата» в документе SDK. - person yydcdut; 24.12.2014
comment
Мне не нужен факел. Мне нужно, чтобы вспышка всегда была включена в качестве режима камеры. Это означает, что вспышка должна срабатывать только для каждого захвата и каждой фокусировки. Но это не должно зависеть от условий освещения. - person Maxim Metelskiy; 25.12.2014
comment
Я пытался использовать TEMPLATE_MANUAL. Моя проблема в том, что я не могу понять разницу между CONTROL_AE_MODE и FLASH_MODE. Какие различия между ними? За что отвечает FLASH_MODE? - person Maxim Metelskiy; 25.12.2014
comment
mPreviewBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_ALWAYS_FLASH); - person yydcdut; 04.01.2015