]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - write_common.c
alsa: Kill non-btr code.
[paraslash.git] / write_common.c
index ff8999f63eb8b67312db89d07688c93b404d05d0..8c33b39e08ae783f2ca19ff75f4cda37fcb0a320 100644 (file)
@@ -237,6 +237,21 @@ struct writer_node_group *setup_default_wng(void)
        return wng;
 }
 
+void register_writer_node(struct writer_node *wn, struct btr_node *parent)
+{
+       struct writer *w = writers + wn->writer_num;
+       char *name = make_message("%s writer", writer_names[wn->writer_num]);
+       int ret;
+
+       wn->btrn = btr_new_node(name, parent, w->execute, wn);
+       strcpy(wn->task.status, name);
+       free(name);
+       ret = w->open(wn);
+       wn->task.post_select = w->post_select_btr;
+       wn->task.pre_select = w->pre_select_btr;
+       register_task(&wn->task);
+}
+
 /**
  * Setup a writer node with the default writer.
  *
@@ -253,31 +268,19 @@ struct writer_node_group *setup_default_wng(void)
  *
  * \return A pointer to the allocated writer node group.
  */
-struct writer_node *setup_writer_node(const char *arg, struct btr_node *parent)
+int setup_writer_node(const char *arg, struct btr_node *parent,
+               struct writer_node *wn)
 {
-       struct writer_node *wn = para_calloc(sizeof(*wn));
-       struct writer *w;
-       const char *name;
-
        if (arg)
                wn->conf = check_writer_arg(arg, &wn->writer_num);
        else {
                wn->writer_num = DEFAULT_WRITER;
                wn->conf = writers[DEFAULT_WRITER].parse_config("");
        }
-       if (!wn->conf) {
-               free(wn);
-               return NULL;
-       }
-       w = writers + wn->writer_num;
-       name = writer_names[wn->writer_num];
-       wn->btrn = btr_new_node(name, parent, w->execute, wn);
-       sprintf(wn->task.status, "%s", name);
-       w->open(wn);
-       wn->task.post_select = w->post_select_btr;
-       wn->task.pre_select = w->pre_select_btr;
-       register_task(&wn->task);
-       return wn;
+       if (!wn->conf)
+               return -E_WRITE_COMMON_SYNTAX;
+       register_writer_node(wn, parent);
+       return 1;
 }
 
 
@@ -304,19 +307,30 @@ void print_writer_helps(int detailed)
        }
 }
 
-int prepare_writer_node(struct writer_node *wn)
+static int get_btr_value(struct btr_node *btrn, const char *key, int32_t *result)
 {
-       struct btr_node *btrn = wn->btrn;
-       size_t iqs;
+       char *buf = NULL;
+       int ret = btr_exec_up(btrn, key, &buf);
 
-       if (btr_eof(btrn))
-               return -E_WRITE_COMMON_EOF;
-       iqs = btr_get_input_queue_size(btrn);
-       if (iqs < wn->min_iqs && !btr_no_parent(btrn))
-               return 0;
-       assert(iqs != 0);
-       /* avoid "buffer too small" errors from the decoder */
-       btr_merge(btrn, wn->min_iqs);
-       return 1;
+       if (ret < 0)
+               return ret;
+       ret = para_atoi32(buf, result);
+       free(buf);
+       return ret;
 }
 
+/*
+ * Ask parent btr nodes for the samplerate of the current stream.
+ */
+int get_btr_samplerate(struct btr_node *btrn, int32_t *result)
+{
+       return get_btr_value(btrn, "samplerate", result);
+}
+
+/*
+ * Ask parent btr nodes for the channel count of the current stream.
+ */
+int get_btr_channels(struct btr_node *btrn, int32_t *result)
+{
+       return get_btr_value(btrn, "channels", result);
+}