从android 5.0之后,原来camera的接口开始弃用,新增了camera2 API,新的接口使用起来更加困难。正好这段时间也在自学camera hal V3.3的flow,为了跟上时代,虽然目前只需要负责 camera hal V1.1,但保不准什么时候就会切到V3.3。
V1.x和V3.x在Framework 和hal层的区别:
我觉得最大的区别就是数据流的架构,变化很大,V1.x中,Framework层很简单,不会管理数据流,只是做简单的传递,因为都没有起任何线程,但到了V3.x,很多在hal层处理的工作被挪到了Framework层,一个简单的例子,比如preview,在V1.x是hal层的一个线程将camera 数据送给surfaceflinger显示,但是在V3.x是Framework层中的一个线程将camera数据送给surfaceflinger显示。
如果不做camera Framework 和hal层的开发和维护工作,可以不用了解这些,所以我们还是重点来了解开放给应用层的API。比如如何实现camera 的预览,拍照和录制这三个功能,可以参考共享在github网站上的代码,这只是我个人的一种封装(架构)了,仅供参考。代码中还有很多没有完善的地方,比如:
(1) 运行时权限的检测和申请
(2) 其他相关的功能,比如拍照模式,放大缩小画面等功能
(3) 很多操作都没有加锁,需要考虑多线程情况
(4) error handle,一些操作失败后,没有对用的处理机制
(5)...
代码共享:https://github.com/harsand/camerademo