Я пытаюсь декодировать AAC-кодированный файл, используя libfdk_aac. Файл состоит из потока необработанных пакетов AAC-LC ADTS, которые были сгенерированы с использованием libfdk_aac. Я уверен, что данные хорошо сформированы, потому что я могу воспроизвести файл с помощью 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() показывают, что внутренний буфер не получает никаких входных данных. Любые идеи о том, почему это происходит?