--- sourceforge.net/trunk/rdesktop/rdpsnd_libao.c 2006/09/17 11:04:50 1255 +++ sourceforge.net/trunk/rdesktop/rdpsnd_libao.c 2006/09/18 09:28:42 1267 @@ -22,6 +22,7 @@ #include "rdesktop.h" #include "rdpsnd.h" +#include "rdpsnd_dsp.h" #include #include #include @@ -42,16 +43,17 @@ libao_open(void) { ao_sample_format format; - static int warned = 0; - if (!warned && libao_device) + ao_initialize(); + + if (libao_device) { - warning("device-options not supported for libao-driver\n"); - warned = 1; + default_driver = ao_driver_id(libao_device); + } + else + { + default_driver = ao_default_driver_id(); } - - ao_initialize(); - default_driver = ao_default_driver_id(); format.bits = 16; format.channels = 2; @@ -137,12 +139,6 @@ } void -libao_volume(uint16 left, uint16 right) -{ - warning("volume changes not supported with libao-output\n"); -} - -void libao_play(void) { struct audio_packet *packet; @@ -234,22 +230,29 @@ return; } -static struct audio_driver libao_driver = { - wave_out_write:rdpsnd_queue_write, - wave_out_open:libao_open, - wave_out_close:libao_close, - wave_out_format_supported:libao_format_supported, - wave_out_set_format:libao_set_format, - wave_out_volume:libao_volume, - wave_out_play:libao_play, - name:"libao", - description:"libao output driver", - next:NULL, -}; - struct audio_driver * libao_register(char *options) { + static struct audio_driver libao_driver; + static char description[101]; + + libao_driver.wave_out_write = rdpsnd_queue_write; + libao_driver.wave_out_open = libao_open; + libao_driver.wave_out_close = libao_close; + libao_driver.wave_out_format_supported = libao_format_supported; + libao_driver.wave_out_set_format = libao_set_format; + libao_driver.wave_out_volume = rdpsnd_dsp_softvol_set; + libao_driver.wave_out_play = libao_play; + libao_driver.name = xstrdup("libao"); + libao_driver.description = description; + libao_driver.need_byteswap_on_be = 0; + libao_driver.next = NULL; + + ao_initialize(); + snprintf(description, 100, "libao output driver, default device: %s", + ao_driver_info(ao_default_driver_id())->short_name); + ao_shutdown(); + if (options) { libao_device = xstrdup(options);