/*
- * Copyright (C) 2005-2006 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2007 Andre Noll <maan@systemlinux.org>
*
* 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
* 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;
};
/**
*
* the filter chain this filter node belongs to
*/
- struct filter_chain_info *fci;
+ struct filter_chain *fc;
/**
*
*
};
-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
*/
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) \
#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 */
+
+