为什么闪存驱动器应用程序堆栈?CONTROL_AE_MODE_ON_ALWAYS_FLASH Camera2API



有奇怪的情况。我取了标准的谷歌样本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

我遇到了问题,当我点击拍照按钮时,相机正在闪烁,就是这样。App进入栈

我做错了什么?

编辑

I figure out next:

我已经在三个不同的设备Meizu MX5, Samsung S5Samsung S6上尝试了flash。

其中两个Meizu MX5, Samsung S5在上面的代码中正常工作,应用程序不能在堆栈中驱动。

Samsung S6出现问题,但是…

方法setAutoFlash()在代码内不同位置调用了3次

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

和技巧是,如果我禁用setAutoFlash()captureStillPicture() Samsung S6它是停止堆叠和flash开始工作,但如果我尝试这种方法Meizu MX5, Samsung S5 flash不工作…

最终我找到了解决办法

正如我所说的方法

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);

和此方法保留自动设置

  • captureStillPicture() ->captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
  • 但是我不知道为什么我有这样的问题…如果有人知道原因,请告诉我。

    相关内容

    • 没有找到相关文章