Android Camera2 拍照速度过慢问题

根据业务需求,需要调用相机每秒抓取5帧以上的图片

1、通过安卓官网下载了关于camera2 使用的demo了解了拍照的流程

2、通过查阅资料将单次拍照改成了连拍主要是

CaptureSession.captureBurst

的使用

3、通过测试发现 连拍的效率平均不到2张每秒

4,通过获取预览帧的方式

旧Camera

Camera的方法一般是通过设置camera.setPreviewDisplay()将预览帧输出到SurfaceView,并通过接口Camera.PreviewCallback中的onPreviewFrame()获取预览帧数据。

对于华为M2,在1920x1080分辨率下也能保持相机支持的最高30fps的输出。

新Camera2

Camera2对这部分改动很大。通过CameraCaptureSession.setRepeatingRequest()开始预览,而传入的request则由PreviewRequestBuilder创建

Java

mPreviewRequestBuilder.addTarget(surface);

表示将预览输出到surface,一般来说就是屏幕了。华为M2对这个是支持的,目测也应该是达到了30fps。

获取预览帧则由

mPreviewRequestBuilder.addTarget(mImageReader.getSurface());

得到,就是将预览帧同时发送给屏幕surface和ImageReader,其中发送给ImageReader的预览帧分辨率由ImageReader根据支持的分辨率指定。

然后问题就来了,当设置ImageReader为1440x1080时,运行APP会发现屏幕输出卡顿,且ImageReader获得预览帧速度明显不够30fps;选择不输出屏幕,只输出ImageReader时,获得预览帧速度也明显不够30fps。(测试ImageReader是通过ImageReader.OnImageAvailableListener接口,在另一线程中处理获取到的Image,且获取到后Image后立即释放。)

5、测试发现预览帧冉冉没能解决问题,于是查阅资料发现这个是与生成图片的格式有关

于是将JPEG格式转换成YUV_420_888

Size largest = Collections.max(Arrays.asList(map.getOutputSizes(ImageFormat.YUV_420_888)),new CompareSizesByArea());
mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(), ImageFormat.YUV_420_888, /*maxImages*/2);
                

 

转换完了之后问题得到解决,每秒能够抓取的图片能够达到20帧。

 

 

转载于:https://my.oschina.net/kingchen8080/blog/1648383

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值