dsp: Refuse to initialize if there aren't any Open Sound System devices.

This prevents the dsp target from stealing the audio subsystem but not
being able to produce sound, so other audio targets further down the list
can make an attempt instead.

Thanks to Frank Praznik who did a lot of the research on this problem!
This commit is contained in:
Ryan C. Gordon 2021-03-17 13:04:05 -04:00
parent 559be8aab4
commit e7e519a466
No known key found for this signature in database
GPG Key ID: FA148B892AB48044

View File

@ -292,9 +292,24 @@ DSP_FlushCapture(_THIS)
} }
} }
static SDL_bool InitTimeDevicesExist = SDL_FALSE;
static int
look_for_devices_test(int fd)
{
InitTimeDevicesExist = SDL_TRUE; /* note that _something_ exists. */
/* Don't add to the device list, we're just seeing if any devices exist. */
return 0;
}
static int static int
DSP_Init(SDL_AudioDriverImpl * impl) DSP_Init(SDL_AudioDriverImpl * impl)
{ {
InitTimeDevicesExist = SDL_FALSE;
SDL_EnumUnixAudioDevices(0, look_for_devices_test);
if (!InitTimeDevicesExist) {
return 0; /* maybe try a different backend. */
}
/* Set the function pointers */ /* Set the function pointers */
impl->DetectDevices = DSP_DetectDevices; impl->DetectDevices = DSP_DetectDevices;
impl->OpenDevice = DSP_OpenDevice; impl->OpenDevice = DSP_OpenDevice;