最后我找到了那个错误的原因!
您会感到惊讶,但该错误是由捕获会话的表面列表强制执行的。更具体地说,表面的添加顺序到列表中!如果首先添加相机预览表面(SurfaceHolder),则一切正常:
// prepare list of surfaces to be used in capture requests
List<Surface> sfl = new ArrayList<Surface>();
sfl.add(mCameraSurface); // surface for viewfinder preview
sfl.add(mPreviewImageReader.getSurface()); //preview data
sfl.add(mImageReader.getSurface()); // surface for image capture
// configure camera with all the surfaces to be ever used
camDevice.createCaptureSession(sfl, new sessionListener(), null);
但是当它最后添加时,我们得到了那个错误 - 过度曝光的预览!
// prepare list of surfaces to be used in capture requests
List<Surface> sfl = new ArrayList<Surface>();
sfl.add(mPreviewImageReader.getSurface()); //preview data
sfl.add(mImageReader.getSurface()); // surface for image capture
sfl.add(mCameraSurface); // surface for viewfinder preview
// configure camera with all the surfaces to be ever used
camDevice.createCaptureSession(sfl, new sessionListener(), null);
这让我大吃一惊!