Можно ли управлять интенсивностью вспышки и частотой вспышки с помощью Android Camera2?

У меня есть приложение, в котором я пытаюсь передать объекту максимально возможную световую энергию из вспышки 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, кроме простого выключения фонарика?


person user3546903    schedule 27.09.2017    source источник
comment
Вы проверили это: stackoverflow.com/questions/5970188/   -  person Darush    schedule 27.09.2017
comment
Даруш, только что проверил это (спасибо), подтверждает мой опыт, что вы не можете сделать это независимым от устройства способом.   -  person user3546903    schedule 27.09.2017
comment
Я отмечаю это, чтобы удалить его из списка вопросов без ответов и содержать сайт в чистоте.   -  person Darush    schedule 27.09.2017