oggdec: Use local variable for the vorbis file struct.
authorAndre Noll <maan@systemlinux.org>
Mon, 7 Feb 2011 16:00:21 +0000 (17:00 +0100)
committerAndre Noll <maan@systemlinux.org>
Sun, 13 Feb 2011 22:15:23 +0000 (23:15 +0100)
This way, the read callback knows whether we are about to open the
file or not.

oggdec_filter.c

index 67cbf97..94c284a 100644 (file)
@@ -129,12 +129,12 @@ static int ogg_init(struct filter_node *fn)
        struct btr_node *btrn = fn->btrn;
        int ret, oret;
        size_t iqs;
+       struct OggVorbis_File *vf = para_malloc(sizeof(*vf));
 
-       pod->vf = para_malloc(sizeof(struct OggVorbis_File));
        PARA_NOTICE_LOG("iqs: %zu, min_iqs: %zu, opening ov callbacks\n",
                btr_get_input_queue_size(btrn), fn->min_iqs);
 open:
-       oret = ov_open_callbacks(fn, pod->vf,
+       oret = ov_open_callbacks(fn, vf,
                NULL, /* no initial buffer */
                0, /* no initial bytes */
                ovc); /* the ov_open_callbacks */
@@ -164,19 +164,19 @@ open:
        ret = -E_OGGDEC_FAULT;
        if (oret < 0)
                goto out;
-       pod->channels = ov_info(pod->vf, 0)->channels;
-       pod->sample_rate = ov_info(pod->vf, 0)->rate;
+       pod->channels = ov_info(vf, 0)->channels;
+       pod->sample_rate = ov_info(vf, 0)->rate;
        PARA_NOTICE_LOG("%d channels, %d Hz\n", pod->channels,
                pod->sample_rate);
        ret = 1;
 out:
-       if (ret <= 0) {
-               free(pod->vf);
-               pod->vf = NULL;
-       } else {
+       if (ret <= 0)
+               free(vf);
+       else {
                btr_consume(btrn, pod->converted);
                pod->converted = 0;
                fn->min_iqs = 0;
+               pod->vf = vf;
        }
        return ret;
 }