2
0
Эх сурвалжийг харах

audio: Added SDL_GetAudioStreamBinding.

Now you can open a device, bind a stream, and forget about the device ID
until you're ready to shutdown, where you can query the stream for it.
Ryan C. Gordon 2 жил өмнө
parent
commit
464640440f

+ 25 - 0
include/SDL3/SDL_audio.h

@@ -542,6 +542,7 @@ extern DECLSPEC void SDLCALL SDL_CloseAudioDevice(SDL_AudioDeviceID devid);
  * \sa SDL_BindAudioStreams
  * \sa SDL_UnbindAudioStreams
  * \sa SDL_UnbindAudioStream
+ * \sa SDL_GetAudioStreamBinding
  */
 extern DECLSPEC int SDLCALL SDL_BindAudioStreams(SDL_AudioDeviceID devid, SDL_AudioStream **streams, int num_streams);
 
@@ -562,6 +563,7 @@ extern DECLSPEC int SDLCALL SDL_BindAudioStreams(SDL_AudioDeviceID devid, SDL_Au
  * \sa SDL_BindAudioStreams
  * \sa SDL_UnbindAudioStreams
  * \sa SDL_UnbindAudioStream
+ * \sa SDL_GetAudioStreamBinding
  */
 extern DECLSPEC int SDLCALL SDL_BindAudioStream(SDL_AudioDeviceID devid, SDL_AudioStream *stream);
 
@@ -584,6 +586,7 @@ extern DECLSPEC int SDLCALL SDL_BindAudioStream(SDL_AudioDeviceID devid, SDL_Aud
  * \sa SDL_BindAudioStreams
  * \sa SDL_BindAudioStream
  * \sa SDL_UnbindAudioStream
+ * \sa SDL_GetAudioStreamBinding
  */
 extern DECLSPEC void SDLCALL SDL_UnbindAudioStreams(SDL_AudioStream **streams, int num_streams);
 
@@ -602,9 +605,31 @@ extern DECLSPEC void SDLCALL SDL_UnbindAudioStreams(SDL_AudioStream **streams, i
  * \sa SDL_BindAudioStream
  * \sa SDL_BindAudioStreams
  * \sa SDL_UnbindAudioStreams
+ * \sa SDL_GetAudioStreamBinding
  */
 extern DECLSPEC void SDLCALL SDL_UnbindAudioStream(SDL_AudioStream *stream);
 
+/**
+ * Query an audio stream for its currently-bound device.
+ *
+ * This reports the audio device that an audio stream is currently bound to.
+ *
+ * If not bound, or invalid, this returns zero, which is not a valid device ID.
+ *
+ * \param stream the audio stream to query.
+ * \returns The bound audio device, or 0 if not bound or invalid.
+ *
+ * \threadsafety It is safe to call this function from any thread.
+ *
+ * \since This function is available since SDL 3.0.0.
+ *
+ * \sa SDL_BindAudioStream
+ * \sa SDL_BindAudioStreams
+ * \sa SDL_UnbindAudioStream
+ * \sa SDL_UnbindAudioStreams
+ */
+extern DECLSPEC SDL_AudioDeviceID SDLCALL SDL_GetAudioStreamBinding(SDL_AudioStream *stream);
+
 
 /**
  * Create a new audio stream.

+ 12 - 0
src/audio/SDL_audio.c

@@ -1357,6 +1357,18 @@ void SDL_UnbindAudioStream(SDL_AudioStream *stream)
     SDL_UnbindAudioStreams(&stream, 1);
 }
 
+SDL_AudioDeviceID SDL_GetAudioStreamBinding(SDL_AudioStream *stream)
+{
+    SDL_AudioDeviceID retval = 0;
+    if (stream) {
+        SDL_LockMutex(stream->lock);
+        if (stream->bound_device) {
+            retval = stream->bound_device->instance_id;
+        }
+        SDL_UnlockMutex(stream->lock);
+    }
+    return retval;
+}
 
 SDL_AudioStream *SDL_CreateAndBindAudioStream(SDL_AudioDeviceID devid, const SDL_AudioSpec *spec)
 {

+ 1 - 0
src/dynapi/SDL_dynapi.sym

@@ -888,6 +888,7 @@ SDL3_0.0.0 {
     SDL_PauseAudioDevice;
     SDL_UnpauseAudioDevice;
     SDL_IsAudioDevicePaused;
+    SDL_GetAudioStreamBinding;
     # extra symbols go here (don't modify this line)
   local: *;
 };

+ 1 - 0
src/dynapi/SDL_dynapi_overrides.h

@@ -914,3 +914,4 @@
 #define SDL_PauseAudioDevice SDL_PauseAudioDevice_REAL
 #define SDL_UnpauseAudioDevice SDL_UnpauseAudioDevice_REAL
 #define SDL_IsAudioDevicePaused SDL_IsAudioDevicePaused_REAL
+#define SDL_GetAudioStreamBinding SDL_GetAudioStreamBinding_REAL

+ 1 - 0
src/dynapi/SDL_dynapi_procs.h

@@ -958,3 +958,4 @@ SDL_DYNAPI_PROC(int,SDL_LoadWAV,(const char *a, SDL_AudioSpec *b, Uint8 **c, Uin
 SDL_DYNAPI_PROC(int,SDL_PauseAudioDevice,(SDL_AudioDeviceID a),(a),return)
 SDL_DYNAPI_PROC(int,SDL_UnpauseAudioDevice,(SDL_AudioDeviceID a),(a),return)
 SDL_DYNAPI_PROC(SDL_bool,SDL_IsAudioDevicePaused,(SDL_AudioDeviceID a),(a),return)
+SDL_DYNAPI_PROC(SDL_AudioDeviceID,SDL_GetAudioStreamBinding,(SDL_AudioStream *a),(a),return)