Android 笔记 camera2 新api

android.hardware.camera2 的使用

API 21,也就是Android 5.0开始,发布了一个新的相机控制用API,就是camera2。
原来的camera已经被标记为deprecated。
按照官方的说法,新的Camera2有许多新的性能,例如

-原生支持RAW格式
-全手动控制,你能想到的所有属性都能手动控制
-更全面的连拍控制,硬件能支持到多快,就能设置成多快
新的API中添加的手动控制功能列表:

感光度
手动对焦/AF开关
AE/AF/AWB模式
AE/AWB锁
硬件视频防抖
连续帧

等等。反正就跟许多广告上讲的一样,新的camera2是很美好的。
但是,也是更难使用的。因为使用逻辑已经跟以前不一样了,更加复杂,设置更加精细,每一步都需要你去控制,好处是能控制的更仔细,坏处就是上手比较麻烦。

于是我花了快一个星期才把preview这么简单的事情搞定

其实问题还是在于,我自己比较守旧,希望能不变的就不要变。这样是不好的。
所以记住,一切要以官方文档的example为模板,不要想当然

新API的各部分

官网上没有关于camera2的课程文章,只有实例和API参考,在课程文章里面相机部分还是用旧API来介绍的。
Android Camera2 from api 21
原来,几乎所有的控制都是用camera这个原始对象发起的,理解起来很容易。
而现在的新api,把控制细分,每一个对象都有自己的目的,初看起来很混乱。
仔细看更混乱。
看多了已有也还好,总之一句话,熟能生巧。

CameraManager,操作的原始发起者,创建CameraDevice对象,CameraCharacteristics对象等等
CameraDevice,代表设备,相当于原来的camera对象,但是需要创建其他对象来进一步操作
CameraCharacteristics,标记设备的属性。只读的,也就是说只能从中读取属性,不能设置。
CameraCaptureSession,从cameraDevice创建,用来进一步操作。
CameraRequest.builder,从cameraDevice创建,用来设置一些属性,比如预览分辨率,相机属性,预览目标,照片属性等等。每个Builder可以设置不同的属性,预览和拍照分开来,逻辑很合理,使用很麻烦。
主要就是这些。

注意一点,下面说的就是为什么我花了这么长时间

本来这些内容很快就可以弄明白,但是为了成功的开始预览,我几乎花了一个星期。
官网API文档上写着,要预览,或者获得图像,必须要将图像投射到一个surface对象上,通常预览目标是surfaceView或者textureView,而保存对象是imageReader,这些都可以从中获得一个surface用来投射,还有其他的目标用于视频,DNG显示等等。
因为旧的camera API文档和自己测试用的是surfaceView,所以我也用的是这个,但是出现了很多莫名其妙的问题。
首先,就是根本不能preview,图像是黑的,完全不能渲染,创建session这一步失败,进入了onConfigurefailed(看下面的代码,里面有这个东西),正常状况要进入onConfigured就算成功了。

然后,我发现一个问题,官方的模拟器似乎有bug,程序设置正确以后在运行6.0的模拟器上可以运行,但是在5.0的模拟器上不能正确运行,所以,
测试应以实机为准

为了找出原因,我看了下文档,然后搜索了许多其他介绍,发现:
必须设置好preview的尺寸,符合相机的输出大小,格式,才能成功预览。如果你的surfaceView尺寸设置不对,就会onConfi

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值