]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - filter.h
fix compress filter for big endian machines
[paraslash.git] / filter.h
index a6b390719e72d0d9b1852915b4747f9cca4cfb5a..06d727f5fe79488951d7a539b9bcd735e9fdce17 100644 (file)
--- a/filter.h
+++ b/filter.h
@@ -1,5 +1,5 @@
 /*
- * 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
@@ -75,18 +75,14 @@ struct filter_chain {
         * 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;
+       /** 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;
 };
 
 /**
@@ -213,10 +209,9 @@ struct filter_callback {
 
 
 void close_filters(struct filter_chain *fc);
-int filter_io(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, int16_t val)
+{
+#ifndef 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 +352,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 */
+
+