Add support for pulseaudio backend
This work is done by Nikita Krupenko which sent a patch to rdesktop in 2010 for version 1.6.0. I have now ported it over to trunk and it seems to work as expected.
This commit is contained in:
parent
8cb4149722
commit
9b98c3b229
23
configure.ac
23
configure.ac
@ -256,7 +256,7 @@ AC_DEFINE_UNQUOTED(EGD_SOCKET, "$EGD_SOCKET")
|
||||
|
||||
sound="yes"
|
||||
AC_ARG_WITH(sound,
|
||||
[ --with-sound select sound system ("oss", "sgi", "sun", "alsa" or "libao") ],
|
||||
[ --with-sound select sound system ("oss", "sgi", "sun", "alsa", "pulse" or "libao") ],
|
||||
[
|
||||
sound="$withval"
|
||||
])
|
||||
@ -272,6 +272,7 @@ AC_ARG_ENABLE(static-libsamplerate,
|
||||
|
||||
if test -n "$PKG_CONFIG"; then
|
||||
PKG_CHECK_MODULES(LIBAO, ao, [HAVE_LIBAO=1], [HAVE_LIBAO=0])
|
||||
PKG_CHECK_MODULES(PULSE, libpulse, [HAVE_PULSE=1], [HAVE_PULSE=0])
|
||||
PKG_CHECK_MODULES(ALSA, alsa, [HAVE_ALSA=1], [HAVE_ALSA=0])
|
||||
PKG_CHECK_MODULES(LIBSAMPLERATE, samplerate, [HAVE_LIBSAMPLERATE=1], [HAVE_LIBSAMPLERATE=0])
|
||||
if test x"$HAVE_LIBSAMPLERATE" = "x1"; then
|
||||
@ -316,6 +317,13 @@ case $sound in
|
||||
AC_DEFINE(RDPSND_ALSA)
|
||||
fi
|
||||
|
||||
if test x"$HAVE_PULSE" = "x1"; then
|
||||
SOUNDOBJ="$SOUNDOBJ rdpsnd_pulse.o"
|
||||
CFLAGS="$CFLAGS $PULSE_CFLAGS"
|
||||
LIBS="$LIBS $PULSE_LIBS"
|
||||
AC_DEFINE(RDPSND_PULSE)
|
||||
fi
|
||||
|
||||
if test x"$HAVE_LIBAO" = "x1"; then
|
||||
SOUNDOBJ="$SOUNDOBJ rdpsnd_libao.o"
|
||||
CFLAGS="$CFLAGS $LIBAO_CFLAGS"
|
||||
@ -364,6 +372,17 @@ case $sound in
|
||||
fi
|
||||
;;
|
||||
|
||||
pulse)
|
||||
if test x"$HAVE_PULSE" = "x1"; then
|
||||
SOUNDOBJ="$SOUNDOBJ rdpsnd_pulse.o"
|
||||
CFLAGS="$CFLAGS $PULSE_CFLAGS"
|
||||
LIBS="$LIBS $PULSE_LIBS"
|
||||
AC_DEFINE(RDPSND_PULSE)
|
||||
else
|
||||
AC_MSG_ERROR([Selected sound system is not available.])
|
||||
fi
|
||||
;;
|
||||
|
||||
libao)
|
||||
if test x"$HAVE_LIBAO" = "x1"; then
|
||||
SOUNDOBJ="$SOUNDOBJ rdpsnd_libao.o"
|
||||
@ -380,7 +399,7 @@ case $sound in
|
||||
|
||||
*)
|
||||
AC_MSG_WARN([sound support disabled])
|
||||
AC_MSG_WARN([Currently supported systems are Open Sound System (oss), SGI AL (sgi), Sun/BSD (sun), ALSA (alsa) and libao])
|
||||
AC_MSG_WARN([Currently supported systems are Open Sound System (oss), SGI AL (sgi), Sun/BSD (sun), ALSA (alsa), PulseAudio (pulse) and libao])
|
||||
;;
|
||||
esac
|
||||
|
||||
|
8
rdpsnd.c
8
rdpsnd.c
@ -3,6 +3,7 @@
|
||||
Sound Channel Process Functions
|
||||
Copyright 2006-2010 Pierre Ossman <ossman@cendio.se> for Cendio AB
|
||||
Copyright 2009-2011 Peter Astrand <astrand@cendio.se> for Cendio AB
|
||||
Copyright 2017 Henrik Andersson <hean01@cendio.se> for Cendio AB
|
||||
Copyright (C) Matthew Chapman <matthewc.unsw.edu.au> 2003-2008
|
||||
Copyright (C) GuoJunBo <guojunbo@ict.ac.cn> 2003
|
||||
|
||||
@ -119,7 +120,7 @@ rdpsnd_auto_select(void)
|
||||
current_driver->name);
|
||||
if (current_driver->wave_out_open())
|
||||
{
|
||||
logger(Sound, Debug, "rdpsnd_auto_select(), using driver '%s'",
|
||||
logger(Sound, Verbose, "rdpsnd_auto_select(), using driver '%s'",
|
||||
current_driver->name);
|
||||
current_driver->wave_out_close();
|
||||
return True;
|
||||
@ -451,6 +452,11 @@ rdpsnd_register_drivers(char *options)
|
||||
/* The order of registrations define the probe-order
|
||||
when opening the device for the first time */
|
||||
reg = &drivers;
|
||||
#if defined(RDPSND_PULSE)
|
||||
*reg = pulse_register(options);
|
||||
assert(*reg);
|
||||
reg = &((*reg)->next);
|
||||
#endif
|
||||
#if defined(RDPSND_ALSA)
|
||||
*reg = alsa_register(options);
|
||||
assert(*reg);
|
||||
|
1
rdpsnd.h
1
rdpsnd.h
@ -52,6 +52,7 @@ struct audio_driver
|
||||
};
|
||||
|
||||
/* Driver register functions */
|
||||
struct audio_driver *pulse_register(char *options);
|
||||
struct audio_driver *alsa_register(char *options);
|
||||
struct audio_driver *libao_register(char *options);
|
||||
struct audio_driver *oss_register(char *options);
|
||||
|
1382
rdpsnd_pulse.c
Normal file
1382
rdpsnd_pulse.c
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user