diff --git a/src/audio.h b/src/audio.h index 229d7bd..8236e2a 100644 --- a/src/audio.h +++ b/src/audio.h @@ -17,6 +17,8 @@ * along with Moonlight; if not, see . */ +#include + #include "limelight-common/Limelight.h" extern const char* audio_device; @@ -27,4 +29,5 @@ extern AUDIO_RENDERER_CALLBACKS audio_callbacks_sdl; #endif #ifdef HAVE_PULSE extern AUDIO_RENDERER_CALLBACKS audio_callbacks_pulse; +bool audio_pulse_init(); #endif diff --git a/src/audio/pulse.c b/src/audio/pulse.c index af9a1e9..bcb92aa 100644 --- a/src/audio/pulse.c +++ b/src/audio/pulse.c @@ -34,6 +34,22 @@ static pa_simple *dev = NULL; static short pcmBuffer[FRAME_SIZE * MAX_CHANNEL_COUNT]; static int channelCount; +bool audio_pulse_init() { + pa_sample_spec spec = { + .format = PA_SAMPLE_S16LE, + .rate = 44000, + .channels = 2 + }; + + int error; + dev = pa_simple_new(NULL, "Moonlight Embedded", PA_STREAM_PLAYBACK, NULL, "Streaming", &spec, NULL, NULL, &error); + if (dev) { + pa_simple_free(dev); + return true; + } else + return false; +} + static void pulse_renderer_init(int audioConfiguration, POPUS_MULTISTREAM_CONFIGURATION opusConfig) { int rc, error; unsigned char alsaMapping[6]; diff --git a/src/platform.c b/src/platform.c index 2278042..3d4a81f 100644 --- a/src/platform.c +++ b/src/platform.c @@ -89,7 +89,8 @@ AUDIO_RENDERER_CALLBACKS* platform_get_audio(enum platform system) { #endif default: #ifdef HAVE_PULSE - return &audio_callbacks_pulse; + if (audio_pulse_init()) + return &audio_callbacks_pulse; #endif return &audio_callbacks_alsa; }