camera不显示预览获取帧数据

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;
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容