oggdec: Realloc buffer to save memory.
authorAndre Noll <maan@systemlinux.org>
Sun, 13 May 2012 19:54:46 +0000 (21:54 +0200)
committerAndre Noll <maan@systemlinux.org>
Mon, 28 May 2012 11:24:04 +0000 (13:24 +0200)
The ogg/vorbis decoder always allocates 32K buffers for the decoded
output data. If the buffer could not be filled completely due to
insufficient input data being available, the partially filled 32K
buffer is added to the output buffer tree.

This patch truncates (reallocates) the buffer if this has happened,
thereby reducing the memory footprint of the decoder.

oggdec_filter.c

index 77356f3..16c8d90 100644 (file)
@@ -241,9 +241,11 @@ static void ogg_post_select(__a_unused struct sched *s, struct task *t)
                have = 0;
        }
        pod->have_more = (ret > 0);
-       if (have > 0)
+       if (have > 0) {
+               if (have < OGGDEC_OUTPUT_CHUNK_SIZE)
+                       buf = para_realloc(buf, have);
                btr_add_output(buf, have, btrn);
-       else
+       else
                free(buf);
        if (ret == OV_HOLE) /* avoid buffer underruns */
                fn->min_iqs = 9000;