X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=oggdec_filter.c;h=1a56b750a94507c67ef9e49de635b453ac313d8e;hb=d3af91481ef4a00c26530b7238552666424f0b6f;hp=4ff2aad20198edada3d56c039606834392c13d38;hpb=0113172c1f18f4a168b0a0fdacb376da2f2a73e3;p=paraslash.git diff --git a/oggdec_filter.c b/oggdec_filter.c index 4ff2aad2..1a56b750 100644 --- a/oggdec_filter.c +++ b/oggdec_filter.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2009 Andre Noll + * Copyright (C) 2005-2010 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -199,19 +199,15 @@ static void ogg_post_select(__a_unused struct sched *s, struct task *t) struct filter_node *fn = container_of(t, struct filter_node, task); struct private_oggdec_data *pod = fn->private_data; struct btr_node *btrn = fn->btrn; - size_t iqs, len; - int ret; - char *in; + int ret, ns; pod->converted = 0; t->error = 0; - ret = btr_node_status(btrn, fn->min_iqs, BTR_NT_INTERNAL); - if (ret <= 0) - goto out; - btr_merge(btrn, fn->min_iqs); - len = btr_next_buffer(btrn, &in); - iqs = btr_get_input_queue_size(btrn); + ret = ns = btr_node_status(btrn, fn->min_iqs, BTR_NT_INTERNAL); if (!pod->vf) { + if (ret <= 0) + goto out; + btr_merge(btrn, fn->min_iqs); ret = ogg_init(fn); if (ret <= 0) goto out; @@ -224,21 +220,14 @@ static void ogg_post_select(__a_unused struct sched *s, struct task *t) pod->converted = 0; if (read_ret <= 0) free(out); - if (read_ret == 0) { - if (btr_no_parent(btrn)) - ret = -E_OGGDEC_EOF; - else - ret = 0; - goto out; - } - ret = 0; - if (read_ret == OV_HOLE) + ret = ns; + if (read_ret == 0 || read_ret == OV_HOLE) goto out; ret = -E_OGGDEC_BADLINK; if (read_ret < 0) goto out; btr_add_output(out, read_ret, btrn); - if (btr_get_output_queue_size(btrn) > 640 * 1024) + if (btr_get_output_queue_size(btrn) > 128 * 1024) return; /* enough data for the moment */ } out: