From 82db2b58f90afb47df2613521919e405484ddf68 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sun, 27 Aug 2023 14:43:21 -0700 Subject: [PATCH] Renamed audio stream callback and moved the userdata parameter first In general SDL API callbacks are called with the userdata paramter first, to mimic C++ method call convention --- include/SDL3/SDL_audio.h | 12 ++++++------ src/audio/SDL_audio.c | 2 +- src/audio/SDL_audiocvt.c | 14 +++++++------- src/audio/SDL_sysaudio.h | 4 ++-- src/dynapi/SDL_dynapi_procs.h | 6 +++--- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/include/SDL3/SDL_audio.h b/include/SDL3/SDL_audio.h index 759e13591..f7f962896 100644 --- a/include/SDL3/SDL_audio.h +++ b/include/SDL3/SDL_audio.h @@ -910,12 +910,12 @@ extern DECLSPEC int SDLCALL SDL_UnlockAudioStream(SDL_AudioStream *stream); * manage the lock explicitly. * * \param stream The SDL audio stream associated with this callback. - * \param approx_request The _approximate_ amout of data, in bytes, that is requested. + * \param approx_amount The _approximate_ amount of data, in bytes, that is requested or available. * This might be slightly overestimated due to buffering or - * resampling, and may change from call to call anyhow. + * resampling, and may change from call to call. * \param userdata An opaque pointer provided by the app for their personal use. */ -typedef void (SDLCALL *SDL_AudioStreamRequestCallback)(SDL_AudioStream *stream, int approx_request, void *userdata); +typedef void (SDLCALL *SDL_AudioStreamCallback)(void *userdata, SDL_AudioStream *stream, int approx_amount); /** * Set a callback that runs when data is requested from an audio stream. @@ -960,7 +960,7 @@ typedef void (SDLCALL *SDL_AudioStreamRequestCallback)(SDL_AudioStream *stream, * * \sa SDL_SetAudioStreamPutCallback */ -extern DECLSPEC int SDLCALL SDL_SetAudioStreamGetCallback(SDL_AudioStream *stream, SDL_AudioStreamRequestCallback callback, void *userdata); +extern DECLSPEC int SDLCALL SDL_SetAudioStreamGetCallback(SDL_AudioStream *stream, SDL_AudioStreamCallback callback, void *userdata); /** * Set a callback that runs when data is added to an audio stream. @@ -1008,7 +1008,7 @@ extern DECLSPEC int SDLCALL SDL_SetAudioStreamGetCallback(SDL_AudioStream *strea * * \sa SDL_SetAudioStreamGetCallback */ -extern DECLSPEC int SDLCALL SDL_SetAudioStreamPutCallback(SDL_AudioStream *stream, SDL_AudioStreamRequestCallback callback, void *userdata); +extern DECLSPEC int SDLCALL SDL_SetAudioStreamPutCallback(SDL_AudioStream *stream, SDL_AudioStreamCallback callback, void *userdata); /** @@ -1080,7 +1080,7 @@ extern DECLSPEC void SDLCALL SDL_DestroyAudioStream(SDL_AudioStream *stream); * * \since This function is available since SDL 3.0.0. */ -extern DECLSPEC SDL_AudioStream *SDLCALL SDL_OpenAudioDeviceStream(SDL_AudioDeviceID devid, const SDL_AudioSpec *spec, SDL_AudioStreamRequestCallback callback, void *userdata); +extern DECLSPEC SDL_AudioStream *SDLCALL SDL_OpenAudioDeviceStream(SDL_AudioDeviceID devid, const SDL_AudioSpec *spec, SDL_AudioStreamCallback callback, void *userdata); /** * Load the audio data of a WAVE file into memory. diff --git a/src/audio/SDL_audio.c b/src/audio/SDL_audio.c index bcf8c046b..e9109df8d 100644 --- a/src/audio/SDL_audio.c +++ b/src/audio/SDL_audio.c @@ -1511,7 +1511,7 @@ SDL_AudioDeviceID SDL_GetAudioStreamDevice(SDL_AudioStream *stream) return retval; } -SDL_AudioStream *SDL_OpenAudioDeviceStream(SDL_AudioDeviceID devid, const SDL_AudioSpec *spec, SDL_AudioStreamRequestCallback callback, void *userdata) +SDL_AudioStream *SDL_OpenAudioDeviceStream(SDL_AudioDeviceID devid, const SDL_AudioSpec *spec, SDL_AudioStreamCallback callback, void *userdata) { SDL_AudioDeviceID logdevid = SDL_OpenAudioDevice(devid, spec); if (!logdevid) { diff --git a/src/audio/SDL_audiocvt.c b/src/audio/SDL_audiocvt.c index 9c3171bee..da388d39c 100644 --- a/src/audio/SDL_audiocvt.c +++ b/src/audio/SDL_audiocvt.c @@ -777,7 +777,7 @@ SDL_AudioStream *SDL_CreateAudioStream(const SDL_AudioSpec *src_spec, const SDL_ return retval; } -int SDL_SetAudioStreamGetCallback(SDL_AudioStream *stream, SDL_AudioStreamRequestCallback callback, void *userdata) +int SDL_SetAudioStreamGetCallback(SDL_AudioStream *stream, SDL_AudioStreamCallback callback, void *userdata) { if (!stream) { return SDL_InvalidParamError("stream"); @@ -789,7 +789,7 @@ int SDL_SetAudioStreamGetCallback(SDL_AudioStream *stream, SDL_AudioStreamReques return 0; } -int SDL_SetAudioStreamPutCallback(SDL_AudioStream *stream, SDL_AudioStreamRequestCallback callback, void *userdata) +int SDL_SetAudioStreamPutCallback(SDL_AudioStream *stream, SDL_AudioStreamCallback callback, void *userdata) { if (!stream) { return SDL_InvalidParamError("stream"); @@ -894,7 +894,7 @@ int SDL_PutAudioStreamData(SDL_AudioStream *stream, const void *buf, int len) if (stream->put_callback) { const int newavail = SDL_GetAudioStreamAvailable(stream) - prev_available; if (newavail > 0) { // don't call the callback if we can't actually offer new data (still filling future buffer, only added 1 frame but downsampling needs more to produce new sound, etc). - stream->put_callback(stream, newavail, stream->put_callback_userdata); + stream->put_callback(stream->put_callback_userdata, stream, newavail); } } @@ -948,7 +948,7 @@ static void UpdateStreamHistoryBuffer(SDL_AudioStream* stream, Uint8* input_buff SDL_assert(padding_bytes <= history_bytes); SDL_memcpy(left_padding, history_buffer + history_bytes - padding_bytes, padding_bytes); } - + // Update the history buffer using the new input data if (input_bytes >= history_bytes) { SDL_memcpy(history_buffer, input_buffer + (input_bytes - history_bytes), history_bytes); @@ -1056,7 +1056,7 @@ static int GetAudioStreamDataInternal(SDL_AudioStream *stream, void *buf, int le // // ResampleAudio also requires an additional buffer if it can't write straight to the output: // resample_frame_size * output_frames - // + // // Note, ConvertAudio requires (num_frames * max_sample_frame_size) of scratch space const int work_buffer_frames = input_frames + (resampler_padding_frames * 2); int work_buffer_capacity = work_buffer_frames * max_sample_frame_size; @@ -1121,7 +1121,7 @@ static int GetAudioStreamDataInternal(SDL_AudioStream *stream, void *buf, int le SDL_assert(stream->flushed); SDL_memset(right_padding + right_padding_bytes, SDL_GetSilenceValueForFormat(src_format), padding_bytes - right_padding_bytes); } - + SDL_assert(work_buffer_frames == input_frames + (resampler_padding_frames * 2)); // Resampling! get the work buffer to float32 format, etc, in-place. @@ -1186,7 +1186,7 @@ int SDL_GetAudioStreamData(SDL_AudioStream *stream, void *voidbuf, int len) const int already_have = SDL_GetAudioStreamAvailable(stream); approx_request -= SDL_min(approx_request, already_have); // we definitely have this much output already packed in. if (approx_request > 0) { // don't call the callback if we can satisfy this request with existing data. - stream->get_callback(stream, approx_request, stream->get_callback_userdata); + stream->get_callback(stream->get_callback_userdata, stream, approx_request); } } diff --git a/src/audio/SDL_sysaudio.h b/src/audio/SDL_sysaudio.h index 0280d7d71..65e0cb89e 100644 --- a/src/audio/SDL_sysaudio.h +++ b/src/audio/SDL_sysaudio.h @@ -159,9 +159,9 @@ struct SDL_AudioStream SDL_DataQueue *queue; SDL_Mutex *lock; // this is just a copy of `queue`'s mutex. We share a lock. - SDL_AudioStreamRequestCallback get_callback; + SDL_AudioStreamCallback get_callback; void *get_callback_userdata; - SDL_AudioStreamRequestCallback put_callback; + SDL_AudioStreamCallback put_callback; void *put_callback_userdata; Uint8 *work_buffer; // used for scratch space during data conversion/resampling. diff --git a/src/dynapi/SDL_dynapi_procs.h b/src/dynapi/SDL_dynapi_procs.h index f0a3e4c62..f4deb2db7 100644 --- a/src/dynapi/SDL_dynapi_procs.h +++ b/src/dynapi/SDL_dynapi_procs.h @@ -943,10 +943,10 @@ SDL_DYNAPI_PROC(int,SDL_FlushAudioStream,(SDL_AudioStream *a),(a),return) SDL_DYNAPI_PROC(int,SDL_ClearAudioStream,(SDL_AudioStream *a),(a),return) SDL_DYNAPI_PROC(int,SDL_LockAudioStream,(SDL_AudioStream *a),(a),return) SDL_DYNAPI_PROC(int,SDL_UnlockAudioStream,(SDL_AudioStream *a),(a),return) -SDL_DYNAPI_PROC(int,SDL_SetAudioStreamGetCallback,(SDL_AudioStream *a, SDL_AudioStreamRequestCallback b, void *c),(a,b,c),return) -SDL_DYNAPI_PROC(int,SDL_SetAudioStreamPutCallback,(SDL_AudioStream *a, SDL_AudioStreamRequestCallback b, void *c),(a,b,c),return) +SDL_DYNAPI_PROC(int,SDL_SetAudioStreamGetCallback,(SDL_AudioStream *a, SDL_AudioStreamCallback b, void *c),(a,b,c),return) +SDL_DYNAPI_PROC(int,SDL_SetAudioStreamPutCallback,(SDL_AudioStream *a, SDL_AudioStreamCallback b, void *c),(a,b,c),return) SDL_DYNAPI_PROC(void,SDL_DestroyAudioStream,(SDL_AudioStream *a),(a),) -SDL_DYNAPI_PROC(SDL_AudioStream*,SDL_OpenAudioDeviceStream,(SDL_AudioDeviceID a, const SDL_AudioSpec *b, SDL_AudioStreamRequestCallback c, void *d),(a,b,c,d),return) +SDL_DYNAPI_PROC(SDL_AudioStream*,SDL_OpenAudioDeviceStream,(SDL_AudioDeviceID a, const SDL_AudioSpec *b, SDL_AudioStreamCallback c, void *d),(a,b,c,d),return) SDL_DYNAPI_PROC(int,SDL_LoadWAV_RW,(SDL_RWops *a, SDL_bool b, SDL_AudioSpec *c, Uint8 **d, Uint32 *e),(a,b,c,d,e),return) SDL_DYNAPI_PROC(int,SDL_MixAudioFormat,(Uint8 *a, const Uint8 *b, SDL_AudioFormat c, Uint32 d, int e),(a,b,c,d,e),return) SDL_DYNAPI_PROC(int,SDL_ConvertAudioSamples,(const SDL_AudioSpec *a, const Uint8 *b, int c, const SDL_AudioSpec *d, Uint8 **e, int *f),(a,b,c,d,e,f),return)