]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
[filter]: Do filter conversion during post_select.
authorAndre Noll <maan@systemlinux.org>
Sun, 2 Aug 2009 13:29:47 +0000 (15:29 +0200)
committerAndre Noll <maan@systemlinux.org>
Sun, 2 Aug 2009 13:29:47 +0000 (15:29 +0200)
This is more natural and allows to get rid of the hack that
forced a minimal timout in case something was converted.

audiod.c
filter.c
filter.h
filter_common.c

index eb3b200ae6e5969be231c8be3e169d52e4430873..d39f0f57620b80f8791bd7eeca015df2af566ea7 100644 (file)
--- 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;
 
index 88141918d24e59b6df2cf27ceac4fda9778d1037..88e2336b0a4b8eed81dd38381427968329673716 100644 (file)
--- 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) {
index 0bb51f5ae1e45bcd3396a91bfbba367cbafdec9c..b877b649fd877e6efe28f89193d995ec22c40ea3 100644 (file)
--- 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)
index 1b02e1cdfbd1c106ae8ec69125af108ae24b8d8f..2fa774c0b57e614ec2e7493661d0e589e5c44d58 100644 (file)
@@ -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)