全志科技
直播中

corkia

4年用户 657经验值
擅长:嵌入式技术
私信 关注
[经验]

全志D1-H芯片 mp4(Xvid)视频文件播放花屏问题

1、问题背景
客户使用F133进行一体广告机项目开发过程中,测试到附件中的片源《少女时代OhMVFullHD1080(播放花屏).mp4》播放时会出现花屏现象。但在之前的C800相同项目中该片源测试正常。

2、问题描述
出错第一帧标号为17(标号从0开始),如下图所示:

c5bb0b4ce1084f27b751c7630eed0939.png

抓取该帧花屏图像,现象如下:

45f7a51fff3f4a4d8cd4118097e46189.png

花掉的图像帧数据如下:

92cd3eefc82d4697be82fd7c61b1946f.png

3、问题分析
(1)关掉cache,花屏现象仍旧,排除漏刷cache影响;
(2)64位系统(tina/melis)播放均花屏,32位系统正常;
(3)寄存器对比,未发现异常;
(4)在FbmRequestBuffer中将请求到的buffer清零,图像仍会花掉,但是花屏现象如下:

4ba4052761654a4e88067b62c39cab3b.png



推测在视频播放的过程中,该部分未有数据写出,仍然保留该buffer中上一帧的数据。(未修改代码前出错第一帧下半部分之所以是黑色的,是因为该视频前面的12帧均为黑色图像帧,所以该buffer中残留有上一帧的数据)

b589786678434cfc83ff3350f009f517.png

最后,通过添加打印发现,正常情况(R528平台),在未解码完一帧时,会通过检查同步标记函数而进入下一个packet的解码 ,但是现在异常(F133/D1)情况下跑到了else里面,导致一帧图像没有解码完,就解下一帧了。 正好前面抓图的现象也是第一帧出错的图像,下半部分是前面图像的数据残余。

ad1b7c79bc0a4211abbaf823f8384e98.png

经分析,该问题的根本原因是在64位编译器中,i>>32 都等于i;而在32位编译器中,i>>32 都等于0。所以此发现也正好解释了之前的测试结果 “64位系统(tina/melis)播放均花屏,32位系统正常”。


4、解决办法
对出现右移32位的情况做判断,即return (rbit-n)<0?0:((rbit-n)>=32?0:(ld->bit_a & (0xFFFFFFFF >> (ld->bitcnt))) >> (rbit-n));

对应的库文件见附件。

> 原贴链接:https://bbs.aw-ol.com/topic/749/
> 全志在线开发者交流企鹅群(客服机器人24小时在线解答):498263967
> 资源获取、问题讨论可以到全志在线开发者社区进行:https://www.aw-ol.com
> 全志及开发者最新动态可以关注全志在线微信公众号

更多回帖

发帖
×
20
完善资料,
赚取积分