-
-
Notifications
You must be signed in to change notification settings - Fork 18
Wii U: Support For Seperate Gamepad and TV Audio Devices #116
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: wiiu-sdl2-2.28
Are you sure you want to change the base?
Wii U: Support For Seperate Gamepad and TV Audio Devices #116
Conversation
GaryOderNichts
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the PR! Hmm, this code seems somewhat fragile at the moment.
Closing a single audio device will uninitialize AX, even if other devices are still running. wiiuDevices is also not updated when closing a device, causing potential issues in the frame callback.
Ideally it should be possible to close and reopen audio devices. I think separating the AX initialization from opening and closing audio devices might be a good idea.
…ve unneeded struct code.
|
So with this commit AX will only deinitialize if its the last audio device being closed. |
GaryOderNichts
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks better now. There is still an issue if the first initialized device is closed before the last initialized device though.
| } | ||
|
|
||
| static void WIIUAUDIO_CloseDevice(_THIS) { | ||
| if (AXIsInit()) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd probably make AX (de-)initialization completely independent from opening and closing devices, by moving it into WIIUAUDIO_Init and the Deinitialize callback.
| SDL_AddAudioDevice(SDL_FALSE, SDL_AUDIO_DEVICE_WIIU_MIRRORED, &spec, &mirrorHandle); | ||
| SDL_AddAudioDevice(SDL_FALSE, SDL_AUDIO_DEVICE_WIIU_TV, &spec, &tvHandle); | ||
| SDL_AddAudioDevice(SDL_FALSE, SDL_AUDIO_DEVICE_WIIU_GAMEPAD, &spec, &drcHandle); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The "handles" here are supposed to be unique identifiers/pointers which can be retried using device->handle. In this case you could do something similar to the SNDIO driver, and use your device IDs here:
SDL/src/audio/sndio/SDL_sndioaudio.c
Lines 324 to 328 in 8289656
| static void SNDIO_DetectDevices(SDL_AudioDevice **default_playback, SDL_AudioDevice **default_recording) | |
| { | |
| *default_playback = SDL_AddAudioDevice(false, DEFAULT_PLAYBACK_DEVNAME, NULL, (void *)0x1); | |
| *default_recording = SDL_AddAudioDevice(true, DEFAULT_RECORDING_DEVNAME, NULL, (void *)0x2); | |
| } |
Then you can check this handle in
WIIUAUDIO_OpenDevice and avoid comparing against the device name.
This PR adds in support for separate Gamepad and TV SDL Devices while retaining support for mirroring the audio on both at the same time.
These audio devices can be created as follows:
When setting up SDL_Audio and creating an audio device, if not specified, the audio device will default to
SDL_AUDIO_DEVICE_WIIU_MIRRORED.sorry for the second PR, had to fix some git stuff