Почему флешки работают в стеке? CONTROL_AE_MODE_ON_ALWAYS_FLASH Camera2API

Там странная ситуация. Я взял стандартный образец Google camera2API.

Мне нужно, чтобы вспышка работала постоянно, вне зависимости от внешнего освещения.

Для этого я изменил одну строку кода:

private void setAutoFlash(CaptureRequest.Builder requestBuilder) {
    if (mFlashSupported) {
//            requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
        requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
    }
}

Это было CONTROL_AE_MODE_ON_AUTO_FLASH, я изменил его на CONTROL_AE_MODE_ON_ALWAYS_FLASH.

И я столкнулся с проблемой, когда я нажимаю кнопку Сделать снимок, камера мигает, и все. Приложение отправляется в стек...

Что я делаю не так?

ИЗМЕНИТЬ

дальше разбираюсь:

я попробовал крачку на флэш-памяти на трех разных устройствах Meizu MX5, Samsung S5 и Samsung S6.

Два из них Meizu MX5, Samsung S5 корректно работают с кодом выше, и приложение не работает в стеке.

Проблема возникает с Samsung S6, НО...

Метод setAutoFlash() вызывается внутри кода 3 раза в разных местах

  1. captureStillPicture()
  2. unlockFocus()
  3. onConfigured()

И хитрость в том, что если я отключу setAutoFlash() в captureStillPicture() для Samsung S6, это перестанет складываться, и вспышка начнет работать, но если я попробую этот подход для Meizu MX5, Samsung S5 вспышка не работает...


person Aleksey Timoshchenko    schedule 30.10.2016    source источник
comment
Взгляните на этот вопрос и этот пример.   -  person Andrii Omelchenko    schedule 30.10.2016
comment
@AndriyOmelchenko Это не похоже на то, что мне нужно, но я придумал некоторые интересные вещи ... Я добавил их в вопросе, может быть, это поможет что-то заподозрить ...   -  person Aleksey Timoshchenko    schedule 30.10.2016
comment
Это не похоже на то, что мне нужно - я знаю, что это не ответ, и опубликую это как комментарий с надеждой, что вы найдете там что-то полезное)   -  person Andrii Omelchenko    schedule 30.10.2016
comment
@AndriyOmelchenko Нет, у этого парня другая проблема... В любом случае, спасибо!   -  person Aleksey Timoshchenko    schedule 30.10.2016
comment
@AndriyOmelchenko я отправил ответ, как я решил свою проблему, не могли бы вы взглянуть, и если вы знаете причину, по которой я получил эту проблему, дайте мне знать)   -  person Aleksey Timoshchenko    schedule 30.10.2016


Ответы (1)


В конце концов я нашел решение

Как я сказал метод

protected final void setAutoFlash(CaptureRequest.Builder requestBuilder) {
    if (isFlashSupported) {
        requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
    }
}

вызывается в трех разных местах кода.

  1. captureStillPicture()
  2. unlockFocus()
  3. onConfigured()

Поэтому я реализовал эту строку requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH); локально в каждом методе.

Наконец, что я получаю:

  1. unlockFocus() -> mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
  2. onConfigured() -> mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);

и для этого способа остались автонастройки

  1. captureStillPicture() -> captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);

Но я не знаю, почему у меня возникла такая проблема... Если кто-то знает причину, сообщите мне.

person Aleksey Timoshchenko    schedule 30.10.2016