X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=aacdec_filter.c;h=ac8148e863d8568082dca4cb3aac68843e5893a6;hp=5b2d2a27c82d6a563025308b3a2e3c8c90929cde;hb=9bfd946422ec369c4fd91aa1c674cfb277e8cd9f;hpb=aea6128f919fcfd94be25a7859e8043b7ddf6b3e diff --git a/aacdec_filter.c b/aacdec_filter.c index 5b2d2a27..ac8148e8 100644 --- a/aacdec_filter.c +++ b/aacdec_filter.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2011 Andre Noll + * Copyright (C) 2006 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -11,7 +11,6 @@ /** \file aacdec_filter.c paraslash's aac (m4a) decoder. */ #include -#include #include "para.h" #include "list.h" @@ -81,9 +80,9 @@ static void aacdec_close(struct filter_node *fn) fn->private_data = NULL; } -static void aacdec_post_select(__a_unused struct sched *s, struct task *t) +static int aacdec_post_select(__a_unused struct sched *s, void *context) { - struct filter_node *fn = container_of(t, struct filter_node, task); + struct filter_node *fn = context; struct btr_node *btrn = fn->btrn; struct private_aacdec_data *padd = fn->private_data; int i, ret; @@ -92,12 +91,11 @@ static void aacdec_post_select(__a_unused struct sched *s, struct task *t) size_t len, skip, consumed, loaded; next_buffer: - t->error = 0; ret = btr_node_status(btrn, fn->min_iqs, BTR_NT_INTERNAL); if (ret < 0) goto err; if (ret == 0) - return; + return 0; btr_merge(btrn, fn->min_iqs); len = btr_next_buffer(btrn, (char **)&inbuf); len = PARA_MIN(len, (size_t)8192); @@ -124,7 +122,7 @@ next_buffer: ret = -E_AACDEC_INIT; if (NeAACDecInit2(padd->handle, p, padd->decoder_length, &rate, - &channels) < 0) + &channels) != 0) goto out; } padd->sample_rate = rate; @@ -167,12 +165,15 @@ next_buffer: ret = -E_AAC_DECODE; if (padd->error_count++ > MAX_ERRORS) goto err; - PARA_ERROR_LOG("frame_error: %d (%s), consumed: %zu + %zd + %lu\n", - err, NeAACDecGetErrorMessage(padd->frame_info.error), + /* Suppress non-fatal bitstream error message at BOF/EOF */ + if (len < fn->min_iqs || padd->consumed_total == 0) { + consumed = len; + goto success; + } + PARA_ERROR_LOG("%s\n", NeAACDecGetErrorMessage(err)); + PARA_ERROR_LOG("consumed: %zu + %zd + %lu\n", padd->consumed_total, consumed, padd->frame_info.bytesconsumed); - PARA_ERROR_LOG("%s\n", NeAACDecGetErrorMessage( - padd->frame_info.error)); if (consumed < len) consumed++; /* catch 21 */ goto success; @@ -201,8 +202,8 @@ out: } err: assert(ret < 0); - t->error = ret; - btr_remove_node(btrn); + btr_remove_node(&fn->btrn); + return ret; } /**