--- sourceforge.net/trunk/rdesktop/rdpsnd.c 2006/09/18 21:42:50 1271 +++ sourceforge.net/trunk/rdesktop/rdpsnd.c 2006/10/19 11:27:40 1298 @@ -19,6 +19,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include + #include "rdesktop.h" #include "rdpsnd.h" #include "rdpsnd_dsp.h" @@ -276,17 +278,7 @@ } } -BOOL -rdpsnd_init(void) -{ - rdpsnd_channel = - channel_register("rdpsnd", CHANNEL_OPTION_INITIALIZED | CHANNEL_OPTION_ENCRYPT_RDP, - rdpsnd_process); - - return (rdpsnd_channel != NULL); -} - -BOOL +static BOOL rdpsnd_auto_open(void) { static BOOL failed = False; @@ -316,7 +308,7 @@ return False; } -void +static void rdpsnd_register_drivers(char *options) { struct audio_driver **reg; @@ -326,33 +318,67 @@ reg = &drivers; #if defined(RDPSND_ALSA) *reg = alsa_register(options); + assert(*reg); reg = &((*reg)->next); #endif #if defined(RDPSND_SUN) *reg = sun_register(options); + assert(*reg); reg = &((*reg)->next); #endif #if defined(RDPSND_OSS) *reg = oss_register(options); + assert(*reg); reg = &((*reg)->next); #endif #if defined(RDPSND_SGI) *reg = sgi_register(options); + assert(*reg); reg = &((*reg)->next); #endif #if defined(RDPSND_LIBAO) *reg = libao_register(options); + assert(*reg); reg = &((*reg)->next); #endif } BOOL -rdpsnd_select_driver(char *driver, char *options) +rdpsnd_init(char *optarg) { static struct audio_driver auto_driver; struct audio_driver *pos; + char *driver = NULL, *options = NULL; drivers = NULL; + + rdpsnd_channel = + channel_register("rdpsnd", CHANNEL_OPTION_INITIALIZED | CHANNEL_OPTION_ENCRYPT_RDP, + rdpsnd_process); + + if (rdpsnd_channel == NULL) + { + error("channel_register\n"); + return False; + } + + if (optarg != NULL && strlen(optarg) > 0) + { + driver = options = optarg; + + while (*options != '\0' && *options != ':') + options++; + + if (*options == ':') + { + *options = '\0'; + options++; + } + + if (*options == '\0') + options = NULL; + } + rdpsnd_register_drivers(options); if (!driver) @@ -391,13 +417,13 @@ } } -inline void +void rdpsnd_play(void) { current_driver->wave_out_play(); } -void +inline void rdpsnd_queue_write(STREAM s, uint16 tick, uint8 index) { struct audio_packet *packet = &packet_queue[queue_hi];