Android开发笔记

camera不显示预览获取帧数据

2019-05-16  本文已影响0人  天敦敦

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;
上一篇下一篇

猜你喜欢

热点阅读