From 7d473d0025bc76374f55ca2b135b6e2f70ae4a1e Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Wed, 13 Jan 2010 23:31:17 +0100 Subject: [PATCH] Kill unused writer_node_group code. --- write.h | 32 ---------- write_common.c | 162 ------------------------------------------------- write_common.h | 4 -- 3 files changed, 198 deletions(-) diff --git a/write.h b/write.h index 8e244517..4a172709 100644 --- a/write.h +++ b/write.h @@ -17,12 +17,8 @@ struct writer_node { int writer_num; /** Writer-specific data. */ void *private_data; - /** Pointer to the group this node belongs to. */ - struct writer_node_group *wng; /** The writer-specific configuration of this node. */ void *conf; - /** How much of the wng's buffer is already written. */ - size_t written; struct btr_node *btrn; struct task task; size_t min_iqs; @@ -92,34 +88,6 @@ struct writer { btr_command_handler execute; }; -/** - * Describes a set of writer nodes that all write the same stream. - */ -struct writer_node_group { - /** Number of nodes belonging to this group. */ - unsigned num_writers; - /** Array of pointers to the corresponding writer nodes. */ - struct writer_node *writer_nodes; - /** Non-zero if an error or end of file was encountered by the feeding task. */ - int *input_error; - /** Current output buffer. */ - char **bufp; - /** Number of bytes loaded in the output buffer. */ - size_t *loaded; - /** Number of audio channels of the current stream. */ - unsigned int *channels; - /** Sample rate of the current stream. */ - unsigned int *samplerate; - /** The task associated to this group. */ - struct task task; - /** Whether the group is open, i.e. wng_open() was called. */ - int open; - /** Max number of bytes written in the previous post_select() call. */ - int last_written; -}; - -/** Loop over each writer node in a writer group. */ -#define FOR_EACH_WRITER_NODE(i, wng) for (i = 0; i < (wng)->num_writers; i++) /** Loop over each supported writer. */ #define FOR_EACH_WRITER(i) for (i = 0; i < NUM_SUPPORTED_WRITERS; i++) diff --git a/write_common.c b/write_common.c index 8c33b39e..b05a9e98 100644 --- a/write_common.c +++ b/write_common.c @@ -24,150 +24,6 @@ const char *writer_names[] ={WRITER_NAMES}; /** the array of supported writers */ struct writer writers[NUM_SUPPORTED_WRITERS] = {WRITER_ARRAY}; -static void wng_pre_select(struct sched *s, struct task *t) -{ - struct writer_node_group *g = container_of(t, struct writer_node_group, task); - int i; - - FOR_EACH_WRITER_NODE(i, g) { - struct writer_node *wn = &g->writer_nodes[i]; - struct writer *w = writers + wn->writer_num; - if (!w->pre_select) - continue; - t->error = w->pre_select(s, wn); - if (t->error < 0) - return; - } - /* - * Force a minimal delay if something was written during the previous - * call to wng_post_select(). This is necessary because the filter - * chain might still have data for us which it couldn't convert during - * the previous run due to its buffer size constraints. In this case we - * do not want to wait until the next input data arrives as this could - * lead to buffer underruns. - */ - if (g->last_written == 0) - return; - s->timeout.tv_sec = 0; - s->timeout.tv_usec = 1; -} - -static void wng_post_select(struct sched *s, struct task *t) -{ - struct writer_node_group *g = container_of(t, struct writer_node_group, task); - int i; - size_t min_written = 0, max_written = 0; - - FOR_EACH_WRITER_NODE(i, g) { - struct writer_node *wn = &g->writer_nodes[i]; - struct writer *w = writers + wn->writer_num; - t->error = w->post_select(s, wn); - if (t->error < 0) - return; - if (!i) - min_written = wn->written; - else - min_written = PARA_MIN(min_written, wn->written); - max_written = PARA_MAX(max_written, wn->written); - } - g->last_written = max_written; - //PARA_INFO_LOG("loaded: %zd, min_written: %zd bytes\n", *g->loaded, min_written); - if (min_written) { - *g->loaded -= min_written; - FOR_EACH_WRITER_NODE(i, g) - g->writer_nodes[i].written -= min_written; - } - if (!*g->loaded && *g->input_error) { - t->error = *g->input_error; - return; - } - if (*g->loaded && min_written) { -// PARA_INFO_LOG("moving %zd bytes\n", *g->loaded); - memmove(*g->bufp, *g->bufp + min_written, *g->loaded); - } -} - -/** - * call the open function of each writer in the group - * - * \param g the writer node group - * - * \return If at least one open function returned an error, all successful - * writer notes get closed and this error value is returned. Upon success, a - * task associated with \a g is registered to the scheduler and the function - * returns a positive value. - * */ -int wng_open(struct writer_node_group *g) -{ - int i, ret = 1; - - PARA_NOTICE_LOG("opening wng %p with %d writer(s)\n", g, g->num_writers); - FOR_EACH_WRITER_NODE(i, g) { - struct writer_node *wn = &g->writer_nodes[i]; - struct writer *w = writers + wn->writer_num; - wn->wng = g; - ret = w->open(wn); - if (ret < 0) - goto err_out; - } - sprintf(g->task.status, "%s", "writer node group"); - register_task(&g->task); - g->open = 1; - return 1; -err_out: - PARA_ERROR_LOG("%s\n", para_strerror(-ret)); - while (i > 0) { - struct writer_node *wn = &g->writer_nodes[--i]; - struct writer *w = writers + wn->writer_num; - w->close(wn); - } - free(g->writer_nodes); - g->num_writers = 0; - g->task.error = -E_TASK_UNREGISTERED; - return ret; -} - -/** - * call the close function of each writer in the given group - * - * \param g the writer node group to close - * - * This function also frees all resources of the given group. - */ -void wng_close(struct writer_node_group *g) -{ - int i; - - if (!g || !g->open) - return; - PARA_NOTICE_LOG("closing wng with %d writer(s)\n", g->num_writers); - FOR_EACH_WRITER_NODE(i, g) { - struct writer_node *wn = &g->writer_nodes[i]; - struct writer *w = writers + wn->writer_num; - w->close(wn); - } - free(g->writer_nodes); - free(g); -} - -/** - * allocate and initialize a new writer_node_group struct - * - * \param num_writers the number of writer nodes for the new group - * - * \return Pointer to the new writer node group - */ -struct writer_node_group *wng_new(unsigned num_writers) -{ - struct writer_node_group *g = para_calloc(sizeof(struct writer_node_group)); - g->num_writers = num_writers; - g->writer_nodes = para_calloc(num_writers - * sizeof(struct writer_node)); - g->task.post_select = wng_post_select; - g->task.pre_select = wng_pre_select; - return g; -} - /** * Call the init function of each supported paraslash writer. */ @@ -219,24 +75,6 @@ void *check_writer_arg(const char *wa, int *writer_num) return NULL; } -/** - * setup a writer node group with only one writer, the default writer - * - * The writer which is set up depends on the OS. It defaults to alsa for Linux, - * osx_write for OS X, file writer if neither of these is supported. - * - * \return pointer to the allocated writer node group - */ -struct writer_node_group *setup_default_wng(void) -{ - struct writer_node_group *wng = wng_new(1); - wng->writer_nodes[0].writer_num = DEFAULT_WRITER; - PARA_INFO_LOG("using default writer: %s %p\n", - writer_names[DEFAULT_WRITER], writers[DEFAULT_WRITER].parse_config); - wng->writer_nodes[0].conf = writers[DEFAULT_WRITER].parse_config(""); - return wng; -} - void register_writer_node(struct writer_node *wn, struct btr_node *parent) { struct writer *w = writers + wn->writer_num; diff --git a/write_common.h b/write_common.h index 8c33a518..44e479eb 100644 --- a/write_common.h +++ b/write_common.h @@ -6,12 +6,8 @@ /** \file write_common.h exported symbols from write_common.c */ -int wng_open(struct writer_node_group *g); -void wng_close(struct writer_node_group *g); -struct writer_node_group *wng_new(unsigned num_writers); void writer_init(void); void *check_writer_arg(const char *wa, int *writer_num); -struct writer_node_group *setup_default_wng(void); void print_writer_helps(int detailed); void register_writer_node(struct writer_node *wn, struct btr_node *parent); int setup_writer_node(const char *arg, struct btr_node *parent, -- 2.39.5