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硬件解码的能力,这里涉及了很多的嵌入式相关知识,看以后是否新起章节介绍。


:Camera HAL 定制与调试&spm=1001.2101.3001.5002&articleId=144506229&d=1&t=3&u=b344979abd604a6ca0f6bc8896259b90)
117

被折叠的 条评论
为什么被折叠?



