手表701摄像头性能数据评估(1)
📎 原始文档:https://www.kdocs.cn/l/csDJk6KoEKuC 手表701摄像头性能数据评估
- ram的损耗 由于目前701采取的方式是,摄像头yuv -> 701软件编码 jpg -> 芯片硬件解码rgb。所以ram的损耗主要在于摄像头yuv数据的缓存、编码出来后jpg数据的缓存,如果加入avi录制,还需要算上avi部分的缓存。
1.1 yuv数据的缓存
该部分的缓存主要用于数据接收,以及缓存于芯片软件编码成jpg,为了保证图片质量,是要求缓存一整帧图片的,如果不缓存一帧图片数据,由于摄像头的数据很快,肯定会出现缓存被覆盖的情况,极易吹出现切屏,切线的情况。yuv目前采用的数据是yuv422的格式,一个像素占2个字节因此常用分辨率消耗的ram数据如下:
| 240*320 | 8w | 2403202 = 153600 =150K |
|---|---|---|
| 640*480 | 30w | 6404802 = 614400 = 600K |
1.2 jpg数据缓存
该部分缓存主要是用于编码后jpg数据的缓存,推屏可以拿这部分数据显示。这部分代码中可以配置,可以根据编码出来的jpg大小动态调节,像素越高,编码质量越好,编码出来的jpg图片越大,需要的缓存也越大。该部分目前建议是缓存3帧,可以动态调节,按照8w像素,q值为50的实际调节,30K的ram基本可以满足要求。
1.3 avi的缓存
该部分缓存主要用于开启avi录像会占用到的缓存。主要有3部分开销:1.录像模块初始化,需要的一些模块内部缓存; 2.录制过程中音频帧临时buf ;3.录制过程中视频帧临时buf。
第一点,vpkg_avi接口, 参数传入 20 ,10 :10k
第二点,由于avi的写入是采用链表方式管理,其他模块通过添加链表节点的方式加进链表,然后avi线程再获取链表数据写入sd卡。因此需要缓存音视频帧。缓存多少帧,需要取决于芯片的运算速度,和线程的优先级分配。这里根据8w摄像头项目,预计要两帧音频临时buf,占16K
第三点,原因同上,需要视频临时buf,大小取决于编码出来的jpg大小,这里根据8w摄像头项目,预计每帧5-10k,可能需要预留2-3帧。
按照8w的摄像头项目,预计该部分需要消耗大概60K的ram,该部分可调节。
2. 速度的测算 速度主要包括,摄像头推数据的速度、芯片软件编码的速度、写sd卡的速度
2.1 摄像头推数据的速度
这个主要取决于摄像头所支持的最高帧率,一般都支持30帧,速度是足够的。暂不做讨论。
2.2 芯片软件编码jpg的速度
实测芯片软件编码240*320大小的yuv422转成jpg,需要65ms左右,由于701没有硬件编码模块,只能采取软件编码,这样的方式决定了,8w的像素,极限情况下,显示也只能达到15帧,而且没算上其他线程的调度。如果算上其他线程的一些损耗啥的,目前实测,8w像素推屏加录制avi,帧率会处于10-12帧的水平。这个数据如果不增加软件编码的速度,几乎没办法优化了。
2.3 写sd卡的速度
测试方法:


| 卡1 20k数据大小每次 | 卡1 40k数据大小每次 | 卡2 20k数据大小每次 | 卡2 40k数据大小每次 | |
|---|---|---|---|---|
| 1线12M时钟 | 22ms | 40ms | 20ms | 40ms |
| 1线24M时钟 | 14ms | 26ms | 14ms | 27ms |
| 1线48M时钟 | 10ms | 20ms | 下图报错 | 下图报错 |
| 4线12M时钟 | 10ms | 19ms | 写入速度不稳定,大多时候11ms 概率会有一包时长达到120ms | 写入速度不稳定,大多时候19ms概率会有一包时长达到120ms |
| 4线24M时钟 | 10ms | 15ms | 写入速度不稳定,最短8ms,最长能达到400ms | 写入速度不稳定,概率会有一包时长达到120ms |
| 4线48M时钟 | 7ms | 12ms | 下图报错 | 下图报错 |
