我正在使用Android Camera2 API来捕获和处理图像.图像处理响应于成功捕获.我遇到的问题是相机捕获了2张图像,我无法更改Camera2Basic示例中的代码以确保只捕获一张图像.通过向ImageSaver.run()方法中添加日志记录代码可以证明该问题Camera2BasicFragment.java
public void run() {
Log.d("Camera2", "Saving image");
ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
...
}
Run Code Online (Sandbox Code Playgroud)
编辑 - 经过进一步调查后,问题似乎出现在样本的实施中,而不是API的任何基础.在示例中,以下代码跟踪相机的状态更改,
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: {
int afState = result.get(CaptureResult.CONTROL_AF_STATE);
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_WAITING_NON_PRECAPTURE;
/** CAPTURE 1 */
captureStillPicture();
} else {
runPrecaptureSequence();
}
}
break;
}
case STATE_WAITING_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;
/** CAPTURE 2 **/
captureStillPicture();
}
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经验证了两个captureStillPicture结果的调用都生成并因此被处理.我不完全确定正确的状态转换应该是什么.
我使用的是摩托罗拉Nexus 6
| 归档时间: |
|
| 查看次数: |
7102 次 |
| 最近记录: |