Camera初始化
Camera camera = Camera.open(mCameraIndex);
Camera.Parameters p = camera.getParameters();
p.setPreviewFormat(ImageFormat.NV21);
p.setPreviewSize(1280, 720);
p.setPictureFormat(ImageFormat.NV21);
p.setPictureSize(1280, 720);
p.setZoom(0);
p.setPreviewFrameRate(30);
p.setRotation(0);
camera.setParameters(p);
开始监听回调,设置预览
try {
// 主要是surfaceTexture获取预览数据,但不显示
SurfaceTexture surfaceTexture = new SurfaceTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES);
mCamera.setPreviewTexture(surfaceTexture);
} catch (IOException e) {
e.printStackTrace();
}
// 设置 mCamera.addCallbackBuffer(mPreviewData) 后才会回调,旨在每处理完一帧数据回调一次
mCamera.setPreviewCallbackWithBuffer(mPreviewCallback);
// 设置缓存帧数据容器,避免重复创建 private byte[] mPreviewData = new byte[mSize.width * mSize.height * 3 / 2];
mCamera.addCallbackBuffer(mPreviewData);
mCamera.startPreview();
帧数据监听实现
Camera.PreviewCallback mPreviewCallback = new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
// 在此处处理当前帧数据,并设置下一帧回调
mCamera.addCallbackBuffer(mPreviewData);
}
};
关闭相机
camera.stopPreview();
camera.setPreviewCallbackWithBuffer(null);
camera.release();
camera = null;
网友评论