X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=filter.h;h=9956619c94c7bd5a93138270491b9dfdd9bbacec;hp=70f4f4feb9873a64ac1a2263373ee123e24a1840;hb=a7a37b282c4e936b2fb34c2bd7423f9f800dfd44;hpb=2ed89c59f0efcd0a2763f47c7d3455663241e623 diff --git a/filter.h b/filter.h index 70f4f4fe..9956619c 100644 --- a/filter.h +++ b/filter.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2006 Andre Noll + * Copyright (C) 2005-2007 Andre Noll * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,71 +22,67 @@ * describes one running instance of a chain of filters * */ -struct filter_chain_info { -/** - * - * - * the number of channels of the current stream - * - * Set by the decoding filter - */ - unsigned int channels; -/** - * - * - * current samplerate in Hz - * - * Set by the decoding filter - */ - unsigned int samplerate; -/** - * - * - * the list containing all filter nodes in this filter chain - */ - struct list_head filters; -/** - * - * - * 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 *inbuf; -/** - * - * - * the output buffer of the filter chain - * - * Points to the output buffer of the last filter in the filter chain -**/ - char *outbuf; -/** - * - * - * pointer to variable containing the number of bytes loaded in the input buffer - */ - size_t *in_loaded; -/** - * - * - * pointer to variable containing the number of bytes loaded in the output buffer - */ - size_t *out_loaded; -/** - * - * - * non-zero if end of file was encountered - */ - int *eof; -/** - * - * - * non-zero if an error occured - */ - int error; +struct filter_chain { + /** + * + * + * the number of channels of the current stream + * + * Set by the decoding filter + */ + unsigned int channels; + /** + * + * + * current samplerate in Hz + * + * Set by the decoding filter + */ + unsigned int samplerate; + /** + * + * + * the list containing all filter nodes in this filter chain + */ + struct list_head filters; + /** + * + * + * 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 *inbuf; + /** + * + * + * the output buffer of the filter chain + * + * Points to the output buffer of the last filter in the filter chain + **/ + char *outbuf; + /** + * + * + * pointer to variable containing the number of bytes loaded in the input buffer + */ + size_t *in_loaded; + /** + * + * + * pointer to variable containing the number of bytes loaded in the output buffer + */ + size_t *out_loaded; + /** non-zero if this filter wont' produce any more output */ + int eof; + /** pointer to the eof flag of the receiving application */ + int *input_eof; + /** pointer to the eof flag of the writing application */ + int *output_eof; + /** the task associated with the filter chain */ + struct task task; }; /** @@ -104,7 +100,7 @@ struct filter_node { * * the filter chain this filter node belongs to */ - struct filter_chain_info *fci; + struct filter_chain *fc; /** * * @@ -212,11 +208,10 @@ struct filter_callback { }; -void close_filters(struct filter_chain_info *fci); -int filter_io(struct filter_chain_info *fci); +void close_filters(struct filter_chain *fc); void filter_init(struct filter *all_filters); int check_filter_arg(char *filter_arg, void **conf); -int del_filter_callback(struct filter_callback *fcb); +void filter_pre_select(__a_unused struct sched *s, struct task *t); /** * the structure associated with a paraslash filter @@ -304,6 +299,20 @@ void (*print_help)(void); */ void *(*parse_config)(int argc, char **argv); }; + + +static inline void write_int16_host_endian(char *buf, int val) +{ +#ifdef WORDS_BIGENDIAN + *buf = val >> 8; + *(buf + 1) = val & 0xff; +#else + *buf = val & 0xff; + *(buf + 1) = val >> 8; +#endif +} + + /** \cond */ extern struct filter filters[]; #define DECLARE_EXTERN_FILTER_INIT(name) \ @@ -330,20 +339,28 @@ DECLARE_EXTERN_FILTER_INIT(mp3dec); #define MP3DEC_FILTER #endif +#ifdef HAVE_FAAD +DECLARE_EXTERN_FILTER_INIT(aacdec); +#define AACDEC_FILTER FILTER_INIT(aacdec) +#else +#define AACDEC_FILTER +#endif + #ifdef HAVE_OGGVORBIS DECLARE_EXTERN_FILTER_INIT(oggdec); #define OGGDEC_FILTER FILTER_INIT(oggdec) #else #define OGGDEC_FILTER #endif +/** \endcond */ -/* - * a macro that defines an array of all available filters - */ -#define DEFINE_FILTER_ARRAY(fa) struct filter fa[] = { \ +/** define an array of all available filters */ +#define DEFINE_FILTER_ARRAY(filters) struct filter filters[] = { \ FILTER_INIT(wav) \ FILTER_INIT(compress) \ MP3DEC_FILTER \ + AACDEC_FILTER \ OGGDEC_FILTER \ { .name = NULL } }; -/** \endcond */ + +