У меня есть приложение, в котором я пытаюсь передать объекту максимально возможную световую энергию из вспышки Android-смартфона.
В лабораторных измерениях с несколькими телефонами мы заметили, что светоотдача вспышки при фотосъемке с автоматической экспозицией может быть значительно выше, чем в стационарном режиме «Факел включен» (конечно, это зависит от устройства). Если бы можно было активировать вспышку на более высоком уровне мощности, независимо от условий внешнего освещения и на надежной, достаточно высокой частоте (5 Гц?), в некоторых случаях можно было бы выдать больше света, чем просто оставить фонарик включенным. государство.
К сожалению, кажется невозможным добиться такого точного управления вспышкой, как я предполагаю, потому что управление интенсивностью вспышки (кроме фонарика) привязано к управлению автоматической экспозицией на очень низком уровне.
Мне удалось заставить вспышку сработать при запросе кадров предварительного просмотра со следующим:
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_OFF);
mPreviewRequestBuilder.set( CaptureRequest.FLASH_MODE,
CaptureRequest.FLASH_MODE_SINGLE );
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,
CaptureRequest
.CONTROL_AE_PRECAPTURE_TRIGGER_START);
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,
CaptureRequest.CONTROL_AE_MODE_OFF);
// Finally, we start displaying the camera preview.
mPreviewRequest = mPreviewRequestBuilder.build();
setState( STATE_PREVIEW );
mCaptureSession.setRepeatingRequest(mPreviewRequest,
mCaptureCallback, mBackgroundHandler);
Когда результат захвата возвращается с FLASH_STATE_FIRED
, я делаю одно неподвижное изображение с помощью:
final CaptureRequest.Builder captureBuilder =
mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
captureBuilder.addTarget(surface);
// Use the same AE and AF modes as the preview.
captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_OFF);
captureBuilder.set( CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF );
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE,
CaptureRequest.CONTROL_AE_MODE_OFF);
mCaptureSession.stopRepeating();
mCaptureSession.capture(captureBuilder.build(), mCaptureCallback, null);
Что, кажется, требуется для сброса вспышки. Затем я возвращаюсь к приведенному выше коду предварительного просмотра, чтобы снова вспыхнуть, однако вспышка срабатывает очень прерывисто.
Есть ли лучший способ производить высокостабильные, высокочастотные вспышки с высокой мощностью с интерфейсом Camera2, кроме простого выключения фонарика?