]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - write_common.c
file writer pre_select() fixes.
[paraslash.git] / write_common.c
index 7c0d952108cdec23a43c3c01cfe33b9b6f37b77b..9af8d682075ccf91de2bff3ff7625ab7d9f0a598 100644 (file)
@@ -257,7 +257,7 @@ struct writer_node *setup_writer_node(const char *arg, struct btr_node *parent)
 {
        struct writer_node *wn = para_calloc(sizeof(*wn));
        struct writer *w;
-       const char *name;
+       char *name;
 
        if (arg)
                wn->conf = check_writer_arg(arg, &wn->writer_num);
@@ -270,9 +270,10 @@ struct writer_node *setup_writer_node(const char *arg, struct btr_node *parent)
                return NULL;
        }
        w = writers + wn->writer_num;
-       name = writer_names[wn->writer_num];
+       name = make_message("%s writer", writer_names[wn->writer_num]);
        wn->btrn = btr_new_node(name, parent, w->execute, wn);
-       sprintf(wn->task.status, "%s", name);
+       strcpy(wn->task.status, name);
+       free(name);
        w->open(wn);
        wn->task.post_select = w->post_select_btr;
        wn->task.pre_select = w->pre_select_btr;
@@ -303,3 +304,31 @@ void print_writer_helps(int detailed)
                ggo_print_help(&w->help, detailed);
        }
 }
+
+static int get_btr_value(struct btr_node *btrn, const char *key, int32_t *result)
+{
+       char *buf = NULL;
+       int ret = btr_exec_up(btrn, key, &buf);
+
+       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);
+}