搜索
bottom↓
回复: 0

求助下,帮MP3解码部分哪个地方错了,

[复制链接]

出0入0汤圆

发表于 2011-3-18 13:42:24 | 显示全部楼层 |阅读模式
我是从网络收音机上面移下来的,弄到ti的芯片上

#define MP3_AUDIO_BUF_SZ    (5 * 1024)
unsigned short outBuf[MAX_NCHAN * MAX_NGRAN * MAX_NSAMP];//pcm数据
unsigned char mp3_fd_buffer[MP3_AUDIO_BUF_SZ];//mp3数据

while(1)
{
fresult = f_open(&g_sFileObject, "ai.mp3", FA_READ);
                if(fresult==FR_OK)
                {       
                                read_ptr=RT_NULL;
                                bytes_left=0;
                                bytes_left_before_decoding=0;
                                read_buffer = &mp3_fd_buffer[0];                               
                                decoder= MP3InitDecoder();
                        if(decoder!=RT_NULL)
                        {                               
                                while(1)
                                {  if(read_ptr == RT_NULL||bytes_left < 2*MAINBUF_SIZE)
                                         {
                                          bytes_to_read = (MP3_AUDIO_BUF_SZ - bytes_left) & ~(512 - 1);
                                                  f_read(&g_sFileObject,read_buffer,bytes_to_read,&bytes_read);
                                                if (bytes_read != 0)
                                                        {
                                                                read_ptr = read_buffer;
                                                                read_offset = 0;
                                                                bytes_left = bytes_left + bytes_read;                                                               
                                                        }
                                         }                                                               
                                                read_offset=MP3FindSyncWord(read_ptr, bytes_left);
                                                if(read_offset<0)
                                                {
                                                        bytes_left=0;                                       
                                                        break;
                                                }                                       
                                                        read_ptr+=read_offset;                       
                                                        bytes_left-=read_offset;
                                                        if(bytes_left<1024)
                                                        {
                                                        if(bytes_left>0)
                                                        memmove(read_buffer,read_ptr,bytes_left);
                                                        bytes_to_read = (MP3_AUDIO_BUF_SZ - bytes_left) & ~(512 - 1);
                                                f_read(&g_sFileObject,read_buffer+bytes_left,bytes_to_read,&bytes_read);
                                                                if (bytes_read != 0)
                                                                {
                                                                read_ptr = read_buffer;
                                                                read_offset = 0;
                                                                bytes_left = bytes_left + bytes_read;               
                                                                }
                                                        }                                                                         err = MP3Decode(decoder, &read_ptr,(int*)&bytes_left, (short*)outBuf, 0);   
                                        if (err != ERR_MP3_NONE)
                                                {
                                                        switch (err)
                                                        {
                                                        case ERR_MP3_MAINDATA_UNDERFLOW:
                                                /* do nothing - next call to decode will provide more mainData */
                                                       
                                                                break;
                                       
                                                        default:
                               
                                                                // skip this frame
                                                                if (bytes_left > 0)
                                                                {
                                                                        bytes_left --;
                                                                        read_ptr ++;
                                                                }                                                       
                                                                break;
                                                        }
                               
                                                        }
                                                        else{
               
                                                                MP3GetLastFrameInfo(decoder, &frame_info);
                                                               
                                                                }

                                               
                                        }
                                }
                          }
}       

第一次执行到这条语句err = MP3Decode(decoder, &read_ptr,(int*)&bytes_left, (short*)outBuf, 0);    然后产生错误ERR_MP3_MAINDATA_UNDERFLOW,循环第二次执行这个语句,产生错误ERR_MP3_INVALID_FRAMEHEADER;,然后跳出循环,谁帮我看看我缺少哪部分了,先谢过了

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 15:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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