Move chunk_queue stuff to own files chunk_queue.[ch].
[paraslash.git] / filter.h
index 2fb9ad175fbeecaf816c4707e79d2fe96091461d..9e197f6cffb1d45ee46f23f393d6f5781a168b6a 100644 (file)
--- a/filter.h
+++ b/filter.h
@@ -1,19 +1,7 @@
 /*
- * 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
- *     the Free Software Foundation; either version 2 of the License, or
- *     (at your option) any later version.
- *
- *     This program is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public License
- *     along with this program; if not, write to the Free Software
- *     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ * Licensed under the GPL v2. For licencing details see COPYING.
  */
 
 /** \file filter.h filter-related structures and exported symbols from filter_chain.c */
  * 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 +88,7 @@ struct filter_node {
  *
  * the filter chain this filter node belongs to
  */
-       struct filter_chain_info *fci;
+       struct filter_chain *fc;
 /**
  *
  *
@@ -212,11 +196,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 +287,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) \
@@ -343,15 +340,15 @@ DECLARE_EXTERN_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 */
+
+