安卓虚拟化实战教学(四):Camera HAL 定制与调试

    AOSP/AAOS Camera相关的HAL就我所知的就包括标准的Camera HAL,用于USB 摄像头的external camera hal,车载领域的EVS HAL。本章承接上一部分主要讲的就是External Camera Hal的定制来满足模拟器的需求,evs内部camera采集用的也是v4l2,知识点是互相通用的。

自定义

首先来一张官方对于这个模块自定义的说明:

如果是作为一个完整的项目,上面说的编码是一个非常重要的点,目前该模块用的还是libyuv软编解码这样会占用大量的CPU,实际情况必须采用硬解码。

除上面说的这些点外,目前External Camera HAL只支持两种视频的输入格式,分别是:V4L2_PIX_FMT_MJPEG和V4L2_PIX_FMT_Z16。分析HAL的源码发现它会把对应的MPJEG数据转换成I420:

所以我想新增YUV420和H264(TODO)的格式数据。代码片段如下:

此时就是要修改对应的HAL代码支持YUV420的数据输入,然后v4l2loopback的设备驱动注入YUV420的数据。(思路就是这样)。

调试

  • v4l2-ctl命令查看v4l2loopback设备节点参数(源码修改后版本)

可以很明确的看到Pixel Format      : 'YU12' (Planar YUV 4:2:0)

  • FFmpeg注入对应的视频流

ffmpeg -re -stream_loop 1 -i /data/xxx.mp4 -vf format=yuv420p -s 1920x1080 -f v4l2 /dev/video0

完成上面的指令后就是把xxx.mp4的视频注入到了v4l2设备节点中,此时我们再重启我们修改后的

vendor.camera-provider-2-4-ext HAL看看LOG有什么不同:

可以看到我新增了一些debug log,然后ERROR的报错日志已经都不见了,此时的HAL已经正常工作。

  • dumpsys media.camera查看Camera HAL & Camera Framework

片段:

从上面的信息HAL正常work,已经识别到有一个device,对应的Camera Service也识别到了Device 100的设备,但是framework看起来显示不对,下一章带来framework的修改。

总结

上面提到了一些命令排除android自带的dumpsys, logcat等命令。还有新增了v4l2-ctl, ffmpeg,这里牵扯到了开源软件的移植,通过不同的交叉编译工具来适应不同的平台。包括我们可以定制ffmpeg打开HW硬件解码的能力,这里涉及了很多的嵌入式相关知识,看以后是否新起章节介绍。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值