Camera预览流程

最近刚做完Camera项目,正好利用这段时间梳理下Camera预览的流程。从系统启动注册CameraService,到应用打开相机,配置流建立通道,再到设置参数,最后回调onImageAvailable方法收到HAL层返回的数据,并将数据Buffer添加到SurfaceTextureScreenNail的缓存列表中,采用OpenGL ES将纹理绘制到Surface上。
整体架构图

应用在初始化的时候会通过上下文获得CameraManager对象的实例,调用该类的openCamera方法打开相机设备,接着会调用CameraService类的connectDevice方法,底层会返回ICameraDeviceUser的代理对象CameraDeviceClient,应用会回调CameraDevice.StateCallback类的onOpened方法,在该方法中调用createCaptureSession创建会话并完成流的配置。
打开相机

ConfigureStream主要工作就是将Surface给到CameraServer,将CaptureRequest处理结果的Buffer数据填充到对应的Surface容器中,填完后由BufferQueue机制回调到应用的Surface控件的CallBack回调函数中。
配置流

接下来App便会调用setRepeatingRequest接口设置参数给CameraServer,当它在初始化时会启动一个循环线程等待接收Request,将CaptureRequest交给HAL处理,得到处理结果后取出处理结果CaptureResult,将Buffer填到App给到的Surface容器中。为了预览,则交给Preview的Surface容器;为了拍照,则交给ImageReader的Surface容器。
设置参数

最终HAL层返回的数据通过PreviewCallBack接口的回调函数onCaptureCompleted将Buffer数据转换成纹理绘制到GLSurfaceView控件上,完成了相机预览的效果。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值