打印

2440 裸奔 libmad MP3解码问题

[复制链接]
4238|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
戒指320|  楼主 | 2012-5-20 21:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 戒指320 于 2012-5-21 20:22 编辑

大家好,好久都没上过网了。
我手头上有一块tq2440开发板,最近没事就裸奔下,裸奔到iis接口那里,做了wave音频的播放。想想 arm9软解MP3应该没什么问题,于是乎 下载了libmad的源码,加入keil4工程里,有几个文件稍作了一下修改,使用minimad.c里的程序解码(这个例子里是使用操作系统的,从stdin读入数据,把解码后得到的pcm数据通过终端打印) 数组里的数据做实验。发现解码速度慢啊,我总结了下,应该是 我没使用FPM_ARM ,另外没有使用ASO_IMDCT ,
但是使用 后编译出错:
#  define mad_f_mul(x, y)  \
    ({ mad_fixed64hi_t __hi;  \
       mad_fixed64lo_t __lo;  \
       mad_fixed_t __result;  \
       asm ("smull        %0, %1, %3, %4\n\t"  \
            "movs        %0, %0, lsr %5\n\t"  \
            "adc        %2, %0, %1, lsl %6"  \
            : "=&r" (__lo), "=&r" (__hi), "=r" (__result)  \
            : "%r" (x), "r" (y),  \
              "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS)  \
            : "cc");  \
      __result;  \
    })
其中mad_fixed_t、mad_fixed64hi_t均已预定义为signed int,mad_fixed64lo_t预定义为unsigned int。
在别的C文件中使用该定义,如:
……
#  define MUL(x, y)  mad_f_mul((x), (y))
……
t59  = MUL(t16 - t17, costab2);
此处调用该头定义的部分全部报Pe029错误“Expected an Expression”。
另外一部分头定义:
#  define MAD_F_MLX(hi, lo, x, y)  \
    asm ("smull %0, %1, %2, %3"  \
         : "=&r" (lo), "=&r" (hi)  \
         : "%r" (x), "r" (y))
在调用时:
……
#  define MAD_F_ML0(hi, lo, x, y)        MAD_F_MLX((hi), (lo), (x), (y))
……
#  define ML0(hi, lo, x, y)        MAD_F_ML0((hi), (lo), (x), (y))
……
ML0(hi, lo, (*fx)[0], ptr[ 0]);
此种调用的地方全部报Pe018错误“Expected a ')'”,
imdct_l_arm.S文件也报错

找了找百度老师,大约是说 libmad是基于gcc编译的,用keil的编译器 编译有问题。
我按照arm汇编 修改了imdct_l_arm.S文件,然后 imdct_l_arm.S可以顺利编译。但是却不能解码(测试使用 FPM_DEFAULT)。至于那两个其他的编译错误我不知道怎么弄了。
坛子里有谁做过这方面的工作,能否给点意见和参考。
下面附上我的工程,请大家帮看看。

TQ2440-wk.rar

3.8 MB

相关帖子

沙发
戒指320|  楼主 | 2012-5-21 10:49 | 只看该作者
附件没传成功,晚上看能不能补上,网速慢,伤不起啊

使用特权

评论回复
板凳
戒指320|  楼主 | 2012-5-21 20:26 | 只看该作者
:)

使用特权

评论回复
地板
戒指320|  楼主 | 2012-5-24 09:01 | 只看该作者
ok  既然解决不了 暂时还是使用默认配置吧,

使用特权

评论回复
5
戒指320|  楼主 | 2012-5-29 12:58 | 只看该作者
发现解码很慢,我开了两个缓冲区,一个缓冲用于放往iis发送的数据  另一个的用来存解码后的数据,1S的音频数据需要5S左右才能解完,解码得到44.1K双声道PCM数据,这时我的Fclk设置的是406M 按理来说应该解的很顺啊。我用的时jlink 在SDRAM中仿真,跟这种仿真方式有关吗?还是直接下到falsh里再 加载到SDRAM里会快些?
求高人指点一二,不胜感激

使用特权

评论回复
6
戒指320|  楼主 | 2012-5-29 13:02 | 只看该作者
arm9不应该这么慢啊, 看别人用stm32都解的刷刷的,哪里有问题呢?

使用特权

评论回复
7
youz| | 2012-8-13 14:59 | 只看该作者
同求,我在mips上也是超级慢

使用特权

评论回复
8
youz| | 2012-8-13 15:00 | 只看该作者
配置FPM_MIPS后,gcc报asm错误,晕!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:淘宝小店: http://shop73275611.taobao.com

37

主题

290

帖子

2

粉丝