+++ /dev/null
-#include "para.h"
-#include "aac.h"
-#include "error.h"
-
-NeAACDecHandle aac_open(void)
-{
- NeAACDecHandle h = NeAACDecOpen();
- NeAACDecConfigurationPtr c = NeAACDecGetCurrentConfiguration(h);
-
- c->defObjectType = LC;
- c->outputFormat = FAAD_FMT_16BIT;
- c->downMatrix = 0;
- NeAACDecSetConfiguration(h, c);
- return h;
-};
-
-static int aac_read_decoder_length(unsigned char *buf, int *description_len)
-{
- uint8_t b;
- uint8_t numBytes = 0;
- uint32_t length = 0;
-
- do {
- b = buf[numBytes];
- numBytes++;
- length = (length << 7) | (b & 0x7F);
- } while
- ((b & 0x80) && numBytes < 4);
- *description_len = numBytes;
- return length;
-}
-
-int aac_find_esds(unsigned char *buf, unsigned buflen, int *skip)
-{
- int i;
-
- for (i = 0; i + 4 < buflen; i++) {
- unsigned char *p = buf + i;
- int decoder_length, description_len;
-
- if (p[0] != 'e' || p[1] != 's' || p[2] != 'd' || p[3] != 's')
- continue;
- i += 8;
- p = buf + i;
- PARA_INFO_LOG("found esds@%d, next: %x\n", i, *p);
- if (*p == 3)
- i += 8;
- else
- i += 6;
- p = buf + i;
- PARA_INFO_LOG("next: %x\n", *p);
- if (*p != 4)
- continue;
- i += 18;
- p = buf + i;
- PARA_INFO_LOG("next: %x\n", *p);
- if (*p != 5)
- continue;
- i++;
- p = buf + i;
- decoder_length = aac_read_decoder_length(p, &description_len);
- PARA_INFO_LOG("decoder length: %d\n", decoder_length);
- i += description_len;
- *skip = i;
- return decoder_length;
- }
- return -E_ESDS;
-}
-
-unsigned aac_read_int32(unsigned char *buf)
-{
- uint8_t *d = (uint8_t*)buf;
- return (d[0] << 24) | (d[1] << 16) | (d[2] << 8) | d[3];
-}
-
-
-int aac_find_stco(unsigned char *buf, unsigned buflen, int *skip)
-{
- int i, ret;
-
- for (i = 0; i + 16 < buflen; i++) {
- unsigned char *p = buf + i;
-
- if (p[0] != 's' || p[1] != 't' || p[2] != 'c' || p[3] != 'o')
- continue;
- PARA_INFO_LOG("found stco@%d\n", i);
- i += 8;
- ret = aac_read_int32(buf + i);
- i += 4;
- PARA_INFO_LOG("num entries: %d\n", ret);
- *skip = i;
- return ret;
- }
- PARA_WARNING_LOG("stco not found, buflen: %d\n", buflen);
- return -E_STCO;
-}
-
-int aac_find_stsz(unsigned char *buf, unsigned buflen, unsigned *skip)
-{
- int i, ret;
-
- for (i = 0; i + 16 < buflen; i++) {
- unsigned char *p = buf + i;
- unsigned sample_count, sample_size;
-
- if (p[0] != 's' || p[1] != 't' || p[2] != 's' || p[3] != 'z')
- continue;
- PARA_INFO_LOG("found stsz@%d\n", i);
- i += 8;
- sample_size = aac_read_int32(buf + i);
- PARA_INFO_LOG("sample size: %d\n", sample_size);
- i += 4;
- sample_count = aac_read_int32(buf + i);
- i += 4;
- PARA_INFO_LOG("sample count: %d\n", sample_count);
- *skip = i;
- return sample_count;
- }
- PARA_WARNING_LOG("stsz not found, buflen: %d\n", buflen);
- return -E_STCO;
-}
-