client: Do not leak buffer tree node on exit.
[paraslash.git] / filter.h
index befcd3381abd539ec743bf3e28b5198d7b093b50..94657a738a4ae1b620148d28400c20ed4c27a710 100644 (file)
--- a/filter.h
+++ b/filter.h
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
  *
  * 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;
        struct list_head callbacks;
        /** A pointer to the configuration of this instance. */
        void *conf;
+       /** The buffer tree node. */
        struct btr_node *btrn;
        struct btr_node *btrn;
+       /** The task corresponding to this filter node. */
        struct task task;
        struct task task;
+       /** The minimal input queue size, see \ref btr_node_status(). */
        size_t min_iqs;
 };
 
        size_t min_iqs;
 };
 
@@ -81,19 +84,38 @@ struct filter {
         * argv. On failure, a negative paraslash error code must be returned.
         */
        int (*parse_config)(int argc, char **argv, void **config);
         * argv. On failure, a negative paraslash error code must be returned.
         */
        int (*parse_config)(int argc, char **argv, void **config);
+       /**
+        * Deallocate the memory for the configuration.
+        *
+        * This is called to free whatever ->parse_config() has allocated.
+        */
        void (*free_config)(void *conf);
 
        /** The help texts for this filter. */
        struct ggo_help help;
        void (*free_config)(void *conf);
 
        /** The help texts for this filter. */
        struct ggo_help help;
+       /**
+        * 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.
+        */
        void (*pre_select)(struct sched *s, struct task *t);
        /**
         * Convert (filter) the given data.
         *
        void (*pre_select)(struct sched *s, struct task *t);
        /**
         * Convert (filter) the given data.
         *
-        * Pointer to the converting function of the filter. It should convert as
-        * input data as possible. On errors, the post_select function is supposed
-        * to set t->error to a (negative) error code.
+        * 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.
         */
        void (*post_select)(struct sched *s, struct task *t);
         */
        void (*post_select)(struct sched *s, struct task *t);
+       /**
+        * Answer a buffer tree query.
+        *
+        * This optional function pointer is used for inter node communications
+        * of the buffer tree nodes. See \ref btr_command_handler for details.
+        */
        btr_command_handler execute;
 };
 
        btr_command_handler execute;
 };
 
@@ -101,6 +123,8 @@ 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);
 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);
+int decoder_execute(const char *cmd, unsigned sample_rate, unsigned channels,
+               char **result);
 
 static inline void write_int16_host_endian(char *buf, int val)
 {
 
 static inline void write_int16_host_endian(char *buf, int val)
 {
@@ -115,6 +139,7 @@ static inline void write_int16_host_endian(char *buf, int val)
 
 DECLARE_FILTER_INITS
 
 
 DECLARE_FILTER_INITS
 
+/** Iterate over the array of supported filters. */
 #define FOR_EACH_SUPPORTED_FILTER(j)  for (j = 0; j < NUM_SUPPORTED_FILTERS; j++)
 
 /** The filter array, one structure for each supported filter. */
 #define FOR_EACH_SUPPORTED_FILTER(j)  for (j = 0; j < NUM_SUPPORTED_FILTERS; j++)
 
 /** The filter array, one structure for each supported filter. */