use*_*112 9 android android-camera camera2
我正在尝试使用camera2 API创建一个从服务中获取一些照片的应用.
我可以让应用程序从基于Camera2Basic样本的片段中拍摄出精美的照片.
但是当我尝试移动到服务时,图像无法正确捕获.它永远不会超过自动曝光预捕获状态.
我把它缩小到没有预览的问题.我通过采用Camera2Basic代码并删除预览来组合测试片段,这导致了同样的问题.
我把一个有问题的测试片段放在一起,基于Camera2Basic样本,我基本上只删除了预览代码.片段代码上传到http://pastebin.ca/3182401.
我正在获取onCaptureCompleted()回调,但是当我在这里检查相机自动曝光状态时,它仍然处于CONTROL_AE_STATE_PRECAPTURE状态.
如果其中一个摄像机状态仍处于预先捕获状态,则捕获将完成对我来说没有意义.
有人知道这里会发生什么吗?
小智 0
我认为你的逻辑有一个缺陷,你将 mState 设置为预捕获状态
private void process(CaptureResult result) {
switch (mState) {
case STATE_PREVIEW: {
// We have nothing to do when the camera preview is working normally.
break;
}
case STATE_WAITING_LOCK: {
Integer afState = result.get(CaptureResult.CONTROL_AF_STATE);
if (afState == null) {
captureStillPicture();
} else if (CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED == afState ||
CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED == afState) {
// CONTROL_AE_STATE can be null on some devices
Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE);
if (aeState == null ||
aeState == CaptureResult.CONTROL_AE_STATE_CONVERGED) {
mState = STATE_PICTURE_TAKEN;
captureStillPicture();
} else {
runPrecaptureSequence();
}
}
break;
}
case STATE_WAITING_PRECAPTURE: {
// CONTROL_AE_STATE can be null on some devices
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: {
// CONTROL_AE_STATE can be null on some devices
Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE);
if (aeState == null || aeState != CaptureResult.CONTROL_AE_STATE_PRECAPTURE) {
mState = STATE_PICTURE_TAKEN;
captureStillPicture();
}
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
是否会输入案例 STATE_WAITING_PRECAPTURE?
| 归档时间: |
|
| 查看次数: |
2083 次 |
| 最近记录: |