audio: Added a hint to let apps force device buffer size.

This is a hint because apps might (probably mistakenly) believe they need this
to migrate from SDL2, but most things don't need to specify this.
main
Ryan C. Gordon 2023-09-13 10:42:08 -04:00
parent 47d8c77c67
commit cf95721130
No known key found for this signature in database
GPG Key ID: FA148B892AB48044
2 changed files with 30 additions and 2 deletions

View File

@ -2510,6 +2510,26 @@ extern "C" {
*/
#define SDL_HINT_GDK_TEXTINPUT_MAX_LENGTH "SDL_GDK_TEXTINPUT_MAX_LENGTH"
/**
* Set the next device open's buffer size.
*
* This hint is an integer > 0, that represents the size of the device's
* buffer in sample frames (stereo audio data in 16-bit format is 4 bytes
* per sample frame, for example).
*
* SDL3 generally decides this value on behalf of the app, but if for some
* reason the app needs to dictate this (because they want either lower
* latency or higher throughput AND ARE WILLING TO DEAL WITH what that
* might require of the app), they can specify it.
*
* SDL will try to accomodate this value, but there is no promise you'll
* get the buffer size requested. Many platforms won't honor this request
* at all, or might adjust it.
*
* This hint is checked when opening an audio device and can be changed
* between calls.
*/
#define SDL_HINT_AUDIO_DEVICE_SAMPLE_FRAMES "SDL_AUDIO_DEVICE_SAMPLE_FRAMES"
/**
* \brief An enumeration of hint priorities

View File

@ -1248,6 +1248,14 @@ static void PrepareAudioFormat(SDL_bool iscapture, SDL_AudioSpec *spec)
static int GetDefaultSampleFramesFromFreq(const int freq)
{
const char *hint = SDL_GetHint(SDL_HINT_AUDIO_DEVICE_SAMPLE_FRAMES);
if (hint) {
const int val = SDL_atoi(hint);
if (val > 0) {
return val;
}
}
if (freq <= 11025) {
return 512;
} else if (freq <= 22050) {
@ -1256,9 +1264,9 @@ static int GetDefaultSampleFramesFromFreq(const int freq)
return 2048;
} else if (freq <= 96000) {
return 4096;
} else {
return 8192; // shrug
}
return 8192; // shrug
}
void SDL_UpdatedAudioDeviceFormat(SDL_AudioDevice *device)