i.MX RT的H264软解码之爱的初体验FFMPEG
嗨,各位看官,上一周为大家简单介绍了主流视频编解码器的特点,(上周内容请点击这里回顾)和一些软解码的开源项目,今天小编为大家介绍FFMPEG在i.MX RT上的移植工作。
提到视频编解码开源项目,FFMPEG江湖老大哥地位是谁也无法撼动,网上有海量关于它的代码结构分析和开发应用经验可用做参考,有兴趣的小伙伴可自行搜索,这里不再次做彩虹屁介绍(致敬永远的雷神)。
下面直接开始本文的重点——ffmpeg在i.MX RT10xx上的实现。
一、了解工作流程
i.MX RT10xx从microSD卡读取H.264视频源,然后调用经过裁剪的FFMPEG库对视频源进行解码并生成YUV数据,最后通过像素处理通道(PXP),对YUV数据进行缩放和颜色空间转换,生成RGB格式数据并在LCD面板上显示。
二、课前准备
硬件:i.MX RT1050/60或i.MX RT1170板子,microSD卡,Mini/micro USB线缆。
软件:IAR EWARM IDE开发软件,i.MX RT的SDK和H.264解码库(社区上有i.MX RT1050的H.264解码工程下载链接:https://github.com/xinyigao/h264_decoding)
解码库:ffmpeg是一个大型综合类的多媒体库,在移植前需要剪切出一个干净轻便的满足客户需求的H264解码库,剪切方法可私下咨询小编也可移步https://github.com/xinyigao/h264_decoding)。
三、实际移植
想亲自体验移植过程的小伙伴,完成课前准备并剪裁完ffmpeg解码库后,可在官方SDK中的sdcard_fatfs和pxp的demo中进行移植,移植过程中注意堆、栈和text段的大小。
解码后YUV向RGB格式转换需要用到硬件pxp,别忘记使能格式转换函数:
PXP_SetCsc1Mode(APP_PXP,kPXP_Csc1YCbCr2RGB);
PXP_EnableCsc1(APP_PXP, true);
移植成功后按照正常的编译下载运行方式进行实验测试。
四、测试性能
移植后,内存的占用情况如下:
选择三个不同的视频源进行解码,在不同的运行模式下测试解码加播放的fps,结果如下表:
下面这个小视频,展示了实际播放的效果:
五、总结
CPU性能和内存访问速度对解码速度有较大影响,在确定CPU的情况下,尽可能多的将解码库中生成的“.o”文件放入ITCM,如有富余的TCM可分配为DTCM,放入待解码数据或解码后用于播放的数据,不建议优化解码库算法。
须深入了解的小伙伴可移步官网AN:https://www.nxp.com.cn/docs/en/application-note/AN12562.pdf
|