From: Andre Noll Date: Sun, 2 Aug 2009 13:29:47 +0000 (+0200) Subject: [filter]: Do filter conversion during post_select. X-Git-Tag: v0.3.5~15^2 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=f42f8143f383b82e1672b2cecf987dc5b9b23c64 [filter]: Do filter conversion during post_select. This is more natural and allows to get rid of the hack that forced a minimal timout in case something was converted. --- diff --git a/audiod.c b/audiod.c index eb3b200a..d39f0f57 100644 --- a/audiod.c +++ b/audiod.c @@ -385,8 +385,8 @@ static void open_filters(int slot_num) s->fc->inbufp = &s->receiver_node->buf; s->fc->in_loaded = &s->receiver_node->loaded; s->fc->input_error = &s->receiver_node->task.error; - s->fc->task.pre_select = filter_pre_select; - s->fc->task.post_select = NULL; + s->fc->task.pre_select = NULL; + s->fc->task.post_select = filter_post_select; s->fc->task.error = 0; s->fc->num_filters = nf; diff --git a/filter.c b/filter.c index 88141918..88e2336b 100644 --- a/filter.c +++ b/filter.c @@ -84,7 +84,7 @@ static int init_filter_chain(void) fc->input_error = &sit->task.error; fc->task.error = 0; fc->output_error = &sot->task.error; - fc->task.pre_select = filter_pre_select; + fc->task.post_select = filter_post_select; sprintf(fc->task.status, "filter chain"); FOR_EACH_FILTER_NODE(fn, fc, i) { diff --git a/filter.h b/filter.h index 0bb51f5a..b877b649 100644 --- a/filter.h +++ b/filter.h @@ -204,7 +204,7 @@ struct filter { void close_filters(struct filter_chain *fc); void filter_init(void); int check_filter_arg(char *filter_arg, void **conf); -void filter_pre_select(__a_unused struct sched *s, struct task *t); +void filter_post_select(__a_unused struct sched *s, struct task *t); void print_filter_helps(int detailed); static inline void write_int16_host_endian(char *buf, int val) diff --git a/filter_common.c b/filter_common.c index 1b02e1cd..2fa774c0 100644 --- a/filter_common.c +++ b/filter_common.c @@ -105,7 +105,7 @@ static void call_callbacks(struct filter_node *fn, char *inbuf, size_t inlen, * * \sa filter_node, filter#convert, filter_callback. */ -void filter_pre_select(__a_unused struct sched *s, struct task *t) +void filter_post_select(__a_unused struct sched *s, struct task *t) { struct filter_chain *fc = container_of(t, struct filter_chain, task); struct filter_node *fn; @@ -142,19 +142,6 @@ again: conv_total += conv; if (conv) goto again; - if (conv_total) { - /* - * Other pre_select functions might have already been called by - * now and decided to do nothing, e.g. because their output - * buffer was full or the input buffer was empty. We just - * converted something which caused these buffers to change but - * we can't make the other tasks reconsider their decision at - * this point. So force a minimal timeout for the next select - * call to avoid unnecessary delays. - */ - s->timeout.tv_sec = 0; - s->timeout.tv_usec = 1; - } if (*fc->input_error >= 0) return; if (*fc->out_loaded)