--- sourceforge.net/trunk/rdesktop/rdpsnd_libao.c 2006/09/17 11:42:22 1256 +++ sourceforge.net/trunk/rdesktop/rdpsnd_libao.c 2006/09/18 09:27:58 1266 @@ -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; @@ -238,18 +234,24 @@ 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 = libao_volume; + libao_driver.wave_out_volume = rdpsnd_dsp_softvol_set; libao_driver.wave_out_play = libao_play; libao_driver.name = xstrdup("libao"); - libao_driver.description = xstrdup("libao output driver"); + 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);