X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=filter.h;h=0bd546903927d412fccef946cf8f43783ed8bc70;hp=e7dc1ca632684b928236aa9d6a7e86317c626cdf;hb=fc8dfbb416ff07cca08fbf4e13efcaa25e17cc54;hpb=7571dbdb6da9e5a9154390b899968eb44f632dec diff --git a/filter.h b/filter.h index e7dc1ca6..0bd54690 100644 --- a/filter.h +++ b/filter.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2009 Andre Noll + * Copyright (C) 2005 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -15,25 +15,20 @@ enum filter_enum {FILTER_ENUM}; struct filter_node { /** The number in the array of available filters. */ unsigned filter_num; - /** The filter chain this filter node belongs to. */ - struct filter_chain *fc; /** * Each filter may store any filter-specific information about the particular * instance of the filter here. */ void *private_data; - /** The output buffer. */ - char *buf; - /** The size of the output buffer. */ - size_t bufsize; - /** The number of bytes currently loaded in \a buf. */ - size_t loaded; /** The list of registered callbacks. */ 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; }; @@ -63,16 +58,18 @@ struct filter { /** * Open one instance of this filter. * - * This should allocate the output buffer of the given filter node and do any - * other filter-specific preparations like initializing the private_data member - * of \a fn suitably. The open function is assumed to succeed. + * This should allocate the output buffer of the given filter node and + * do any other filter-specific preparations like initializing the + * private_data member of \a fn suitably. The open function is + * optional, If it is provided, it is assumed to succeed. */ void (*open)(struct filter_node *fn); /** * Close one instance of this filter. * - * Free all resources of associated with \a fn that were previously allocated - * by the open() function. + * Free all resources associated with \a fn that were previously + * allocated by the open() function. It's OK to set this to NULL if the + * filter does not need to perform any cleanup operation. */ void (*close)(struct filter_node *fn); /** @@ -88,26 +85,48 @@ struct filter { * 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 (*pre_select)(struct sched *s, struct task *t); + /** + * Set scheduler timeout and add file descriptors to 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, void *context); /** * 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 return a negative error code. + */ + int (*post_select)(struct sched *s, void *context); + /** + * 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. */ - void (*post_select)(struct sched *s, struct task *t); btr_command_handler execute; }; 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(const char *fa, void **conf); +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); static inline void write_int16_host_endian(char *buf, int val) { @@ -122,7 +141,4 @@ 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);