X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=filter.h;h=befcd3381abd539ec743bf3e28b5198d7b093b50;hp=6529028e1a05a1c8b1b989cab8a2ccca00940e0d;hb=2b46607651851bdf22fe989796fda95cf7b11d1a;hpb=810761a3cdf3f75dd8e07a5d903793048c36df1d diff --git a/filter.h b/filter.h index 6529028e..befcd338 100644 --- a/filter.h +++ b/filter.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2009 Andre Noll + * Copyright (C) 2005-2010 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -15,19 +15,11 @@ 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. */ @@ -37,96 +29,6 @@ struct filter_node { size_t min_iqs; }; -/** Describes one running instance of a chain of filters */ -struct filter_chain { - /** The length of the filter chain. */ - unsigned int num_filters; - /** - * The number of channels of the current stream. - * - * Set by the decoding filter. - */ - unsigned int channels; - /** - * Current sample rate in Hz. - * - * Set by the decoding filter. - */ - unsigned int samplerate; - /** The list containing all filter nodes in this filter chain. */ - struct filter_node *filter_nodes; - /** - * The input buffer of the filter chain. - * - * This is set to point to the output buffer of the receiving application (the - * buffer used to read from stdin for para_filter; the output buffer of the - * current receiver for para_audiod). - */ - char **inbufp; - /** - * The output buffer of the filter chain. - * - * Points to the output buffer of the last filter in the filter chain. - */ - char **outbufp; - /** Contains the number of bytes loaded in the input buffer. */ - size_t *in_loaded; - /** Contains the number of bytes loaded in the output buffer. */ - size_t *out_loaded; - /** Pointer to the error variable of the receiving application. */ - int *input_error; - /** Pointer to the error variable of the writing application. */ - int *output_error; - /** The task associated with the filter chain. */ - struct task task; -}; - -#define FOR_EACH_FILTER_NODE(fn, fc, i) for (i = 0; i < (fc)->num_filters \ - && (fn = (fc)->filter_nodes + i); i++) - - -/** - * Used to manage grab clients. - * - * An application using paraslash's filter subsystem may register any number of - * callbacks for each filter_node. It is possible to attach a filter callback - * while the filter is running. This is used for stream grabbing in - * para_audiod: Whenever a client sends the 'grab' command, para_audiod adds a - * filter callback to the list of callbacks for the filter node specified in - * the grab command. - */ -struct filter_callback { - /** All callbacks are organized in a doubly linked list. */ - struct list_head node; - /** - * The input callback. - * - * If not \p NULL, the filter subsystem calls this function whenever the filter - * consumed some or all of its input buffer. A pointer to the buffer of consumed - * data, its length and a pointer to the own \a filter_callback structure are passed - * to \a input_cb. The input callback is expected to return a negative value on errors. - */ - int (*input_cb)(char *buf, size_t len, struct filter_callback *fc); - /** - * The output callback. - * - * If not NULL, this is called whenever the filter produces output. A pointer - * to the output data, its length and a pointer to the own \a filter_callback - * structure are passed to \a output_cb. Like the input callback, the output - * callback is expected to return a negative value on errors. - */ - int (*output_cb)(char *buf, size_t len, struct filter_callback *fc); - /** - * The callback close function. - * - * This gets called whenever the input/output callback returned an error, or if - * the filter chain is going to be destroyed, e.g. because the end of the - * stream was encountered. It is assumed to succeed. - */ - void (*close)(struct filter_callback *fc); -}; - - /** * The structure associated with a paraslash filter. * @@ -162,7 +64,8 @@ struct filter { * Close one instance of this filter. * * Free all resources of associated with \a fn that were previously allocated - * by the open() function. + * by the open() function. It's OK to leave this alone if the filter does not + * need any cleanups. */ void (*close)(struct filter_node *fn); /**