标签:android android-camera2 camera2
我在使用Camera2 API进行触控重点实现时遇到问题.这是我的代码:
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_CANCEL);
if (isMeteringAreaAESupported()) {
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_REGIONS,
new MeteringRectangle[]{focusArea});
}
if (isMeteringAreaAFSupported()) {
mPreviewRequestBuilder
.set(CaptureRequest.CONTROL_AF_REGIONS, new MeteringRectangle[]{focusArea});
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_AUTO);
}
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER,
CameraMetadata.CONTROL_AF_TRIGGER_START);
try {
mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), null,
mBackgroundHandler);
mManualFocusEngaged = true;
} catch (CameraAccessException e) {
// error handling
}
我看到的问题是在短时间内多次调用上述代码时某些设备上闪存的奇怪行为(即用户在设置焦点之前触摸屏幕的速度太快).例如,在S5上看起来所有请求都排队等候,如果用户触摸了很多次,它们会一个接一个地执行.在我的Nexus 5上,闪存不会从请求请求闪烁,但会一直打开,直到最后一个请求执行完毕.
我所追求的是实际取消飞行中的请求,就像在Google相机中一样.如果您使用Google相机尝试使用闪光灯打开相同的内容,他们会在注册新触摸时立即取消请求.
我试过添加mCaptureSession.abortCaptures();在上述方法之前但它没有以相同的方式工作并且也开始丢帧. mCaptureSession.stopRepeating();完全没有任何区别.
解决方法:
显然我不得不做一个取消AF的捕获请求.
我在CANCEL触发器的第一行之后添加了这个:
try {
mCaptureSession.capture(mPreviewRequestBuilder.build(), mCaptureCallback,
mBackgroundHandler);
// After this, the camera will go back to the normal state of preview.
mState = STATE_PREVIEW;
} catch (CameraAccessException e){
// log
}
标签:android,android-camera2,camera2 来源: https://codeday.me/bug/20190628/1313339.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。