X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=aacdec_filter.c;h=5b84d07e12c4757c4393e0d5da54a3bcbed499a9;hb=d6f52cebbb178c884ba54ea782efa56a009493db;hp=5166555272c672ecda4bd4109d2e29b06b90aa4d;hpb=7e39ff04bb18e5c050e92d5047335c4f09ac9b28;p=paraslash.git diff --git a/aacdec_filter.c b/aacdec_filter.c index 51665552..5b84d07e 100644 --- a/aacdec_filter.c +++ b/aacdec_filter.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2009 Andre Noll + * Copyright (C) 2006-2010 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -23,10 +23,7 @@ #include "string.h" #include "aac.h" -/** the output buffer size */ -#define AAC_OUTBUF_SIZE (32 * 1024) - -/** give up decoding after that many errors */ +/** Give up decoding after that many errors. */ #define MAX_ERRORS 20 /** @@ -65,13 +62,13 @@ static int aacdec_execute(struct btr_node *btrn, const char *cmd, char **result) if (!strcmp(cmd, "samplerate")) { if (padd->samplerate == 0) - return -ERRNO_TO_PARA_ERROR(ENAVAIL); + return -E_BTR_NAVAIL; *result = make_message("%u", padd->samplerate); return 1; } if (!strcmp(cmd, "channels")) { if (padd->channels == 0) - return -ERRNO_TO_PARA_ERROR(ENAVAIL); + return -E_BTR_NAVAIL; *result = make_message("%u", padd->channels); return 1; } @@ -83,8 +80,6 @@ static void aacdec_open(struct filter_node *fn) struct private_aacdec_data *padd = para_calloc(sizeof(*padd)); fn->private_data = padd; - fn->bufsize = AAC_OUTBUF_SIZE; - fn->buf = para_calloc(fn->bufsize); fn->min_iqs = 2048; padd->handle = aac_open(); } @@ -94,8 +89,6 @@ static void aacdec_close(struct filter_node *fn) struct private_aacdec_data *padd = fn->private_data; NeAACDecClose(padd->handle); - free(fn->buf); - fn->buf = NULL; free(padd); fn->private_data = NULL; } @@ -119,6 +112,7 @@ next_buffer: return; btr_merge(btrn, fn->min_iqs); len = btr_next_buffer(btrn, (char **)&inbuf); + len = PARA_MIN(len, (size_t)8192); consumed = 0; iqs = btr_get_input_queue_size(btrn); if (!padd->initialized) { @@ -192,7 +186,8 @@ next_buffer: padd->frame_info.bytesconsumed); PARA_ERROR_LOG("%s\n", NeAACDecGetErrorMessage( padd->frame_info.error)); - consumed++; /* catch 21 */ + if (consumed < len) + consumed++; /* catch 21 */ goto success; } padd->error_count = 0;