szjdb 发表于 2023-12-11 22:05:54

STM32H7 LVGL 播放MPEG视频

ERIC大神和众高手好,

最近想在H7上实现H264等MPEG视频播放,刚好留意到LVGL已经包含了视频库,不知大神们有没有研究过,到底H7有没有可能以可以接受的速度(10帧以上)和分辨率(800*480)实现视频播放和快进快退等控制?

先多谢大家!

eric2013 发表于 2023-12-12 08:33:44

移植这个就行,是在M7内核的RT1050上实现的。

单片机或者Cortex-A的单片机玩法做H264视频编码和解码实现案例,移植 FFMPEG裁剪实现
https://www.armbbs.cn/forum.php? ... d=118869&fromuid=58
(出处: 硬汉嵌入式论坛)

szjdb 发表于 2023-12-12 18:06:30

多谢硬汉哥。
没找到NXP源码链接呢? 另外不知道能不能整合到LVGL框架。好像LVGL已经自带MPEG库了。就是没有看到朋友们在STM32上的例子。 不知道解码出来的YUV420 能不能用DMA2D转为RGB.看过有位大神移植F4上的,YUV420是分开存储颜色通道的,不能用DMA2D.
还请大神多指导!

eric2013 发表于 2023-12-13 08:19:25

szjdb 发表于 2023-12-12 18:06
多谢硬汉哥。
没找到NXP源码链接呢? 另外不知道能不能整合到LVGL框架。好像LVGL已经自带MPEG库了。就是没 ...
看了下,lvgl也是移植的ffmepg库。

NXP开源地址
https://github.com/xinyigao/x264_encode_i.MXRT1170

szjdb 发表于 2023-12-13 21:06:59

多谢硬汉哥,看了MPEG代码,软解完了是输出平面格式的YUV数据,Y/U/V分开存放,这样就不能使用您推荐ST的DMA2D函数了吧?如果逐点转换,帧率估计惨不忍睹。:handshake
https://www.armbbs.cn/forum.php?mod=viewthread&tid=93392

eric2013 发表于 2023-12-14 08:33:44

szjdb 发表于 2023-12-13 21:06
多谢硬汉哥,看了MPEG代码,软解完了是输出平面格式的YUV数据,Y/U/V分开存放,这样就不能使用您推荐ST的DM ...
不影响,常见的444,422和420都支持了。

整理了一个STM32H7的寄存器方式YCbCr转RGB函数并DMA2D到显示屏,支持采样比4:4:4,4:2:2和4:2:0
https://www.armbbs.cn/forum.php?mod=viewthread&tid=93536

szjdb 发表于 2023-12-22 17:08:17

多谢硬汉哥。
研究了手册,好像STM32 DMA2D不支持Y/U/V分开存放的平面格式,只支持如附图的紧凑格式 。而FFMPEG只能输出平面格式。这样看来就不能直接使用DMA2D了吧?之前试过在LVGL下,就算播放MJPEG视频都会拖慢LVGL控制响应速度,估计没有经过高级优化,STM32H7播放H264视频,可能有点问题了。
非常奇怪的是既然LVGL官方支持了FFMPEG库,为何找不到一个例子使用H7实现H264视频播放的?

szjdb 发表于 2023-12-22 17:14:44

还有个办法判断ST的DMA2D不能用,因为DMA2D输入参数仅有一个源地址,而YUV平面格式会有3个数组指针,这明显对不上。

eric2013 发表于 2023-12-23 08:29:51

szjdb 发表于 2023-12-22 17:14
还有个办法判断ST的DMA2D不能用,因为DMA2D输入参数仅有一个源地址,而YUV平面格式会有3个数组指针,这明显 ...

这个也没有关系的,研究下MDMA,这个是支持数据重新组合的,特别适合了这里的玩法。

实际数据的重新组合这部分代码,优化下也花不了多少时间,建议你先实际测试下,有个数据结论。

szjdb 发表于 2023-12-23 19:39:25

多谢硬汉哥, MDMAX先将数据重排,再调用DMA2D转换格式? 这个思路非常棒。 仔细看了NXP的,是直接硬算,对CPU消耗应该非常大,特别大分辨率下的。目前初步实验感觉STM32H7已经不够MJPEG+ LVGL 流畅刷新了,所以估计这也是为何在H7平台没有看到一个H264例子的原因。后面移植NXP的试试。再次多谢!
页: [1]
查看完整版本: STM32H7 LVGL 播放MPEG视频