]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
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 77356f320414a5c3be009a017612a2a3bbd21b33..16c8d907f01fab92fa6c1c74435920448da5349f 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;