]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - oggdec_filter.c
Introduce filter_node->min_iqs.
[paraslash.git] / oggdec_filter.c
index fc03077bf4fc65505affd7db301f0b3dae4fd67c..274d0c2a141222dbb2022d97c9d9fbb047173528 100644 (file)
@@ -202,12 +202,19 @@ static void ogg_post_select(__a_unused struct sched *s, struct task *t)
        struct filter_node *fn = container_of(t, struct filter_node, task);
        struct private_oggdec_data *pod = fn->private_data;
        struct btr_node *btrn = fn->btrn;
-       size_t iqs = btr_get_input_queue_size(btrn);
+       size_t iqs, len;
        int ret;
+       char *in;
 
        t->error = 0;
-       if (!pod->vf && iqs) {
-               struct oggdec_filter_args_info *conf = fn->conf;
+       ret = prepare_filter_node(btrn, fn->min_iqs);
+       if (ret < 0)
+               goto err;
+       if (ret == 0)
+               return;
+       len = btr_next_buffer(btrn, &in);
+       iqs = btr_get_input_queue_size(btrn);
+       if (!pod->vf) {
                int oret;
 
                pod->vf = para_malloc(sizeof(struct OggVorbis_File));
@@ -218,10 +225,10 @@ static void ogg_post_select(__a_unused struct sched *s, struct task *t)
                        ovc); /* the ov_open_callbacks */
                if (oret == OV_ENOTVORBIS || oret == OV_EBADHEADER) {
                        /* this might be due to the input buffer being too small */
-                       int ib = 1024 * conf->initial_buffer_arg; /* initial buffer */
-                       if (iqs < ib) {
+                       if (!btr_no_parent(btrn)) {
                                free(pod->vf);
                                pod->vf = NULL;
+                               fn->min_iqs = iqs + 1;
                                return;
                        }
                        ret = (oret == OV_ENOTVORBIS)?