Index: include/roaraudio/audio.h
===================================================================
--- include/roaraudio/audio.h	(revision 2398)
+++ include/roaraudio/audio.h	(revision 2681)
@@ -62,4 +62,5 @@
       0101 0x15 -> Ogg General
       0110 0x16 -> Ogg CELT
+      0111 0x17 -> Ogg
       [...]
       **** 0x1a -> ROAR CELT
@@ -158,4 +159,6 @@
 #define ROAR_CODEC_OGG_FLAC     0x14
 #define ROAR_CODEC_OGG_GENERAL  0x15
+#define ROAR_CODEC_OGG_CELT     0x16
+#define ROAR_CODEC_OGG          0x17
 
 #define ROAR_CODEC_ROAR_CELT    0x1a
Index: include/roaraudio/misc.h
===================================================================
--- include/roaraudio/misc.h	(revision 2419)
+++ include/roaraudio/misc.h	(revision 2681)
@@ -29,5 +29,12 @@
 #define _ROARAUDIO_MISC_H_
 
-#define ROAR_LIGHT_BITS   8
+// light:
+#define ROAR_LIGHT_BITS       8
+
+// complex:
+#define ROAR_COMPLEX_RATE     0
+#define ROAR_COMPLEX_BITS     0
+#define ROAR_COMPLEX_CHANNELS 0
+#define ROAR_COMPLEX_CODEC    ROAR_CODEC_RAUM
 
 #endif
Index: include/roaraudio/stream.h
===================================================================
--- include/roaraudio/stream.h	(revision 2231)
+++ include/roaraudio/stream.h	(revision 2681)
@@ -57,5 +57,8 @@
 #define ROAR_DIR_RAW_OUT    17
 
-#define ROAR_DIR_DIRIDS     18
+#define ROAR_DIR_COMPLEX_IN  18
+#define ROAR_DIR_COMPLEX_OUT 19
+
+#define ROAR_DIR_DIRIDS     20
 
 
Index: libroar/stream.c
===================================================================
--- libroar/stream.c	(revision 2633)
+++ libroar/stream.c	(revision 2681)
@@ -554,21 +554,23 @@
  char * name;
 } _libroar_dir[] = {
- {ROAR_DIR_PLAY,      "play"     },
- {ROAR_DIR_RECORD,    "record"   },
- {ROAR_DIR_MONITOR,   "monitor"  },
- {ROAR_DIR_FILTER,    "filter"   },
- {ROAR_DIR_OUTPUT,    "output"   },
- {ROAR_DIR_MIXING,    "mixing"   },
- {ROAR_DIR_META,      "meta"     },
- {ROAR_DIR_BIDIR,     "bidir"    },
- {ROAR_DIR_THRU,      "thru"     },
- {ROAR_DIR_BRIDGE,    "bridge"   },
- {ROAR_DIR_MIDI_IN,   "midi_in"  },
- {ROAR_DIR_MIDI_OUT,  "midi_out" },
- {ROAR_DIR_LIGHT_IN,  "light_in" },
- {ROAR_DIR_LIGHT_OUT, "light_out"},
- {ROAR_DIR_RAW_IN,    "raw_in"   },
- {ROAR_DIR_RAW_OUT,   "raw_out"  },
- {-1,                 "unknown"  }
+ {ROAR_DIR_PLAY,        "play"       },
+ {ROAR_DIR_RECORD,      "record"     },
+ {ROAR_DIR_MONITOR,     "monitor"    },
+ {ROAR_DIR_FILTER,      "filter"     },
+ {ROAR_DIR_OUTPUT,      "output"     },
+ {ROAR_DIR_MIXING,      "mixing"     },
+ {ROAR_DIR_META,        "meta"       },
+ {ROAR_DIR_BIDIR,       "bidir"      },
+ {ROAR_DIR_THRU,        "thru"       },
+ {ROAR_DIR_BRIDGE,      "bridge"     },
+ {ROAR_DIR_MIDI_IN,     "midi_in"    },
+ {ROAR_DIR_MIDI_OUT,    "midi_out"   },
+ {ROAR_DIR_LIGHT_IN,    "light_in"   },
+ {ROAR_DIR_LIGHT_OUT,   "light_out"  },
+ {ROAR_DIR_RAW_IN,      "raw_in"     },
+ {ROAR_DIR_RAW_OUT,     "raw_out"    },
+ {ROAR_DIR_COMPLEX_IN,  "complex_in" },
+ {ROAR_DIR_COMPLEX_OUT, "complex_out"},
+ {-1,                   "unknown"    }
 };
 
@@ -628,4 +630,6 @@
  {ROAR_CODEC_OGG_FLAC,    "ogg_flac"   },
  {ROAR_CODEC_OGG_GENERAL, "ogg_general"},
+ {ROAR_CODEC_OGG_CELT,    "ogg_celt"   },
+ {ROAR_CODEC_OGG,         "ogg"        },
  {ROAR_CODEC_ROAR_CELT,   "roar_celt"  },
  {ROAR_CODEC_ROAR_SPEEX,  "roar_speex" },
Index: roarclients/roarcat.c
===================================================================
--- roarclients/roarcat.c	(revision 2646)
+++ roarclients/roarcat.c	(revision 2681)
@@ -41,4 +41,5 @@
         "  --light               - Use light control input\n"
         "  --raw                 - Use raw input\n"
+        "  --complex             - Use complex input\n"
         "  --rel-id ID           - Set ID of relative stream\n"
         "  --help                - Show this help\n"
@@ -101,4 +102,6 @@
   } else if ( !strcmp(k, "--raw") ) {
    dir   = ROAR_DIR_RAW_IN;
+  } else if ( !strcmp(k, "--complex") ) {
+   dir   = ROAR_DIR_COMPLEX_IN;
 
   } else if ( !strcmp(k, "--rel-id") ) {
@@ -140,4 +143,10 @@
     if ( codec    == -1 ) codec    = ROAR_CODEC_DMX512;
    break;
+  case ROAR_DIR_COMPLEX_IN:
+    if ( rate     == -1 ) rate     = ROAR_COMPLEX_RATE;
+    if ( bits     == -1 ) bits     = ROAR_COMPLEX_BITS;
+    if ( channels == -1 ) channels = ROAR_COMPLEX_CHANNELS;
+    if ( codec    == -1 ) codec    = ROAR_COMPLEX_CODEC;
+   break;
   case ROAR_DIR_RAW_IN:
   default:
Index: roarclients/roarmon.c
===================================================================
--- roarclients/roarmon.c	(revision 2420)
+++ roarclients/roarmon.c	(revision 2681)
@@ -41,4 +41,5 @@
         "  --light              - Output light control\n"
         "  --raw                - Output raw data\n"
+        "  --complex            - Output complex data\n"
         "  --thru               - Output copy of other stream\n"
         "  --rel-id ID          - Set ID of relative stream\n"
@@ -101,4 +102,6 @@
   } else if ( !strcmp(k, "--raw") ) {
    dir   = ROAR_DIR_RAW_OUT;
+  } else if ( !strcmp(k, "--complex") ) {
+   dir   = ROAR_DIR_COMPLEX_OUT;
   } else if ( !strcmp(k, "--thru") ) {
    dir   = ROAR_DIR_THRU;
@@ -141,4 +144,10 @@
     if ( codec    == -1 ) codec    = ROAR_CODEC_DMX512;
    break;
+  case ROAR_DIR_COMPLEX_IN:
+    if ( rate     == -1 ) rate     = ROAR_COMPLEX_RATE;
+    if ( bits     == -1 ) bits     = ROAR_COMPLEX_BITS;
+    if ( channels == -1 ) channels = ROAR_COMPLEX_CHANNELS;
+    if ( codec    == -1 ) codec    = ROAR_COMPLEX_CODEC;
+   break;
   case ROAR_DIR_RAW_OUT:
   case ROAR_DIR_THRU:
Index: roard/codecfilter.c
===================================================================
--- roard/codecfilter.c	(revision 2680)
+++ roard/codecfilter.c	(revision 2681)
@@ -184,4 +184,6 @@
   if ( g_codecfilter[i].subsystems & ROAR_SUBSYS_RAW )
    subsys[4] = 'R';
+  if ( g_codecfilter[i].subsystems & ROAR_SUBSYS_COMPLEX )
+   subsys[5] = 'X';
 
   flags = g_codecfilter[i].flags;
Index: roard/driver.c
===================================================================
--- roard/driver.c	(revision 2508)
+++ roard/driver.c	(revision 2681)
@@ -33,9 +33,9 @@
 #endif
  { "roar", "RoarAudio driver", "localhost, remote.host.dom", DRV_FLAG_NONE,
-   ROAR_SUBSYS_WAVEFORM|ROAR_SUBSYS_MIDI|ROAR_SUBSYS_LIGHT,
+   ROAR_SUBSYS_WAVEFORM|ROAR_SUBSYS_MIDI|ROAR_SUBSYS_LIGHT|ROAR_SUBSYS_COMPLEX,
    NULL, driver_roar_close, driver_roar_open_vio},
 #ifdef ROAR_HAVE_IO_POSIX
  { "raw",  "RAW PCM driver", "/some/file", DRV_FLAG_FHSEC,
-   ROAR_SUBSYS_WAVEFORM|ROAR_SUBSYS_MIDI|ROAR_SUBSYS_LIGHT|ROAR_SUBSYS_RAW,
+   ROAR_SUBSYS_WAVEFORM|ROAR_SUBSYS_MIDI|ROAR_SUBSYS_LIGHT|ROAR_SUBSYS_RAW|ROAR_SUBSYS_COMPLEX,
    NULL, NULL, driver_raw_open_vio},
 #endif
@@ -98,4 +98,6 @@
   if ( g_driver[i].subsystems & ROAR_SUBSYS_RAW )
    subsys[4] = 'R';
+  if ( g_driver[i].subsystems & ROAR_SUBSYS_COMPLEX )
+   subsys[5] = 'X';
 
   printf("  %-9s %c%c%c %6s - %s (devices: %s)\n", g_driver[i].name,
Index: roard/driver_roar.c
===================================================================
--- roard/driver_roar.c	(revision 2508)
+++ roard/driver_roar.c	(revision 2681)
@@ -34,9 +34,10 @@
  if ( sstream != NULL ) {
   switch (ROAR_STREAM(sstream)->dir) {
-   case ROAR_DIR_OUTPUT:    dir = ROAR_DIR_PLAY;     break;
-   case ROAR_DIR_MIDI_OUT:  dir = ROAR_DIR_MIDI_IN;  break;
-   case ROAR_DIR_LIGHT_OUT: dir = ROAR_DIR_LIGHT_IN; break;
+   case ROAR_DIR_OUTPUT:      dir = ROAR_DIR_PLAY;       break;
+   case ROAR_DIR_MIDI_OUT:    dir = ROAR_DIR_MIDI_IN;    break;
+   case ROAR_DIR_LIGHT_OUT:   dir = ROAR_DIR_LIGHT_IN;   break;
 // TODO: we need to know a real pos id for raw streams...
 //   case ROAR_DIR_RAW_OUT:   dir = ROAR_DIR_RAW_IN;   break;
+   case ROAR_DIR_COMPLEX_OUT: dir = ROAR_DIR_COMPLEX_IN; break;
    default:
      return -1;
Index: roard/include/roard.h
===================================================================
--- roard/include/roard.h	(revision 2674)
+++ roard/include/roard.h	(revision 2681)
@@ -70,4 +70,5 @@
 #define ROAR_SUBSYS_LIGHT         0x08
 #define ROAR_SUBSYS_RAW           0x10
+#define ROAR_SUBSYS_COMPLEX       0x20
 
 // some usefull macros:
Index: roard/req.c
===================================================================
--- roard/req.c	(revision 2630)
+++ roard/req.c	(revision 2681)
@@ -23,4 +23,5 @@
  */
 
+#define DEBUG
 #include "roard.h"
 
Index: roard/roard.c
===================================================================
--- roard/roard.c	(revision 2584)
+++ roard/roard.c	(revision 2681)
@@ -501,4 +501,6 @@
     dir = ROAR_DIR_RAW_OUT;
 #endif
+   } else if ( !strcasecmp(v, "complex") ) {
+    dir = ROAR_DIR_COMPLEX_OUT;
    } else {
     ROAR_ERR("add_output(*): unknown/unsupported subsystem '%s'", k);
Index: roard/sources.c
===================================================================
--- roard/sources.c	(revision 2507)
+++ roard/sources.c	(revision 2681)
@@ -65,4 +65,6 @@
   if ( g_source[i].subsystems & ROAR_SUBSYS_RAW )
    subsys[4] = 'R';
+  if ( g_source[i].subsystems & ROAR_SUBSYS_COMPLEX )
+   subsys[5] = 'X';
 
   printf("  %-9s %c%c%c %6s - %s (devices: %s)\n", g_source[i].name,
Index: roard/streams.c
===================================================================
--- roard/streams.c	(revision 2635)
+++ roard/streams.c	(revision 2681)
@@ -340,4 +340,8 @@
     return ROAR_SUBSYS_RAW;
    break;
+  case ROAR_DIR_COMPLEX_IN:
+  case ROAR_DIR_COMPLEX_OUT:
+    return ROAR_SUBSYS_COMPLEX;
+   break;
   case ROAR_DIR_THRU:
     return streams_get_subsys(ROAR_STREAM(ss)->pos_rel_id);
