OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5047|回复: 8

求 stm32f103 用TjpgDec解码AVI视频文件代码

[复制链接]

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2017-5-30
在线时间
14 小时
发表于 2018-8-20 12:26:15 | 显示全部楼层 |阅读模式
2金钱
一直不知问题出在哪里?资料看了很多遍了;
STM32F103 播放AVI;音频可以通过VS1003播放,视频通过TjpgDec解码,就是显示不出来
TjpgDec参考资料是针对JPG图片的,修改后一直不能播放AVI的MPEG格式视频;网上都是Libjpg移植的;有STM32F103 用TjpgDec解码 mpeg的代码请赐教一份

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2018-8-20 12:44:11 | 显示全部楼层
原子这边没有。帮顶!
回复

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2017-5-30
在线时间
14 小时
 楼主| 发表于 2018-8-20 14:49:52 | 显示全部楼层
说一下我的理解:
TjpgDec 主要修改两个入口函数,in_func(),out_func();
out_func(jd,Buff,sizeof(Buff)) 与JPG图片显示接口是一样的,所以用图片显示代码就可以;
in_func(jd,bitmap,rect) 涉及到两个变量,JDEC* jd(存放解码信息的结构体),Buff(待解码数据数组)
将AVI的视频流文件一个视频片段一次性写入Buff;
而 jd 存储的信息是以JPG文件为目标的,不能狗从AVI文件直接传入,有些需要手工添加对应解码参数;
例如已有的:
        jd->dptr = fbuf;               
        jd->pool = Work_buf;/* Work memroy */       
        jd->sz_pool = sz_wbuf;        /* Size of given work memory */

需要添加的:
jd->width=320;
jd->height=240;
等;
然后通过jd_decomp(jd,out_func,scale) 解码并调用out_func()显示每一帧图片;
通过USART设置的输出参数,能够看到 00dc,01dw交替出现,偏移量,帧尺寸;
           jd 信息和 Buff 数据的变化;但lcd依旧没有图像显示

可能问题:jd结构体的解码信息可能就不是这样传递的;
                 Buff 数组数据不正确也可能不能显示

以下是通过串口得到的JDEC 信息对比:
step 1 是初始化时的数据
step 2 是传递后的参数配置

step 1.----------------
jd->dctr = 0.
jd->dptr = 0.
jd->inbuf= 0
jd->dmsk = 0
jd->inbuf= 0.
jd->scale= 0.
jd->msx = 0.
jd->msy = 0.
qtid[3] = 0. 0. 0.
dcv[3] = 0. 0. 0.
nrst=0
jd->width = 0.
jd->height= 134422704.

huffbits[2][2]=80320b0.8000c15.0.0.
huffcode[2][2]=8.10.0.1.
huffdata[2][2]=0.0.1.60000000.
jd->qttbl[4]=47.1.11.19.
jd->workbuf=44.
jd->mcubuf=134221631.
jd->pool=76786.
jd->sz_pool=134422704.
infunction=134422704.
------------------------------------------
step 2-------------------------------
jd->dctr = 116.
jd->dptr = 536876915.
jd->inbuf= 536874984
jd->dmsk = 0
jd->inbuf= 536874984.
jd->scale= 0.
jd->msx = 2.
jd->msy = 2.
qtid[3] = 0. 1. 1.
dcv[3] = 0. 0. 0.
nrst=0
jd->width = 320.
jd->height= 240.

huffbits[2][2]=200019e8.20001a1c.20001c14.20001c48.
huffcode[2][2]=200019f8.20001a2c.20001c24.20001c58.
huffdata[2][2]=20001a10.20001b70.20001c3c.20001d9c.
jd->qttbl[4]=200017e8.200018e8.0.0.
jd->workbuf=536878656.
jd->mcubuf=536879232.
jd->pool=536879616.
jd->sz_pool=3560.

希望有研究过TjpgDec 的给个指点               
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-8-21 01:58:28 | 显示全部楼层
参考我们407的例程。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

14

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2015-4-19
在线时间
137 小时
发表于 2018-8-21 18:59:11 来自手机 | 显示全部楼层
我弄过f407的,但是tjpgd解码确实不咋地,我每次快进。的时候,不知道为什么一张图片没解码完成就退出了(现在没纠结此问题),vs1053播放音频也比较痛苦,每次才发送32个字节要多个循环等待才发送完成,效率太低(浪费时间),我证实过f407播放320*240  用vs1053播放音频才10帧左右,不同视频压缩率不同有的比较卡,有的比较快,其实tjpgd可以优化(会影响画质),我不懂JPG算法(所以不知道改),如果改了,速度可以快一点
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-8-22 01:35:13 | 显示全部楼层
电子&mcu爱好者 发表于 2018-8-21 18:59
我弄过f407的,但是tjpgd解码确实不咋地,我每次快进。的时候,不知道为什么一张图片没解码完成就退出了(现 ...

我们探索者407 解码480272,稳定在10帧没问题的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

14

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2015-4-19
在线时间
137 小时
发表于 2018-9-1 17:07:24 | 显示全部楼层
正点原子 发表于 2018-8-22 01:35
我们探索者407 解码480272,稳定在10帧没问题的。

那你优化的效率确实牛逼了
回复

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2017-5-30
在线时间
14 小时
 楼主| 发表于 2018-9-2 16:31:39 | 显示全部楼层
在自己努力下,总算搞定。看来大家都不用TjpgDec解码视频;2-3帧/秒;只为学习,无所谓速度
回复

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2017-5-30
在线时间
14 小时
 楼主| 发表于 2018-9-17 15:23:31 | 显示全部楼层
电子&mcu爱好者 发表于 2018-8-21 18:59
我弄过f407的,但是tjpgd解码确实不咋地,我每次快进。的时候,不知道为什么一张图片没解码完成就退出了(现 ...

F103,F407都试过了。F103有很多图像解码不出来,老花屏;F407还可以。F407播放240*180,如果只播放视频帧,可以到16帧/秒,再加上VS1003解码音频,只能到8帧/秒;看来VS系列都不够快;而且由于音频帧的不连贯,耳机会有哒哒声杂音;另外TJPGDEC没有用优化,只是在程序中用了个讨巧的方法,第一个视频帧经过分析,解码步骤;第二个视频帧及以后都直接解码,没有分析。因为每次解码需要的参数,算法都一样,都存贮在jd结构体中,在第二次调用前它的数据依然有效,所以免去了分析。只是重新定位数组指针:jd->dptr = fbuf;每次解码完一帧这个指针会被清零;这样每帧省了100行分析代码;但结果不明显,1小时的视频只快乐2-3秒。只是代码效率高了一些。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 20:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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