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 f14d97c..2f52d4d 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 (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: