2
libfdk_aac을 사용하여 AAC로 인코딩 된 파일을 디코딩하려고합니다. 이 파일은 libfdk_aac을 사용하여 생성 된 원시 AAC-LC ADTS 패킷의 스트림으로 구성됩니다. VLC와 Window Media Player를 사용하여 파일을 재생할 수 있기 때문에 데이터가 잘 형성되었다고 확신합니다.libfdk_aac이 버퍼로 읽지 않습니다.
UCHAR* inputBuffer = new UCHAR[ 2048 ] ;
UINT bufSize[] = { 0 } ;
INT_PCM* outputBuffer = new INT_PCM[ 4096 ] ;
int outputbufSize = 8192 ;
UINT flags = 0 ;
//Set up the Audio Specific Config
UCHAR* asc = new UCHAR[ 2 ] ;
asc[ 0 ] = (UCHAR) 0x11 ;
asc[ 1 ] = (UCHAR) 0x90 ;
UINT ascSize[] = { 2 } ;
HANDLE_DECODER decoder = aacDecoder_Open(TT_MP4_ADTS, 1) ;
AAC_DECODER_ERROR aacError = aacDecoder_ConfigRaw(decoder, &asc, ascSize) ;
if(aacError)
{
printf("Configure error\n") ;
exit(-1) ;
}
int dataAvailable = 1 ;
do
{
//Reads the file and gets the next ADTS packet with one AAC frame
unsigned int adtsPacketSize ;
dataAvailable = readMPEGFile(filePtr, inputBuffer, &adtsPacketSize) ;
bufSize[ 0 ] = adtsPacketSize ;
aacError = aacDecoder_Fill(decoder, &inputBuffer, bufSize, &bytesValid) ;
//Check to see if bytesValid == 0
//If bytesValid > 0, keep calling aacDecoder_Fill()
//If bytesValid == 0, decode audio
aacError = aacDecoder_DecodeFrame(decoder, outputBuffer, outputBufSize, flags) ;
//If no error, write raw PCM data to file.
}while(dataAvailable) ;
문제는 aacDecoder_DecodeFrame가 AAC_DEC_NOT_ENOUGH_BITS으로 돌아가 계속한다는 것입니다 :
여기 내 설정이다. aacDecoder_GetFreeBytes()를 호출하면 내부 버퍼가 입력 데이터를 얻지 못하고 있음을 알 수 있습니다. 왜 이런 일이 일어나고 있는지에 대한 아이디어가 있습니까?