Index: roard/codecfilter.c
===================================================================
--- roard/codecfilter.c	(revision 2604)
+++ roard/codecfilter.c	(revision 2679)
@@ -34,5 +34,5 @@
 
 struct roar_codecfilter g_codecfilter[] = {
- {-1,                     "null", "null codec filter", NULL, ROAR_CODECFILTER_NONE,
+ {-1,                     "null", "null codec filter", NULL, NULL, ROAR_CODECFILTER_NONE, ROAR_SUBSYS_NONE,
                                           NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
 
@@ -44,5 +44,6 @@
 */
 #ifndef ROAR_WITHOUT_CF_WAVE
- {ROAR_CODEC_RIFF_WAVE, "RIFF/WAVE", "RIFF/WAVE", NULL, ROAR_CODECFILTER_READ|ROAR_CODECFILTER_WRITE,
+ {ROAR_CODEC_RIFF_WAVE, "RIFF/WAVE", "RIFF/WAVE", NULL, NULL,
+  ROAR_CODECFILTER_READ|ROAR_CODECFILTER_WRITE, ROAR_SUBSYS_WAVEFORM,
   cf_wave_open, cf_wave_close, NULL, cf_wave_write, cf_wave_read, NULL, NULL, cf_wave_ctl},
 #endif
@@ -50,5 +51,5 @@
 
 #ifdef ROAR_SUPPORT_ALAW
- {ROAR_CODEC_ALAW, "alaw", "A-Law", NULL,
+ {ROAR_CODEC_ALAW, "alaw", "A-Law", NULL, NULL,
 #ifdef ROAR_SUPPORT_ALAW_RW
   ROAR_CODECFILTER_READ|ROAR_CODECFILTER_WRITE,
@@ -56,4 +57,5 @@
   ROAR_CODECFILTER_READ,
 #endif
+  ROAR_SUBSYS_WAVEFORM,
   cf_alaw_open, cf_alaw_close, NULL,
 #ifdef ROAR_SUPPORT_ALAW_RW
@@ -66,5 +68,5 @@
 
 #ifdef ROAR_SUPPORT_MULAW
- {ROAR_CODEC_MULAW, "mulaw", "mu-Law", NULL,
+ {ROAR_CODEC_MULAW, "mulaw", "mu-Law", NULL, NULL,
 #ifdef ROAR_SUPPORT_MULAW_RW
   ROAR_CODECFILTER_READ|ROAR_CODECFILTER_WRITE,
@@ -72,4 +74,5 @@
   ROAR_CODECFILTER_READ,
 #endif
+  ROAR_SUBSYS_WAVEFORM,
   cf_mulaw_open, cf_mulaw_close, NULL,
 #ifdef ROAR_SUPPORT_MULAW_RW
@@ -84,5 +87,5 @@
 #ifdef ROAR_HAVE_BIN_OGG123
  {ROAR_CODEC_OGG_GENERAL, "cmd",  "ogg123",
-  ROAR_HAVE_BIN_OGG123 " -q -d raw -f - -", ROAR_CODECFILTER_READ,
+  ROAR_HAVE_BIN_OGG123 " -q -d raw -f - -", NULL, ROAR_CODECFILTER_READ, ROAR_SUBSYS_WAVEFORM,
   cf_cmd_open, NULL, NULL, NULL, NULL, NULL, codecfilter_delay_fulldyn, NULL},
 #endif
@@ -90,5 +93,5 @@
 
 #ifdef ROAR_HAVE_LIBVORBISFILE
- {ROAR_CODEC_OGG_VORBIS, "oggvorbis", "Ogg Vorbis decoder", NULL,
+ {ROAR_CODEC_OGG_VORBIS, "oggvorbis", "Ogg Vorbis decoder", NULL, NULL,
 #ifdef ROAR_HAVE_LIBVORBISENC
  ROAR_CODECFILTER_READ|ROAR_CODECFILTER_WRITE,
@@ -96,4 +99,5 @@
  ROAR_CODECFILTER_READ,
 #endif
+ ROAR_SUBSYS_WAVEFORM,
  cf_vorbis_open, cf_vorbis_close, NULL, cf_vorbis_write, cf_vorbis_read, NULL, codecfilter_delay_fulldyn, cf_vorbis_ctl},
 #else
@@ -101,5 +105,5 @@
 #ifdef ROAR_HAVE_BIN_OGG123
  {ROAR_CODEC_OGG_VORBIS, "cmd",  "ogg123",
-  ROAR_HAVE_BIN_OGG123 " -q -d raw -f - -", ROAR_CODECFILTER_READ,
+  ROAR_HAVE_BIN_OGG123 " -q -d raw -f - -", NULL, ROAR_CODECFILTER_READ, ROAR_SUBSYS_WAVEFORM,
   cf_cmd_open, NULL, NULL, NULL, NULL, NULL, codecfilter_delay_fulldyn, NULL},
 #endif
@@ -109,9 +113,9 @@
 #ifdef ROAR_HAVE_LIBFISHSOUND
  {ROAR_CODEC_OGG_SPEEX, "fishsound",  "libfishsound Xiph Codec library",
-  NULL, ROAR_CODECFILTER_READ,
+  NULL, NULL, ROAR_CODECFILTER_READ, ROAR_SUBSYS_WAVEFORM,
   cf_fishsound_open, cf_fishsound_close, NULL, NULL, cf_fishsound_read, NULL, codecfilter_delay_fulldyn, NULL},
 
  {ROAR_CODEC_OGG_FLAC, "fishsound",  "libfishsound Xiph Codec library",
-  NULL, ROAR_CODECFILTER_READ,
+  NULL, NULL, ROAR_CODECFILTER_READ, ROAR_SUBSYS_WAVEFORM,
   cf_fishsound_open, cf_fishsound_close, NULL, NULL, cf_fishsound_read, NULL, codecfilter_delay_fulldyn, NULL},
 #endif
@@ -120,5 +124,5 @@
 #ifdef ROAR_HAVE_BIN_TIMIDITY
  {ROAR_CODEC_MIDI_FILE, "MIDIFILE", "timidity MIDI synth",
-  ROAR_HAVE_BIN_TIMIDITY " -Or1sl -s %R -o - -", ROAR_CODECFILTER_READ,
+  ROAR_HAVE_BIN_TIMIDITY " -Or1sl -s %R -o - -", NULL, ROAR_CODECFILTER_READ, ROAR_SUBSYS_WAVEFORM,
   cf_cmd_open, NULL, NULL, NULL, NULL, NULL, codecfilter_delay_fulldyn, NULL},
 #endif
@@ -126,10 +130,12 @@
 
 #ifdef ROAR_HAVE_LIBCELT
- {ROAR_CODEC_ROAR_CELT, "RoarCELT", "RoarAudio CELT", NULL, ROAR_CODECFILTER_READ|ROAR_CODECFILTER_WRITE,
+ {ROAR_CODEC_ROAR_CELT, "RoarCELT", "RoarAudio CELT", NULL, NULL, ROAR_CODECFILTER_READ|ROAR_CODECFILTER_WRITE,
+  ROAR_SUBSYS_WAVEFORM,
   cf_celt_open, cf_celt_close, NULL, cf_celt_write, cf_celt_read, NULL, cf_celt_delay, NULL},
 #endif
 
 #ifdef ROAR_HAVE_LIBSPEEX
- {ROAR_CODEC_ROAR_SPEEX, "RoarSpeex", "RoarAudio Speex", NULL, ROAR_CODECFILTER_READ|ROAR_CODECFILTER_WRITE,
+ {ROAR_CODEC_ROAR_SPEEX, "RoarSpeex", "RoarAudio Speex", NULL, NULL, ROAR_CODECFILTER_READ|ROAR_CODECFILTER_WRITE,
+  ROAR_SUBSYS_WAVEFORM,
   cf_speex_open, cf_speex_close, NULL, cf_speex_write, cf_speex_read, NULL, NULL, NULL},
 #endif
@@ -145,10 +151,11 @@
   "false",
 #endif
-  ROAR_CODECFILTER_READ,
+  NULL, ROAR_CODECFILTER_READ, ROAR_SUBSYS_WAVEFORM,
   cf_cmd_open, NULL, NULL, NULL, NULL, NULL, codecfilter_delay_fulldyn, NULL},
 #endif
 #endif
 
- {-1, NULL, NULL, NULL, ROAR_CODECFILTER_NONE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL} // end of list
+ {-1, NULL, NULL, NULL, NULL, ROAR_CODECFILTER_NONE, ROAR_SUBSYS_NONE,
+  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL} // end of list
 };
 
Index: roard/include/codecfilter.h
===================================================================
--- roard/include/codecfilter.h	(revision 2624)
+++ roard/include/codecfilter.h	(revision 2679)
@@ -66,5 +66,7 @@
  char * desc;
  char * options;
+ void * setup;
  int    flags;
+ unsigned int subsystems;
  int (*open )(CODECFILTER_USERDATA_T * inst, int codec,
                                              struct roar_stream_server * info,
