我正在尝试使用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。

07-24 09:46
查看更多