X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=write_common.c;h=9af8d682075ccf91de2bff3ff7625ab7d9f0a598;hp=ff8999f63eb8b67312db89d07688c93b404d05d0;hb=b71a84c94992821c4bd70f80a2fdb3d4e9a39a62;hpb=03683166610b241183b3cdb311069c96144fa53e diff --git a/write_common.c b/write_common.c index ff8999f6..9af8d682 100644 --- a/write_common.c +++ b/write_common.c @@ -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; @@ -304,19 +305,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); +}