跳过正文

UVC摄像头软解码导致功耗高问题分析

Huang JY
作者
Huang JY
记录全志 SoC、驱动开发、显示调试与智能硬件项目实践
目录

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(软解):

客户App mtop带宽统计

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带宽占用统计

需要注意的是,不同平台的ve_xx名称可能不一样,名称对应才能统计带宽

在板级设备树中进行确认真实名字:

设备树VE节点配置

如果名字不同,需要修改mtop源码统计名称

跳转命令:gomod mtop

4.2 如何获取HAL的日志
#

logcat获取

可以使用LOG_TAG进行过滤,一般在hal文件的第一行会有个tag,在日志搜这个tag就能找出这个文件的相关打印

HAL LOG_TAG示例