1. 环境#
- 平台:a527
- 安卓环境:android13
- 硬件:800x800@30fps mjpeg格式uvc摄像头
2. 问题描述#
2.1. 现象演示#
在都不获取图像的情况下a83t和a527的功耗基本一样,获取图像之后,a527功耗比a83t大1W。跟客户沟通知道,a83t使用硬解码,a527使用库进行软件解码。
2.2. 过程描述#
在a527平台使用客户app(软解)和AWcamrea2(硬解)进行对比:
客户app获取uvc摄像头功耗高,cpu占用率高,cpu带宽高
AWcamrea获取uvc摄像头功耗低,cpu占用率低,cpu带宽低
软件通路:
客户app获取uvc摄像头通路:usb控制器->uvc-driver->v4l2框架–>第三方库解码(软解码)–>app
AWcamrea获取uvc摄像头:usb控制器->uvc-driver->v4l2框架–>usb camrea hal(调用VE进行硬件解码)—>app
2.3. 图片及说明#
使用cpu_monitor可知道,客户app整体占用率较高,并且后面CPU4、5、6大核占用率高。
使用mtop可知道带宽有变化,下面红色方框为客户app(软解):

3. 结果#
3.1. 原因分析#
硬解码是用过硬件电路进行解码,功耗低,cpu占用率低,cpu带宽低
软解码是通过cpu运算进行解码的,功耗高,cpu占用率高,cpu带宽高
3.2. 解决方法#
(1)调试usb摄像头,使得原生AWcamera2能获取uvc摄像头数据
(2)客户app直接内部调用原生AWcamera2
4. FAQ#
4.1 如何知道使用了VE硬件编码#
(1)看VE的clk有没有开
cat /sys/kernel/debug/clk/clk_summary | grep ve
(2)看相关服务有没有开启
lsof | grep "cedarc_dev"
(3)mtop -m
看ve_rw带宽有没有占用

需要注意的是,不同平台的ve_xx名称可能不一样,名称对应才能统计带宽
在板级设备树中进行确认真实名字:

如果名字不同,需要修改mtop源码统计名称
跳转命令:gomod mtop
4.2 如何获取HAL的日志#
logcat获取
可以使用LOG_TAG进行过滤,一般在hal文件的第一行会有个tag,在日志搜这个tag就能找出这个文件的相关打印
