src/audio


Log

Author Commit Date CI Message
Ryan C. Gordon 7ef188a1 2020-09-19T14:01:57 jack: Fixed memory leak on device close.
Sam Lantinga ff53521b 2020-06-04T12:26:57 Fixed Bluetooth audio output on Apple TV
Ryan C. Gordon 68777406 2020-05-20T16:58:33 windows: Fix calls to CoCreateInstance() so last parameter is a LPVOID *.
Ryan C. Gordon 8601996f 2020-05-03T22:13:48 hints: Allow specifying audio device metadata. This is only supported on PulseAudio. You can set a description when opening your audio device that will show up in pauvcontrol, which lets you set per-stream volume levels. Fixes Bugzilla #4801.
Sam Lantinga a990a34a 2020-04-14T22:26:02 Cleanly switch between audio recording, playback, and both, on iOS
Sam Lantinga 2ae1c0f5 2020-04-14T09:52:27 Allow Bluetooth headphones for iOS playandrecord mode
Ryan C. Gordon fba081e4 2020-04-07T14:51:08 wasapi: Patched to compile on C89 systems, and use SDL_ceilf instead of ceilf.
Ryan C. Gordon 4c2be472 2020-04-07T14:37:24 wasapi: Improve WASAPI audio backend latency (thanks, Anthony!). Anthony Pesch's notes on his patch: "Currently, the WASAPI backend creates a stream in shared mode and sets the device's callback size to be half of the shared stream's total buffer size. This works, but doesn't coordinate will with the actual hardware. The hardware will raise an interrupt after every period which in turn will signal the object being waited on inside of WaitDevice. From my empirical testing, the callback size was often larger than the period size and not a multiple of it, which resulted in poor latency when trying to time an application based on the audio callback. The reason for this looked something like: * The device's callback would be called and and the audio buffer was filled. * WaitDevice would be called. * The hardware would raise an interrupt after one period. * WaitDevice would resume, see that a a full callback had not been played and then wait again. * The hardware would raise an interrupt after another period. * WaitDevice would resume, see that a full callback + some extra amount had been played and then it would again call our callback and this process would repeat. The effect of this is that the pacing between subsequent callbacks is poor - sometimes it's called very quickly, sometimes it's called very late. By matching the callback's size to the stream's period size, the pacing of calls to the user callback is improved substantially. I didn't write an actual test for this, but my use case for this was my Dreamcast emulator (https://redream.io) which uses the audio callback to help drive the emulation speed. Without this change and with the default shared stream buffer (which has a period of ~10ms) I would get frame times that were between ~3-30 milliseconds; after this change I get frame times of ~11-22 milliseconds. Note, this patch also has a change that removes passing a duration to the Initialize call. It seems that the default duration used (when 0 is passed) does typically match up with the duration returned by GetDevicePeriod, however the Initialize docs say: > To set the buffer to the minimum size required by the engine thread, the > client should call Initialize with the hnsBufferDuration parameter set to 0. > Following the Initialize call, the client can get the size of the resulting > buffer by calling IAudioClient::GetBufferSize. This change isn't strictly required, but I made it to hopefully rule out another source of unexpected latency." Fixes Bugzilla #4592.
Sam Lantinga b6afbe63 2020-04-07T09:38:57 Added SDL_log.h to SDL_internal.h so logging is available everywhere
Sam Lantinga 9525f972 2020-04-05T10:44:51 Fixed bug 5076 - SDL_netbsdaudio: Add support for 32-bit LPCM Nia Alarie The kernel supports this, make SDL expose it so it can be used.
Sam Lantinga f3e60967 2020-04-02T12:27:29 Fixed setting the "playandrecord" audio hint on Apple TV The Apple TV doesn't have record capability by default, so activating the audio session with AVAudioSessionCategoryPlayAndRecord fails.
Ryan C. Gordon 55b4f18e 2020-03-29T01:54:00 coreaudio: The default SDL audio device now tracks the system output default. So if you go into System Preferences on a MacBook and toggle between a pair of connected bluetooth headphones and built-in internal speakers, SDL will switch the device it is playing sound through, to match this setting, on the fly. Likewise if the default output device is a USB thing and is unplugged; as the default device changes at the system level, SDL will pick this up and carry on with the new default. This is different from our unplug detection for specific devices, as in those cases we want to send the app a disconnect notification, instead of migrating transparently as we now do for default devices. Note that this should also work for capture devices; if the device changes, SDL will start recording from the new default. Fixes Bugzilla #4851.
Sam Lantinga abdc5cbf 2020-03-26T19:30:17 Allow background music to play in the "play and record" case on iOS
Ethan Lee 27889d02 2020-03-03T12:31:41 winrt: Wait for EnumerationCompleted before leaving WASAPI_EnumerateEndpoints
Sam Lantinga e3b0713e 2020-02-24T12:07:18 Don't call setPreferredOutputNumberOfChannels on iOS, it breaks audio output
Sam Lantinga 2c9871a4 2020-02-24T10:25:57 Fixed surround sound support on Apple TV
Sam Lantinga f4e23553 2020-02-14T15:19:34 Fixed audio not coming out of the phone speakers while recording on iOS
Sam Lantinga 922b3dc3 2020-02-14T14:18:12 Fixed re-setting the audio session category when closing an audio device
Sam Lantinga 14bf532d 2020-02-13T16:10:52 Fixed opening audio on Android from the Steam Link shell activity
Sam Lantinga 4bb95e84 2020-02-11T16:14:02 Implemented OpenSL-ES audio recording on Android
Sam Lantinga b1c6e7c2 2020-01-23T00:32:34 Fixed compile warning
Ryan C. Gordon f30ef6ed 2020-01-21T17:40:16 audio: Fixed a '//' style comment.
Ryan C. Gordon dbe5c14b 2020-01-21T15:49:37 audio: Calculate a legitimate SDL_AudioSpec::silence in SDL_LoadWAV_RW().
Sam Lantinga a8780c6a 2020-01-16T20:49:25 Updated copyright date for 2020
Sam Lantinga 3ce56f62 2020-01-13T08:12:10 Fixed error formatting
Sam Lantinga e3cedf96 2020-01-11T04:38:13 Add the destination format to the error when conversion isn't possible
Ryan C. Gordon 3da6a0b2 2019-12-03T03:53:06 pulseaudio: don't let FlushCapture get stuck in an infinite loop on shutdown. Fixes Bugzilla #4645.
Sylvain Becker 60d3965e 2019-10-30T15:36:17 Readability: remove redundant return, continue, enum declaration
Sylvain Becker b458d7a2 2019-10-30T15:13:55 Readability: remove redundant cast to the same type
Sylvain Becker ed469fa5 2019-10-23T09:36:41 Fixed bug 4842 - Redundant condition in MS_ADPCM_Decode and IMA_ADPCM_Decode (Thanks!)
Ryan C. Gordon aef1ed4a 2019-09-25T15:40:27 audio: Set (something close to) the correct silence value for U16 audio. Partially fixes Bugzilla #4805.
Ryan C. Gordon 693755f0 2019-09-25T15:07:07 coreaudio: Apple doesn't support U16 data, so convert in that case.
Sylvain Becker 70dc8d16 2019-08-30T08:55:20 Android: fix corresponding warnings
Sam Lantinga 455944c8 2019-08-22T16:12:16 Fixed whitespace
Sam Lantinga b521df66 2019-08-22T16:09:42 [SDL][IOS] Audio fix - applies stream to sound data when resampling or reformatting is required.
Sylvain Becker 05f35c24 2019-08-19T21:23:47 Fix audio conversion U16_to_F32_SSE2 (bug 4186)
Sylvain Becker 1d220401 2019-08-19T20:35:02 Fixed bug 4186 - ARM/NEON audio converters cause strange clicking noises reverse the order when storing ouput buffer
Sylvain Becker c0fc94f2 2019-08-19T16:57:15 Fixed bug 4186 - ARM/NEON audio converters cause strange clicking noises reverse the order when storing ouput buffer
Ozkan Sezer 4953e050 2019-07-31T05:11:40 use SDL_zeroa at more places where the argument is an array.
Ozkan Sezer 7a47c292 2019-07-31T01:22:02 Fix bug 4746 - introduce SDL_zeroa macro.
Ozkan Sezer fdc67c3c 2019-07-31T00:10:00 MS_ADPCM_Decode: fix assigning an array to a pointer (lose '&').
Sam Lantinga 680e7937 2019-07-07T09:10:56 Fixed bug 4710 - audio/alsa: avoid configuring hardware parameters with only a single period Anthony Pesch The previous code first configured the period size using snd_pcm_hw_par- ams_set_period_size_near. Then, it further narrowed the configuration space by calling snd_pcm_hw_params_set_buffer_size_near using a buffer size of 2 times the _requested_ period size in order to try and get a configuration with only 2 periods. If the configured period size was larger than the requested size, the second call could inadvertently narrow the configuration space to contain only a single period. Rather than fixing the call to snd_pcm_hw_params_set_buffer_size_near to use a size of 2 times the configured period size, the code has been changed to use snd_pcm_hw_params_set_periods_min in order to more clearly explain the intent.
Sam Lantinga 14e8b93e 2019-06-18T14:24:24 Fixed compiler warning
Ryan C. Gordon 90e2dc98 2019-06-14T18:23:51 A few minor changes to placate static analysis.
Ryan C. Gordon 289d1092 2019-06-14T16:52:42 audio: Attempt to fix build on ARM versions of Visual Studio.
Ryan C. Gordon 33b235f4 2019-06-14T15:52:48 audio: Fix ARM NEON audio converter bugs. (Patch from Sylvain, I'm just applying it.) Fixes Bugzilla #4186.
Ryan C. Gordon 5c56c888 2019-06-14T15:47:32 audio: patched to compile.
Ethan Lee 5bd9b8b1 2019-06-14T09:51:22 Check src alignment for S32_to_F32 conversions
Ryan C. Gordon 2fa33d6f 2019-06-12T15:43:08 wave: Fixed static analysis warning about dead assignment. (technically, this function never returns an error at this point, but since it _does_ have an "uhoh, is this corrupt data?" comment that it ignores, we should probably make sure we handle error cases in the future. :) )
Sylvain Becker cd011bb1 2019-06-12T10:42:02 SDL_Wave: missing field 'length' initializer
Ryan C. Gordon 254eb677 2019-06-11T02:08:31 windows: Don't let Visual Studio insert an implicit dependency on memset(). Fixes Bugzilla #4662.
Sam Lantinga d8da33c0 2019-06-10T08:49:26 Fixed bug 4662 - SDL failed to build due to error LNK2019: unresolved external symbol _memset referenced in function _IMA_ADPCM_Decode with MSVC on Windows LinGao We build SDL with Visual studio 2017 compiler on Windows Server 2016, but it failed to build due to error LNK2019: unresolved external symbol _memset referenced in function _IMA_ADPCM_Decode on latest default branch. And we found that it can be first reproduced on ca7283111ad0 changeset. Could you please help have a look about this issue? Thanks in advance!
Sam Lantinga 762b788f 2019-06-09T12:46:10 Cleanup on bug 3894 - Fuzzing crashes for SDL_LoadWAV Simon Hug Attached is a minor cleanup patch. It changes the option name of one hint to something better, puts one or two more checks in, and adds explicit casting where warnings could appear otherwise. I hope the naming of the hints and their options is acceptable. It would be kind of awkward to change them after they get released with an official SDL version.
Sam Lantinga a21b5b30 2019-06-08T19:09:43 Fixed build
Sam Lantinga 990e166a 2019-06-08T19:02:42 Fixed bug 3894 - Fuzzing crashes for SDL_LoadWAV Simon Hug I had a look at this and made some additions to SDL_wave.c. The attached patch adds many checks and error messages. For some reason I also added A-law and ?-law decoders. Forgot exactly why... but hey, they're small. The WAVE format is seriously underspecified (at least by the documents that are publicly available on the internet) and it's a shame Microsoft never put something better out there. The language used in them is so loose at times, it's not surprising the encoders and decoders behave very differently. The Windows Media Player doesn't even support MS ADPCM correctly. The patch also adds some hints to make the decoder more strict at the cost of compatibility with weird WAVE files. I still think it needs a bit of cleaning up (Not happy with the MultiplySize function. Don't like the name and other SDL code may want to use something like this too.) and some duplicated code may be folded together. It does work in this state and I have thrown all kinds of WAVE files at it. The AFL files also pass with it and some even play (obviously just noise). Crafty little fuzzer. Any critique would be welcome. I have a fork of SDL with a audio-loadwav branch over here if someone wants to use the commenting feature of Bitbucket: https://bitbucket.org/ChliHug/SDL I also cobbled some Lua scripts together to create WAVE test files: https://bitbucket.org/ChliHug/gendat
Sam Lantinga 31765242 2019-06-08T18:22:18 Fixed bug 4294 - Audio: perform more validation on conversion request janisozaur There are many cases which are not able to be handled by SDL's audio conversion routines, including too low (negative) rate, too high rate (impossible to allocate). This patch aims to report such issues early and handle others in a graceful manner. The "INT32_MAX / RESAMPLER_SAMPLES_PER_ZERO_CROSSING" value is the conservative approach in terms of what can _technically_ be supported, but its value is 4'194'303, or just shy of 4.2MHz. I highly doubt any sane person would use such rates, especially in SDL2, so I would like to drive this limit further down, but would need some assistance to do that, as doing so would have to introduce an arbitrary value. Are you OK with such approach? What would a good value be? Wikipedia (https://en.wikipedia.org/wiki/High-resolution_audio) lists 96kHz as the highest sampling rate in use, even if I quadruple it for a good measure, to 384kHz it's still an order of magnitude lower than 4MHz.
Sam Lantinga 3f19a6d5 2019-06-08T18:07:58 CVE-2019-7578: Fix a buffer overread in InitIMA_ADPCM If IMA ADPCM format chunk was too short, InitIMA_ADPCM() parsing it could read past the end of chunk data. This patch fixes it. CVE-2019-7578 https://bugzilla.libsdl.org/show_bug.cgi?id=4494 Signed-off-by: Petr P?sa? <ppisar@redhat.com>
Sam Lantinga 8a37848d 2019-06-08T13:41:46 Fixed bug 4605 - WASAPI_WaitDevice hang Matt Brocklehurst We've noticed that if you are playing audio on Windows via the WASAPI interface and you unplug and reconnect the device a few times the program hangs. We've debugged the problem down to static void WASAPI_WaitDevice(_THIS) { ... snip ... if (WaitForSingleObjectEx(this->hidden->event, INFINITE, FALSE) == WAIT_OBJECT_0) { ... snip ... } This WaitForSingleObjectEx does not havbe a time out defined, so it hangs there forever. Our suggested fix we found was to include a time out of say 200mSec We have done quite a bit of testing with this fix in place on various hardware configurations and it seems to have resolved the issue.
Sam Lantinga 15bae953 2019-06-08T13:03:36 Fixed bug 4642 - Rework SDL_netbsdaudio to improve performance Nia Alarie The NetBSD audio driver has a few problems. Lots of obsolete code, and extremely bad performance and stuttering. I have a patch in NetBSD's package system to improve it. This is my attempt to upstream it. The changes include: * Removing references to defines which are never used. * Using the correct structures for playback and recording, previously they were the wrong way around. * Using the correct types ('struct audio_prinfo' in contrast to 'audio_prinfo') * Removing the use of non-blocking I/O, as suggested in #3177. * Removing workarounds for driver bugs on systems that don't exist or use this driver any more. * Removing all usage of SDL_Delay(1) * Removing pointless use of AUDIO_INITINFO and tests that expect AUDIO_SETINFO to fail when it can't. These changes bring its performance in line with the DSP audio driver.
Sam Lantinga 03cf2416 2019-06-08T10:21:38 OpenSL ES audio cleanup and added a note with low latency audio discussion
Sam Lantinga 166d15fd 2019-06-07T15:09:15 Fixed surround sound channel setup for Android OpenSL ES audio driver
Sam Lantinga 723d0143 2019-06-04T17:32:15 Fixed bug 4171 - SDL_GetQueuedAudioSize is broken with WASAPI Cameron Gutman I was trying to use SDL_GetQueuedAudioSize() to ensure my audio latency didn't get too high while streaming data in from the network. If I get more than N frames of audio queued, I know that the network is giving me more data than I can play and I need to drop some to keep latency low. This doesn't work well on WASAPI out of the box, due to the addition of GetPendingBytes() to the amount of queued data. As a terrible hack, I loop 100 times calling SDL_Delay(10) and SDL_GetQueuedAudioSize() before I ever call SDL_QueueAudio() to get a "baseline" amount that I then subtract from SDL_GetQueuedAudioSize() later. However, because this value isn't actually a constant, this hack can cause SDL_GetQueuedAudioSize() - baselineSize to be < 0. This means I have no accurate way of determining how much data is actually queued in SDL's audio buffer queue. The SDL_GetQueuedAudioSize() documentation says: "This is the number of bytes that have been queued for playback with SDL_QueueAudio(), but have not yet been sent to the hardware." Yet, SDL_GetQueuedAudioSize() returns > 0 value when SDL_QueueAudio() has never been called. Based on that documentation, I believe the current behavior contradicts the documented behavior of this function and should be changed in line with Boris's patch. I understand that exposing the IAudioClient::GetCurrentPadding() value is useful, but a solution there needs to take into account what of that data is silence inserted by SDL and what is actual data queued by the user with SDL_QueueAudio(). Until that happens, I think the best approach is to remove the GetPendingBytes() call until SDL is able to keep track of queued data to make sense of it. This would make SDL_GetQueuedAudioSize() possible to use accurately with WASAPI.
Sam Lantinga f3e76ea1 2019-05-23T13:47:30 Use the OpenSL ES audio driver by default on Android, as it has the lowest latency.
Sam Lantinga 02f9667a 2019-05-23T13:47:27 Fixed static and buzzing when trying to use floating point audio on the OpenSL ES audio driver.
Sam Lantinga abcfe804 2019-05-14T14:20:54 [SDL] iOS fix bug with audio interrupted by a phone call not restoring.
Ryan C. Gordon 2fbfe8b9 2019-03-25T12:59:30 coreaudio: Set audio callback thread priority. Fixes Bugzilla #4155.
Ryan C. Gordon 6a3356ab 2019-03-25T12:24:38 Backed out changeset cec31de4e126 This was meant to migrate CoreAudio onto the same SDL_RunAudio() path that most other audio drivers are on, but it introduced a bug because it doesn't deal with dropped audio buffers...and fixing that properly just introduces latency. I might revisit this later, perhaps by reworking SDL_RunAudio to allow for this sort of API better, or redesigning the whole subsystem or something, I don't know. I'm not super-thrilled that this has to exist outside of the usual codepaths, though. Fixes Bugzilla #4481.
Sam Lantinga 35255342 2019-03-16T18:48:21 Fixed bug 4525 - Fix crash in ALSA_HotplugThread caused by bad return value check Anthony Pesch Fix snd_device_name_hint return value check According to the ALSA documentation, snd_device_name_hint returns 0 on success, otherwise a negative error code. The code previously only considered -1 to be an error, which let other error codes through resulting in a segfault when hints (which was NULL) was dereferenced
Sylvain Becker 03cbac40 2019-02-05T15:14:15 Android/openslES: fix warnings, comment out un-used interface
Sylvain Becker 614c8aea 2019-02-05T15:09:41 Android/openslES: set number of buffers of DATALOCATOR to internal NUM_BUFFER If we increase NUM_BUFFER, Enqueue won't fail with SL_RESULT_BUFFER_INSUFFICIENT
Sylvain Becker bf823bf2 2019-02-05T15:05:32 Android/openslES: prevent to run out of buffers if Enqueue() fails.
Alon Zakai 3b4e3693 2019-01-29T12:21:22 Emscripten: No need for Runtime. for dynCalls
Alon Zakai 53ead95e 2019-01-29T12:19:36 Emscripten: Avoid SDL2 in JS global scope After this fix, closure works with the LLVM wasm backend on SDL2.
Sylvain Becker 1b24b2ec 2019-01-14T22:56:57 Android/openslES: fix Pause/ResumeDevices when openslES is not used
Sylvain Becker 647b1f6a 2019-01-14T14:36:13 Android/openslES: check for non NULL variable, some intialization. use the previous naming
Sylvain Becker 7b1cc441 2019-01-14T14:31:06 Android/openslES: start playing, after creating ressources
Sylvain Becker 955d8789 2019-01-14T12:33:29 Android/openslES: set audio in paused/resumed state for Android event loop And also in "stopped" state before closing the device.
Sylvain Becker 59c8c7b6 2019-01-14T10:58:57 Android/openslES: move a few static variables to SDL_PrivateAudioData structure
Sylvain Becker 5aeeaaab 2019-01-14T10:16:26 Android/openslES: register and use CloseDevice function.
Sylvain Becker 365fd9c6 2019-01-14T10:04:54 Android/openslES: some space and indentation to match SDL conventions
Sam Lantinga 7dc92a76 2019-01-12T12:18:44 Initial Android OpenSL ES implementation, contributed by ANTA
Sylvain Becker d23c2f07 2019-01-10T18:05:56 Fixed bug 3930 - Android, set thread priorities and names SDLActivity thread priority is unchanged, by default -10 (THREAD_PRIORITY_VIDEO). SDLAudio thread priority was -4 (SDL_SetThreadPriority was ignored) and is now -16 (THREAD_PRIORITY_AUDIO). SDLThread thread priority was 0 (THREAD_PRIORITY_DEFAULT) and is -4 (THREAD_PRIORITY_DISPLAY).
Sam Lantinga 5e13087b 2019-01-04T22:01:14 Updated copyright for 2019
Sylvain Becker aea7e56a 2018-12-04T12:34:45 android: use __ARM_NEON instead of __ARM_NEON__ to include <arm_neon.h> Only __ARM_NEON is defined with Android NDK and arm64-v8a Tested on ndk-r18, ndk-r13 and also Xcode. (Visual Studio needs a different fix). Fixes Bugzilla #4409.
Sylvain Beucler 1f6bd951 2018-11-15T18:22:30 Emscripten: make CloseAudio actually close audio cf. https://bugzilla.libsdl.org/show_bug.cgi?id=4176
Micha? Janiszewski 91820998 2018-10-28T21:36:48 Add and update include guards Include guards in most changed files were missing, I added them keeping the same style as other SDL files. In some cases I moved the include guards around to be the first thing the header has to take advantage of any possible improvements compiler may have for inclusion guards.
Ryan C. Gordon 4a50a042 2018-10-21T22:40:17 wasapi/win32: Sort initial device lists by device GUID. This makes an unchanged set of hardware always report devices in the same order on each run.
Ryan C. Gordon 04cbf132 2018-10-10T15:20:56 audio: All device names reported by SDL must be unique. This means that if you have two devices named "Soundblaster Pro" in your machine, one will be reported as "Soundblaster Pro" and the other as "Soundblaster Pro (2)". This makes it so you can't into a position where one of your devices can't be opened because another is sitting on the same name.
Ryan C. Gordon 0378529e 2018-10-10T14:55:24 audio: clean_out_device_list() already sets this flag to false for us.
Sam Lantinga f5a21ebf 2018-10-09T20:12:43 Added support for surround sound and float audio on Android
Sam Lantinga b2518761 2018-10-01T09:47:10 commit c6b28f46b8116552ec2b38d1d3c8535df28ba7a1 Author: Anthony Pesch <inolen@gmail.com> Date: Fri May 4 20:21:21 2018 -0400 Added SDL_AUDIO_ALLOW_SAMPLES_CHANGE flag enabling users of SDL_OpenAudioDevice to get the sample size of the actual hardware buffer vs having a stream created to handle the delta
Ryan C. Gordon 56ec349d 2018-09-29T16:48:15 audio: disable NEON converters for now. To be revisited after 2.0.9 ships! (doesn't fix Bugzilla #4186, but stops the regression for the time being.)
Ethan Lee 7f9854b9 2018-09-25T01:45:12 WinRT: Wait until audio device activation is complete and PrepDevice during OpenAudio
Sam Lantinga 5febdfce 2018-09-24T11:49:25 Fixed whitespace
Ryan C. Gordon 623a6def 2018-08-07T16:49:18 alsa: optionally run entire pipeline non-blocking.
Ryan C. Gordon 56f44cfa 2018-08-07T13:04:15 audio: Deal with device shutdown more carefully. This would cause problems in various ways, but specifically triggers an assert when you close a WASAPI capture device in an app running over RDP. Related to (but not the actual bug) in Bugzilla #3924.
Wohlstand ff8c62f2 2018-07-02T03:53:57 Fixed bug 4210 - SSE2-based converter makes junk result of S32 -> Float At the HG state abdd17144682, 64-bit assemblies are using SSE2-based resampler, produces junk sound when converting the S32 -> Float32 -> S16 chain. The `NEED_SCALAR_CONVERTER_FALLBACKS` thing works perfectly. If I will find a reason that caused this mistake, I'll send a patch by myself.
Ryan C. Gordon 4773690d 2018-06-25T12:55:23 Deal with possible malloc(0) calls, as pointed out by static analysis.
Sam Lantinga 1d25135b 2018-06-01T19:43:53 Fixed bug 4184 - jack audio driver fails in presence of midi ports Martin ?irokov Launching an SDL application with SDL_AUDIODRIVER=jack, and then calling SDL_OpenAudioDevice() with whatever parameters fails with an error like this one: SDL_OpenAudioDevice: Couldn't connect JACK ports: SDL:sdl_jack_output_0 => system:midi_playback_1 This happens because JACK_OpenDevice in src/audio/jack/SDL_jackaudio.c blindly tries to connect to all input ports without checking whether they are for audio or midi. The fix is to check port types and ignore all non audio ports. Also I removed devports field from struct SDL_PrivateAudioData, because it's never really used and removing unused ports from it would be PITA.
Sam Lantinga 8325df25 2018-05-24T07:30:24 Fixed bug 4169 - Crash due to audio session observer race condition Jona The following explains why this bug was happening: This crash was caused because the audio session was being set as active [session setActive:YES error:&err] when the audio device was actually being CLOSED. Certain cases the audio session being set to active would fail and the method would return right away. Because of the way the error was handled we never removed the SDLInterruptionListener thus leaking it. Later when an interruption was received the THIS_ object would contain a pointer to an already released device causing the crash. The fix: When only one device remained open and it was being closed we needed to set the audio session as NOT active and completely ignore the returned error to successfully release the SDLInterruptionListener. I think the user assumed that the open_playback_devices and open_capture_devices would equal 0 when all of them where closed but the truth is that at the end of the closing process that the open devices count is decremented.