X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=aacdec.c;h=c41a5ac887e4ff6408e257d1423a74436cf5c491;hp=7ea7856fc899f3433e38acb52f5c4a82f25deb62;hb=019f1ffdacd228f6a1e701ef6795c1a65ff02785;hpb=55f0f9461990455656bef7a36b0f963e3d676653 diff --git a/aacdec.c b/aacdec.c index 7ea7856f..c41a5ac8 100644 --- a/aacdec.c +++ b/aacdec.c @@ -106,7 +106,7 @@ static ssize_t mp4dec(char *inbuffer, size_t len, struct filter_node *fn) struct filter_chain_info *fci = fn->fci; unsigned long rate = 0; unsigned char channels = 0; - int i, ret, nbytes; + int i, ret, nbytes, skip; unsigned char *p, *outbuffer; if (fn->loaded > fn->bufsize * 4 / 5) @@ -118,21 +118,22 @@ static ssize_t mp4dec(char *inbuffer, size_t len, struct filter_node *fn) padd->inbuf_len = len; if (!padd->initialized) { - int skip; padd->decoder_length = aac_find_esds(padd->inbuf, padd->inbuf_len, &skip); + PARA_INFO_LOG("decoder len: %d\n", padd->decoder_length); if (padd->decoder_length < 0) { ret = NeAACDecInit(padd->decoder, padd->inbuf, padd->inbuf_len, &rate, &channels); + PARA_INFO_LOG("decoder init: %d\n", ret); if (ret < 0) { - ret = E_AACDEC_INIT; + ret = -E_AACDEC_INIT; goto out; } padd->consumed = ret; } else { padd->consumed += skip; p = padd->inbuf + padd->consumed; - ret = E_AACDEC_INIT; + ret = -E_AACDEC_INIT; if (NeAACDecInit2(padd->decoder, p, padd->decoder_length, &rate, &channels) < 0) @@ -140,16 +141,22 @@ static ssize_t mp4dec(char *inbuffer, size_t len, struct filter_node *fn) } fci->samplerate = rate; fci->channels = channels; - PARA_INFO_LOG("rate: %u, channels: %d\n", fci->samplerate, - fci->channels); + PARA_INFO_LOG("rate: %u, channels: %d\n", + fci->samplerate, fci->channels); padd->initialized = 1; } if (padd->decoder_length > 0) { padd->consumed = 0; if (!padd->offset_pos) { - ret = len; - if (find_stco(padd) < 0) + ret = aac_find_stco(padd->inbuf + padd->consumed, + padd->inbuf_len - padd->consumed, &skip); + if (ret < 0) { + ret = len; goto out; + } + padd->noffsets = ret; + padd->offset = para_malloc(padd->noffsets * sizeof(int)); + padd->consumed += skip; } if (padd->offset_pos < padd->noffsets) { fill_offset_table(padd);