cgbhwl 发表于 2011-3-18 13:42:24

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

我是从网络收音机上面移下来的,弄到ti的芯片上

#define MP3_AUDIO_BUF_SZ    (5 * 1024)
unsigned short outBuf;//pcm数据
unsigned char mp3_fd_buffer;//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;                               
                                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;,然后跳出循环,谁帮我看看我缺少哪部分了,先谢过了
页: [1]
查看完整版本: 求助下,帮MP3解码部分哪个地方错了,