我的代码为什么会一直出现Fatal error decoding file
{
unsigned long samplerate, channels;
faacDecHandle hDecoder=faacDecOpen();
faacDecConfigurationPtr config=faacDecGetCurrentConfiguration(hDecoder);
faacDecSetConfiguration(hDecoder,config);
unsigned long buffercount=0 ;
if((buffercount =faacDecInit(hDecoder,p_src, &samplerate, &channels))<0)
{
fprintf(stderr, "Error initializing decoder library.\n");
}
short *sample;
sample=(short*)malloc(1024*channels*sizeof(short));
unsigned char *buffer;
buffer=(unsigned char* )malloc(768*channels*sizeof(unsigned char));
memcpy(buffer,p_src,768*channels);
unsigned long bytesconsumed,bytecount, samples, nsamples;
nsamples=0;
bytesconsumed=0;
samples=0;
bytecount=0;
int result;
do
{
if ( bytesconsumed> 0) {
memcpy(buffer,buffer+bytesconsumed,768*channels - bytesconsumed);
if ((size_src-bytecount)>bytesconsumed)
memcpy(buffer + (768*channels) - bytesconsumed, p_src+bytecount, bytesconsumed);
else
memcpy(buffer + (768*channels) - bytesconsumed, p_src+bytecount,(size_src-bytecount));
bytesconsumed = 0;
}
result = faacDecDecode(hDecoder, buffer, &bytesconsumed, sample, &samples);
if (result == FAAD_FATAL_ERROR)
fprintf(stderr, "Fatal error decoding file\n");
if (result == FAAD_ERROR)
fprintf(stderr, "Error decoding frame\n");
bytecount += bytesconsumed;
if ( samples > 0)//(result == FAAD_OK) &&
{
memcpy(p_dst+nsamples,sample,samples);
nsamples=nsamples+samples;
samples=0;
}
} while ((size_src-bytecount)>0);
*size_dst=nsamples;
}
int _tmain(int argc, _TCHAR* argv[])
{
FILE* hfile;
errno_t er = _wfopen_s( &hfile, L"E:\\tt\\aa22.aac", L"rb" );
if( er != 0 )
{
printf("open file failed.\n");
return 1;
}
FILE *outfile;
char * pcmfilename="E:\\tt\\aa22.pcm";
er=fopen_s( &outfile, pcmfilename, "wb" );
if( er != 0 )
{
fprintf(stderr, "Couldn't create output file %s\n",pcmfilename );
return 1;
}
unsigned char *buffer;
buffer = (unsigned char*)malloc(338060*sizeof(unsigned char));
memset(buffer, 0, 338060);
short *sample_Buffer;
sample_Buffer=(short*)malloc(3380600*sizeof(short));
fseek(hfile, 0, SEEK_END);
unsigned long fileread = ftell(hfile);
fseek(hfile, 0, SEEK_SET);
fread(buffer, 1,338060, hfile);
unsigned long dest_size;
faaddec(buffer,fileread,sample_Buffer,&dest_size);
cout<<"dest_size "<< dest_size;
fwrite(sample_Buffer,sizeof(short),dest_size, outfile);
fclose(hfile);
fclose(outfile);
return 0;
}
上面的代码会出现Fatal error decoding file
可是下面的代码就是正确的 请帮我分析一下
int _tmain(int argc, _TCHAR* argv[])
{
FILE* hfile;
errno_t er = _wfopen_s( &hfile, L"E:\\tt\\aa22.aac", L"rb" );
if( er != 0 )
{
printf("open file failed.\n");
return 1;
}
FILE *outfile;
char * pcmfilename="E:\\tt\\aa22.pcm";
er=fopen_s( &outfile, pcmfilename, "wb" );
if( er != 0 )
{
fprintf(stderr, "Couldn't create output file %s\n",pcmfilename );
return 1;
}
int result;
unsigned long bytesconsumed, samples, bytecount,buffercount;
unsigned char *buffer;
buffer = (unsigned char*)malloc(768*2*sizeof(unsigned char));
memset(buffer, 0, 768*2);
unsigned long samplerate, channels,fileread;
short *sample_Buffer;
sample_Buffer=(short*)malloc(1024*2*sizeof(short));
fseek(hfile, 0, SEEK_END);
fileread = ftell(hfile);
fseek(hfile, 0, SEEK_SET);
buffercount = bytecount = 0;
fread(buffer, 1, 768*2, hfile);
faacDecHandle hDecoder=faacDecOpen();
faacDecConfigurationPtr config=faacDecGetCurrentConfiguration(hDecoder);
faacDecSetConfiguration(hDecoder,config);
if((buffercount = faacDecInit(hDecoder, buffer, &samplerate, &channels)) < 0)
{
/* If some error initializing occured, skip the file */
fprintf(stderr, "Error initializing decoder library.\n");
return 1;
}
cout<<" samplerate "<<samplerate<<" channels "<<channels;
do
{
if (buffercount > 0) {
for (int k = 0; k < (768*2 - buffercount); k++)
buffer[k] = buffer[k + buffercount];
fread(buffer + (768*2) - buffercount, 1, buffercount, hfile);
buffercount = 0;
}
result = faacDecDecode(hDecoder, buffer, &bytesconsumed, sample_Buffer, &samples);
cout<<"samples "<<samples;
if (result == FAAD_FATAL_ERROR)
fprintf(stderr, "Fatal error decoding file\n");
if (result == FAAD_ERROR)
fprintf(stderr, "Error decoding frame\n");
buffercount += bytesconsumed;
bytecount += bytesconsumed;
if (bytecount >= fileread)
result = 9999;/* to make sure it stops now */
if ((result == FAAD_OK) && (samples > 0))
{
fwrite(sample_Buffer, sizeof(short), 1024*2, outfile);
}
} while (result <= FAAD_OK_CHUPDATE);
faacDecClose(hDecoder);
fclose(hfile);
fclose(outfile);
return 0;
}
相关推荐
fatal error: zmq.hpp: No such file or directory compilation terminated.
fatal error: zmq.hpp: No such file or directory compilation terminated. 找不到zmq.hpp的原因是, zmq.hpp只存在master中。 如果你使用release版本,那么是没有zmq.hpp这个文件的。去master中找到zmq.hpp。 将zmp.hpp放在当前路径下即可。或者将zmq.hpp复制到/lib 或/usr/lib中。
fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory
fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory. stdint.h是c99标准的头文件,vc不支持,所以肯定会提示“No such file or directory”的。
解决fatal error C1010 unexpected end of file while looking for precompiled header
解决报错fatal error C1010 unexpected end of file while looking for precompiled header directive
LINK : fatal error LNK1104: cannot open file "mfc42u.lib"-附件资源
LINK : fatal error LNK1104: cannot open file "mfc42u.lib"-附件资源
fatal error: boostdesc_bgm.i: No such file or directory补充文件
fatal error: boostdesc_bgm.i: No such file or directory补充文件


