]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
oggdec: Fix a thinko in post_select().
authorAndre Noll <maan@systemlinux.org>
Sun, 14 Feb 2010 21:58:12 +0000 (22:58 +0100)
committerAndre Noll <maan@systemlinux.org>
Sun, 14 Feb 2010 21:58:12 +0000 (22:58 +0100)
The old code broke out of the decoding loop if btr_node_status() returned zero
which is true if  no more input data is available for decoding or we already
have decoded more than 640K. However, in the first case there might still be
decoded data available to be passed to the child nodes and we should pass
that data as quick as possible to avoid buffer underruns.

So call btr_get_output_queue_size() rather than btr_node_status() to detect
the second case.

oggdec_filter.c

index f14d97c13dec8c2c3fe6660aadb5d7b6d3d2c328..2f52d4d43b759765cc786fab0930e3b0fd91dc45 100644 (file)
@@ -243,7 +243,7 @@ static void ogg_post_select(__a_unused struct sched *s, struct task *t)
                if (read_ret < 0)
                        goto out;
                btr_add_output(out, read_ret, btrn);
                if (read_ret < 0)
                        goto out;
                btr_add_output(out, read_ret, btrn);
-               if (btr_node_status(btrn, fn->min_iqs, BTR_NT_INTERNAL) == 0)
+               if (btr_get_output_queue_size(btrn) > 640 * 1024)
                        return; /* enough data for the moment */
        }
 out:
                        return; /* enough data for the moment */
        }
 out: