Merged r3138:3139 from branches/SDL-1.2: Don't init audio callback buffer.
authorRyan C. Gordon <icculus@icculus.org>
Thu, 05 Jul 2007 02:30:10 +0000
changeset 2144 665c2669e6a3
parent 2143 e906da4414a3
child 2145 5c14978b1e97
Merged r3138:3139 from branches/SDL-1.2: Don't init audio callback buffer. (This already had a concession for devices opened via the 1.2 entry points, I've changed it to respect the environment variable and do it for all devices now.)
src/audio/SDL_audio.c
--- a/src/audio/SDL_audio.c	Wed Jul 04 08:01:04 2007 +0000
+++ b/src/audio/SDL_audio.c	Thu Jul 05 02:30:10 2007 +0000
@@ -144,6 +144,13 @@
     NULL
 };
 
+/*
+ * If non-zero, use legacy behaviour (memset the callback buffer before call).
+ * Changed to NOT initializing the buffer before the callback in 1.2.12.
+ * Set environment SDL_AUDIO_MUST_INIT_BUFFERS=1 to get old behaviour.
+ */
+static int must_init_callback_buffer = 0;
+
 static SDL_AudioDevice *
 get_audio_device(SDL_AudioDeviceID id)
 {
@@ -258,7 +265,6 @@
 SDL_RunAudio(void *devicep)
 {
     SDL_AudioDevice *device = (SDL_AudioDevice *) devicep;
-    const int legacy_device = (device == open_devices[0]);
     Uint8 *stream;
     int stream_len;
     void *udata;
@@ -303,7 +309,7 @@
         }
 
         /* New code should fill buffer or set it to silence themselves. */
-        if (legacy_device) {
+        if ( must_init_callback_buffer ) {
             SDL_memset(stream, silence, stream_len);
         }
 
@@ -390,6 +396,9 @@
     int i = 0;
     int initialized = 0;
     int tried_to_init = 0;
+    const char *envr = SDL_getenv("SDL_AUDIO_MUST_INIT_BUFFERS");
+
+    must_init_callback_buffer = ((envr != NULL) && (SDL_atoi(envr)));
 
     if (SDL_WasInit(SDL_INIT_AUDIO)) {
         SDL_AudioQuit();        /* shutdown driver if already running. */