rfb*_*ue2 6 java android android-camera
我正在使用Android的Camera2 API,我目前希望相机在准备闪光时执行某项操作.
构建CaptureRequest时,以下行:
captureRequest.set(CaptureRequest.CONTROL_AE_MODE,CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
Run Code Online (Sandbox Code Playgroud)
允许相机在低光照条件下闪光.但是,我不知道如何检测相机是否准备闪光.似乎在线关于这一特定行动的文献非常稀少.
我在相机处理部分结果时尝试检查是否FLASH_STATE存在,但似乎关键不可用 - 它一直在返回.也许我不是在正确的地方检查?FLASH_STATE_READYCaptureCallbacknull
相机CaptureCallback如下所示(基于Google的Camera2Basic代码示例):
private CameraCaptureSession.CaptureCallback mCaptureCallback
= new CameraCaptureSession.CaptureCallback() {
private void process(CaptureResult result) {
switch(mState) {
case STATE_PREVIEW: break;
case STATE_WAITING_LOCK:
// checking if result.get(CaptureResult.FLASH_STATE) ==
// CaptureResult.FLASH_READY over here didn't work because
// null was returned
int afState = result.get(CaptureResult.CONTROL_AF_STATE);
if (CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED == afState ||
CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED == afState) {
Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE);
if (aeState == null ||
aeState == CaptureResult.CONTROL_AE_STATE_CONVERGED) {
mState = STATE_WAITING_NON_PRECAPTURE;
captureStillPicture();
} else {
runPrecaptureSequence();
}
}
break;
case STATE_WAITING_PRECAPTURE:
Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE);
if (aeState == null ||
aeState == CaptureResult.CONTROL_AE_STATE_PRECAPTURE ||
aeState == CaptureRequest.CONTROL_AE_STATE_FLASH_REQUIRED) {
mState = STATE_WAITING_NON_PRECAPTURE;
}
break;
case STATE_WAITING_NON_PRECAPTURE:
Integer aeState1 = result.get(CaptureResult.CONTROL_AE_STATE);
if (aeState1 == null || aeState1 != CaptureResult.CONTROL_AE_STATE_PRECAPTURE) {
mState = STATE_PICTURE_TAKEN;
captureStillPicture();
}
break;
}
}
@Override
public void onCaptureProgressed(CameraCaptureSession session,
CaptureRequest request, CaptureResult partialResult) {
super.onCaptureProgressed(session, request, partialResult);
process(partialResult);
}
@Override
public void onCaptureCompleted(CameraCaptureSession session,
CaptureRequest request, TotalCaptureResult result) {
super.onCaptureCompleted(session, request, result);
process(result);
}
};
Run Code Online (Sandbox Code Playgroud)
在文档中,您可以阅读以下有关密钥的声明FLASH_STATE:
可选- 该值在某些设备上可能为空。
基本上,即使您使用 Lollipop 设备,您也不能确定 Camera2 APi 的所有功能都受支持。功能有限的设备称为“受限设备”。
欲了解更多信息,请查看此页面。这描述得很好。
编辑: 回答基本上是错误的评论:文档说:
当相机设备没有闪光灯时(即android.flash.info.available == false),此状态将始终为UNAVAILABLE。其他状态指示当前闪光灯状态。
因此,如果设备上没有闪光灯,该闪光灯FLASH_STATE也会存在并将返回UNAVAILABLE。
该文档几乎说明了您需要了解的所有内容。最重要的事实是,它取决于硬件级别/硬件模式。
让我们总结一下
对于旧设备
它将返回以下内容
当设备至少为 LEVEL_LIMITED 时:
这些值是可能的,但不能保证它们全部有效:
| 归档时间: |
|
| 查看次数: |
1831 次 |
| 最近记录: |