X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=flacdec_filter.c;h=16b4412152f1b6618c8cf839b57a5237615a9d7d;hb=5254df7e470dc49a29f91fa8185b98c40246f5ea;hp=01937e93f7fdbf2897e4404ffbb9e7781af392bd;hpb=76a2c8cdd49d77ab9fa0db42b0a70428fdafd0a2;p=paraslash.git diff --git a/flacdec_filter.c b/flacdec_filter.c index 01937e93..16b44121 100644 --- a/flacdec_filter.c +++ b/flacdec_filter.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2013 Andre Noll + * Copyright (C) 2011-2014 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -212,7 +212,7 @@ static bool output_queue_full(struct btr_node *btrn) static void flacdec_pre_select(struct sched *s, struct task *t) { - struct filter_node *fn = container_of(t, struct filter_node, task); + struct filter_node *fn = task_context(t); struct private_flacdec_data *pfd = fn->private_data; struct btr_node *btrn = fn->btrn; int ret; @@ -228,7 +228,7 @@ static void flacdec_pre_select(struct sched *s, struct task *t) static int flacdec_post_select(__a_unused struct sched *s, struct task *t) { - struct filter_node *fn = container_of(t, struct filter_node, task); + struct filter_node *fn = task_context(t); struct private_flacdec_data *pfd = fn->private_data; struct btr_node *btrn = fn->btrn; int ret; @@ -258,10 +258,12 @@ static int flacdec_post_select(__a_unused struct sched *s, struct task *t) goto out; if (state == FLAC__STREAM_DECODER_ABORTED) { FLAC__stream_decoder_flush(pfd->decoder); - fn->min_iqs = pfd->unconsumed + 1; + pfd->unconsumed = 0; /* feed unconsumed bytes again */ + fn->min_iqs = btr_get_input_queue_size(btrn) + 1; ret = 1; goto out; } + pfd->have_more = true; fn->min_iqs = 0; ret = 1; out: