play.c: Check whether filter ->close() is NULL.
[paraslash.git] / filter.h
index 692020c40ca80fcd7dd008d59095d7df469d9399..31eedcc044d5c1a022b8a6bb6bdd37be1c0eb116 100644 (file)
--- a/filter.h
+++ b/filter.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005 Andre Noll <maan@tuebingen.mpg.de>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -24,8 +24,11 @@ struct filter_node {
        struct list_head callbacks;
        /** A pointer to the configuration of this instance. */
        void *conf;
+       /** The buffer tree node. */
        struct btr_node *btrn;
-       struct task task;
+       /** The task corresponding to this filter node. */
+       struct task *task;
+       /** The minimal input queue size, see \ref btr_node_status(). */
        size_t min_iqs;
 };
 
@@ -93,20 +96,21 @@ struct filter {
        /**
         * Set scheduler timeout and add file descriptors to fd sets.
         *
-        * This function is used to control the timeout value for select. It
-        * only allowed to decrease the current value. The second purpose of
-        * this function is to set file descriptors to be watched by the
-        * subsequent select call to the two fd sets.
+        * This function controls the timeout value for the next call to
+        * select(2). It may decrease the current timeout but shall never
+        * increase it. The second purpose of this function is to add file
+        * descriptors to the two fd sets of the sched structure. The
+        * descriptors in these sets will be watched by the subsequent
+        * select(2) call.
         */
-       void (*pre_select)(struct sched *s, struct task *t);
+       void (*pre_select)(struct sched *s, void *context);
        /**
         * Convert (filter) the given data.
         *
         * Pointer to the converting function of the filter. On errors, the
-        * post_select function is supposed to set t->error to a (negative)
-        * error code.
+        * post_select function is supposed to return a negative error code.
         */
-       void (*post_select)(struct sched *s, struct task *t);
+       int (*post_select)(struct sched *s, void *context);
        /**
         * Answer a buffer tree query.
         *
@@ -118,8 +122,8 @@ struct filter {
 
 void filter_init(void);
 int check_filter_arg(char *filter_arg, void **conf);
-void print_filter_helps(int detailed);
-void generic_filter_pre_select(struct sched *s, struct task *t);
+void print_filter_helps(unsigned flags);
+void generic_filter_pre_select(struct sched *s, void *context);
 int decoder_execute(const char *cmd, unsigned sample_rate, unsigned channels,
                char **result);
 
@@ -136,7 +140,5 @@ static inline void write_int16_host_endian(char *buf, int val)
 
 DECLARE_FILTER_INITS
 
-#define FOR_EACH_SUPPORTED_FILTER(j)  for (j = 0; j < NUM_SUPPORTED_FILTERS; j++)
-
 /** The filter array, one structure for each supported filter. */
-extern struct filter filters[NUM_SUPPORTED_FILTERS];
+const struct filter *filter_get(int filter_num);