我正在尝试使用camera2 API开发一个Android相机应用。该代码工作正常。但是,在nexus 5X上对其进行测试之后,如果我添加多个Surface,并且下面调用的onConfigureFailed方法是我正在使用的代码,则createCaptureSession总是会失败
不知道为什么只有nexus 5X会发生这种情况
protected void startPreview() {
if (null == mCameraDevice) {
// Log.d(TAG, "mCameraDevice is null");
return;
}
//close Preview Session
if (mCaptureSession != null) {
mCaptureSession.close();
mCaptureSession = null;
}
try {
SurfaceTexture texture = mTextureView.getSurfaceTexture();
assert texture != null;
texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
Surface previewSurface = new Surface(texture);
mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
mPreviewBuilder.addTarget(previewSurface);
//mCameraDevice.createCaptureSession(Arrays.asList(previewSurface, mImageReader), new CameraCaptureSession.StateCallback(){ this line fails
mCameraDevice.createCaptureSession(Arrays.asList(previewSurface), new CameraCaptureSession.StateCallback(){ // this works
@Override
public void onConfigured(CameraCaptureSession cameraCaptureSession) {
mCaptureSession = cameraCaptureSession;
mPreviewBuilder.set(CaptureRequest.CONTROL_AF_MODE,CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
updatePreview();
}
@Override
public void onConfigureFailed(CameraCaptureSession cameraCaptureSession) {
Toast.makeText(this, "onConfigureFailed", Toast.LENGTH_SHORT).show();
}
}, null);
} catch (Exception e) {
Log.e(TAG, "startPreview faild",e);
e.printStackTrace();
}
}
最佳答案
调低分辨率似乎已经解决了这个问题。我在运行Android 7.0的三星S7(SM-G930V)上体验了它。我选择的分辨率为2048x1152或输出尺寸,宽度或高度约为2048。