Vio*_*ffe 1 camera android android-camera
我正在尝试在我的应用中加入一些与相机相关的功能.我手动打开摄像头,并获得与预览流setPreviewCallback和startPreview.我不使用曲面来显示预览,但我确实将其设置为符合Camera API文档.这是我打开相机的方式:
public Camera openCamera(int id)
{
m_openedCamera = Camera.open(id);
m_surfaceHolder = new SurfaceView(MyApplication.instance().getApplicationContext()).getHolder();
Assert.assertNotNull(m_openedCamera);
m_openedCamera.setPreviewDisplay(m_surfaceHolder);
m_openedCameraFacing = facing;
if (m_openedCamera != null)
m_openedCamera.setPreviewCallback(this);
m_openedCamera.startPreview();
}
Run Code Online (Sandbox Code Playgroud)
这就是我发布它的方式,这里没什么好看的:
public void releaseCamera()
{
if (m_openedCamera != null)
{
m_openedCamera.stopPreview();
m_openedCamera.release();
m_openedCamera = null;
}
}
Run Code Online (Sandbox Code Playgroud)
它有点起作用,但是当我释放相机时,我得到一个异常"在释放后调用的方法()".澄清一下:相机发布后我不会调用任何相机方法.在调试器下进行双重和三重检查,我没有.我认为这里有混合的同步和异步调用会导致问题.
预览回调可能会导致此异常.onPreviewFrame()不同步,并且它接收Camera参数,该参数在Camera.release()执行时可能变为无效.即使回调没有使用单独的线程(强烈推荐),也可能发生这种情况.
之前release(),呼叫setPreviewCallback(null)并保留一个全局标志,以在相机释放后丢弃回调.
| 归档时间: |
|
| 查看次数: |
713 次 |
| 最近记录: |