123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- #include <memory.h>
- #include <stdlib.h>
- #include "faad.h"
- #include <stdbool.h>
- #include <string.h>
- #include <emscripten.h>
- #include <stdio.h>
- #include <sys/time.h>
- #include <sys/timeb.h>
- #include <unistd.h>
- bool hasInit = false;
- NeAACDecHandle decoder = 0;
- NeAACDecFrameInfo frame_info;
- void PrintArry(unsigned char *buffer, unsigned int size)
- {
- int i;
- char data[1024*1024];
-
- for(i = 0;i < size;i++)
- {
- data[i] = buffer[i];
- }
-
- data[i + 1] = '\0';
- }
- int init_decoder(unsigned char* inBuffer, size_t size)
- {
- unsigned char channels;
- unsigned long sampleRate;
-
- memset(&frame_info, 0, sizeof(frame_info));
- decoder = NeAACDecOpen();
- NeAACDecInit(decoder, inBuffer, size, &sampleRate, &channels);
- //printf("init_decoder初始化完毕\n");
- hasInit = true;
- return 0;
- }
- int feedData(unsigned char* out_data, unsigned char* buffer, unsigned int size)
- {
- int ret = 0;
-
- if (!hasInit)
- {
- init_decoder(buffer, size);
- }
- unsigned char *out_buffer = (unsigned char*)NeAACDecDecode(decoder, &frame_info, buffer, size);
- //printf("frame_info.error %d\n",frame_info.error);
- if (frame_info.error > 0)
- {
- return frame_info.error;
- }
- else if(out_buffer && frame_info.samples > 0)//解码成功
- {
- ret = frame_info.samples * frame_info.channels;
- for(int i = 0;i < ret;i++)
- {
- out_data[i] = out_buffer[i];
- }
- }
- return ret;
- }
- void destroyDecoder()
- {
- hasInit = false;
- NeAACDecClose(decoder);
- }
- /*bool GetFrame(FILE *file, unsigned char *input, int *len, int *pos)
- {
- int readByte;
- int frameLen = 0;
- unsigned char buffer[6];
- while ((readByte = fread(buffer, 1, 6, file)) > 0)
- {
- if ((buffer[0] == 0xff) && ((buffer[1] & 0xf0) == 0xf0))
- {
- frameLen = ((buffer[3] & 0x3) << 11) | ((buffer[4]) << 3) | ((buffer[5]) >> 5);
- printf("帧长度 %d\n", frameLen);
- *len = frameLen;
- fseek(file, *pos, SEEK_SET);
- fread(input, 1, frameLen, file);
- *pos = *pos + frameLen;
- return true;
- }
- else
- {
- printf("位置没找对\n");
- }
- }
- return false;
- }
- int main(int argc, char* argv[])
- {
- int len;
- int pos = 0;
- unsigned char buffer[4096] = {0};
- unsigned char OutBuffer[10240];
- unsigned char* pcmData = OutBuffer;
- FILE* file = fopen("test.aac", "rb");
- if(!file)
- {
- printf("找不到AAC文件\n");
- return -1;
- }
-
- outFile = fopen("shchu.pcm", "wb+");
- while (GetFrame(file, buffer, &len, &pos))
- {
- feed_data(pcmData, buffer, len);
- }
- fclose(file);
- fclose(outFile);
- destroy_decoder();
- printf("解码完毕\n");
- return 0;
- }*/
|