parent
37aecda2c1
commit
fff34f6304
|
@ -45,15 +45,6 @@
|
||||||
#define AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM 0x80000000
|
#define AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM 0x80000000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This is a list of device id strings we have inflight, so we have consistent pointers to the same device. */
|
|
||||||
typedef struct DevIdList
|
|
||||||
{
|
|
||||||
WCHAR *str;
|
|
||||||
struct DevIdList *next;
|
|
||||||
} DevIdList;
|
|
||||||
|
|
||||||
static DevIdList *deviceid_list = NULL;
|
|
||||||
|
|
||||||
/* Some GUIDs we need to know without linking to libraries that aren't available before Vista. */
|
/* Some GUIDs we need to know without linking to libraries that aren't available before Vista. */
|
||||||
static const IID SDL_IID_IAudioRenderClient = { 0xf294acfc, 0x3146, 0x4483,{ 0xa7, 0xbf, 0xad, 0xdc, 0xa7, 0xc2, 0x60, 0xe2 } };
|
static const IID SDL_IID_IAudioRenderClient = { 0xf294acfc, 0x3146, 0x4483,{ 0xa7, 0xbf, 0xad, 0xdc, 0xa7, 0xc2, 0x60, 0xe2 } };
|
||||||
static const IID SDL_IID_IAudioCaptureClient = { 0xc8adbd64, 0xe71e, 0x48a0,{ 0xa4, 0xde, 0x18, 0x5c, 0x39, 0x5c, 0xd3, 0x17 } };
|
static const IID SDL_IID_IAudioCaptureClient = { 0xc8adbd64, 0xe71e, 0x48a0,{ 0xa4, 0xde, 0x18, 0x5c, 0x39, 0x5c, 0xd3, 0x17 } };
|
||||||
|
@ -602,17 +593,7 @@ WASAPI_ThreadDeinit(_THIS)
|
||||||
static void
|
static void
|
||||||
WASAPI_Deinitialize(void)
|
WASAPI_Deinitialize(void)
|
||||||
{
|
{
|
||||||
DevIdList *devidlist;
|
|
||||||
DevIdList *next;
|
|
||||||
|
|
||||||
WASAPI_PlatformDeinit();
|
WASAPI_PlatformDeinit();
|
||||||
|
|
||||||
for (devidlist = deviceid_list; devidlist; devidlist = next) {
|
|
||||||
next = devidlist->next;
|
|
||||||
SDL_free(devidlist->str);
|
|
||||||
SDL_free(devidlist);
|
|
||||||
}
|
|
||||||
deviceid_list = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static SDL_bool
|
static SDL_bool
|
||||||
|
|
|
@ -68,8 +68,6 @@ WASAPI_PlatformInit(void)
|
||||||
void
|
void
|
||||||
WASAPI_PlatformDeinit(void)
|
WASAPI_PlatformDeinit(void)
|
||||||
{
|
{
|
||||||
SDL_IMMDevice_Quit();
|
|
||||||
|
|
||||||
if (libavrt) {
|
if (libavrt) {
|
||||||
FreeLibrary(libavrt);
|
FreeLibrary(libavrt);
|
||||||
libavrt = NULL;
|
libavrt = NULL;
|
||||||
|
@ -78,7 +76,7 @@ WASAPI_PlatformDeinit(void)
|
||||||
pAvSetMmThreadCharacteristicsW = NULL;
|
pAvSetMmThreadCharacteristicsW = NULL;
|
||||||
pAvRevertMmThreadCharacteristics = NULL;
|
pAvRevertMmThreadCharacteristics = NULL;
|
||||||
|
|
||||||
WIN_CoUninitialize();
|
SDL_IMMDevice_Quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -62,6 +62,15 @@ extern "C" {
|
||||||
SDL_atomic_t SDL_IMMDevice_DefaultCaptureGeneration;
|
SDL_atomic_t SDL_IMMDevice_DefaultCaptureGeneration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This is a list of device id strings we have inflight, so we have consistent pointers to the same device. */
|
||||||
|
typedef struct DevIdList
|
||||||
|
{
|
||||||
|
WCHAR *str;
|
||||||
|
struct DevIdList *next;
|
||||||
|
} DevIdList;
|
||||||
|
|
||||||
|
static DevIdList *deviceid_list = NULL;
|
||||||
|
|
||||||
class SDL_WasapiDeviceEventHandler
|
class SDL_WasapiDeviceEventHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -204,10 +213,20 @@ int WASAPI_PlatformInit(void)
|
||||||
|
|
||||||
void WASAPI_PlatformDeinit(void)
|
void WASAPI_PlatformDeinit(void)
|
||||||
{
|
{
|
||||||
|
DevIdList *devidlist;
|
||||||
|
DevIdList *next;
|
||||||
|
|
||||||
delete playback_device_event_handler;
|
delete playback_device_event_handler;
|
||||||
playback_device_event_handler = nullptr;
|
playback_device_event_handler = nullptr;
|
||||||
delete capture_device_event_handler;
|
delete capture_device_event_handler;
|
||||||
capture_device_event_handler = nullptr;
|
capture_device_event_handler = nullptr;
|
||||||
|
|
||||||
|
for (devidlist = deviceid_list; devidlist; devidlist = next) {
|
||||||
|
next = devidlist->next;
|
||||||
|
SDL_free(devidlist->str);
|
||||||
|
SDL_free(devidlist);
|
||||||
|
}
|
||||||
|
deviceid_list = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WASAPI_EnumerateEndpoints(void)
|
void WASAPI_EnumerateEndpoints(void)
|
||||||
|
@ -359,15 +378,6 @@ WaveFormatToSDLFormat(WAVEFORMATEX *waveformat)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is a list of device id strings we have inflight, so we have consistent pointers to the same device. */
|
|
||||||
typedef struct DevIdList
|
|
||||||
{
|
|
||||||
WCHAR *str;
|
|
||||||
struct DevIdList *next;
|
|
||||||
} DevIdList;
|
|
||||||
|
|
||||||
static DevIdList *deviceid_list = NULL;
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
WASAPI_RemoveDevice(const SDL_bool iscapture, LPCWSTR devid)
|
WASAPI_RemoveDevice(const SDL_bool iscapture, LPCWSTR devid)
|
||||||
{
|
{
|
||||||
|
|
|
@ -346,11 +346,23 @@ SDL_IMMDevice_Init(void)
|
||||||
void
|
void
|
||||||
SDL_IMMDevice_Quit(void)
|
SDL_IMMDevice_Quit(void)
|
||||||
{
|
{
|
||||||
|
DevIdList *devidlist;
|
||||||
|
DevIdList *next;
|
||||||
|
|
||||||
if (enumerator) {
|
if (enumerator) {
|
||||||
IMMDeviceEnumerator_UnregisterEndpointNotificationCallback(enumerator, (IMMNotificationClient *)¬ification_client);
|
IMMDeviceEnumerator_UnregisterEndpointNotificationCallback(enumerator, (IMMNotificationClient *)¬ification_client);
|
||||||
IMMDeviceEnumerator_Release(enumerator);
|
IMMDeviceEnumerator_Release(enumerator);
|
||||||
enumerator = NULL;
|
enumerator = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WIN_CoUninitialize();
|
||||||
|
|
||||||
|
for (devidlist = deviceid_list; devidlist; devidlist = next) {
|
||||||
|
next = devidlist->next;
|
||||||
|
SDL_free(devidlist->str);
|
||||||
|
SDL_free(devidlist);
|
||||||
|
}
|
||||||
|
deviceid_list = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
Loading…
Reference in New Issue