硬汉嵌入式论坛

 找回密码
 立即注册
查看: 776|回复: 9
收起左侧

[LVGL] STM32H7 LVGL 播放MPEG视频

[复制链接]

9

主题

85

回帖

112

积分

初级会员

积分
112
发表于 2023-12-11 22:05:54 | 显示全部楼层 |阅读模式
ERIC大神和众高手好,

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

先多谢大家!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2023-12-12 08:33:44 | 显示全部楼层
移植这个就行,是在M7内核的RT1050上实现的。

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

使用道具 举报

9

主题

85

回帖

112

积分

初级会员

积分
112
 楼主| 发表于 2023-12-12 18:06:30 | 显示全部楼层
多谢硬汉哥。
没找到NXP源码链接呢? 另外不知道能不能整合到LVGL框架。好像LVGL已经自带MPEG库了。就是没有看到朋友们在STM32上的例子。 不知道解码出来的YUV420 能不能用DMA2D转为RGB.  看过有位大神移植F4上的,YUV420是分开存储颜色通道的,不能用DMA2D.
还请大神多指导!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 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

回复

使用道具 举报

9

主题

85

回帖

112

积分

初级会员

积分
112
 楼主| 发表于 2023-12-13 21:06:59 | 显示全部楼层
多谢硬汉哥,看了MPEG代码,软解完了是输出平面格式的YUV数据,Y/U/V分开存放,这样就不能使用您推荐ST的DMA2D函数了吧?如果逐点转换,帧率估计惨不忍睹。  
https://www.armbbs.cn/forum.php?mod=viewthread&tid=93392
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 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

回复

使用道具 举报

9

主题

85

回帖

112

积分

初级会员

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

使用道具 举报

9

主题

85

回帖

112

积分

初级会员

积分
112
 楼主| 发表于 2023-12-22 17:14:44 | 显示全部楼层
还有个办法判断ST的DMA2D不能用,因为DMA2D输入参数仅有一个源地址,而YUV平面格式会有3个数组指针,这明显对不上。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2023-12-23 08:29:51 | 显示全部楼层
szjdb 发表于 2023-12-22 17:14
还有个办法判断ST的DMA2D不能用,因为DMA2D输入参数仅有一个源地址,而YUV平面格式会有3个数组指针,这明显 ...

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

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

使用道具 举报

9

主题

85

回帖

112

积分

初级会员

积分
112
 楼主| 发表于 2023-12-23 19:39:25 | 显示全部楼层
多谢硬汉哥, MDMAX先将数据重排,再调用DMA2D转换格式? 这个思路非常棒。 仔细看了NXP的,是直接硬算,对CPU消耗应该非常大,特别大分辨率下的。目前初步实验感觉STM32H7已经不够MJPEG+ LVGL 流畅刷新了,所以估计这也是为何在H7平台没有看到一个H264例子的原因。后面移植NXP的试试。再次多谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 16:13 , Processed in 0.212525 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表