src/audio/SDL_audio.c
changeset 2144 665c2669e6a3
parent 2141 e1a70460c354
child 2147 a5f11bc178b4
equal deleted inserted replaced
2143:e906da4414a3 2144:665c2669e6a3
   142     &DART_bootstrap,
   142     &DART_bootstrap,
   143 #endif
   143 #endif
   144     NULL
   144     NULL
   145 };
   145 };
   146 
   146 
       
   147 /*
       
   148  * If non-zero, use legacy behaviour (memset the callback buffer before call).
       
   149  * Changed to NOT initializing the buffer before the callback in 1.2.12.
       
   150  * Set environment SDL_AUDIO_MUST_INIT_BUFFERS=1 to get old behaviour.
       
   151  */
       
   152 static int must_init_callback_buffer = 0;
       
   153 
   147 static SDL_AudioDevice *
   154 static SDL_AudioDevice *
   148 get_audio_device(SDL_AudioDeviceID id)
   155 get_audio_device(SDL_AudioDeviceID id)
   149 {
   156 {
   150     id--;
   157     id--;
   151     if ((id >= SDL_arraysize(open_devices)) || (open_devices[id] == NULL)) {
   158     if ((id >= SDL_arraysize(open_devices)) || (open_devices[id] == NULL)) {
   256 /* The general mixing thread function */
   263 /* The general mixing thread function */
   257 int SDLCALL
   264 int SDLCALL
   258 SDL_RunAudio(void *devicep)
   265 SDL_RunAudio(void *devicep)
   259 {
   266 {
   260     SDL_AudioDevice *device = (SDL_AudioDevice *) devicep;
   267     SDL_AudioDevice *device = (SDL_AudioDevice *) devicep;
   261     const int legacy_device = (device == open_devices[0]);
       
   262     Uint8 *stream;
   268     Uint8 *stream;
   263     int stream_len;
   269     int stream_len;
   264     void *udata;
   270     void *udata;
   265     void (SDLCALL * fill) (void *userdata, Uint8 * stream, int len);
   271     void (SDLCALL * fill) (void *userdata, Uint8 * stream, int len);
   266     int silence;
   272     int silence;
   301                 stream = device->fake_stream;
   307                 stream = device->fake_stream;
   302             }
   308             }
   303         }
   309         }
   304 
   310 
   305         /* New code should fill buffer or set it to silence themselves. */
   311         /* New code should fill buffer or set it to silence themselves. */
   306         if (legacy_device) {
   312         if ( must_init_callback_buffer ) {
   307             SDL_memset(stream, silence, stream_len);
   313             SDL_memset(stream, silence, stream_len);
   308         }
   314         }
   309 
   315 
   310         if (!device->paused) {
   316         if (!device->paused) {
   311             SDL_mutexP(device->mixer_lock);
   317             SDL_mutexP(device->mixer_lock);
   388 SDL_AudioInit(const char *driver_name)
   394 SDL_AudioInit(const char *driver_name)
   389 {
   395 {
   390     int i = 0;
   396     int i = 0;
   391     int initialized = 0;
   397     int initialized = 0;
   392     int tried_to_init = 0;
   398     int tried_to_init = 0;
       
   399     const char *envr = SDL_getenv("SDL_AUDIO_MUST_INIT_BUFFERS");
       
   400 
       
   401     must_init_callback_buffer = ((envr != NULL) && (SDL_atoi(envr)));
   393 
   402 
   394     if (SDL_WasInit(SDL_INIT_AUDIO)) {
   403     if (SDL_WasInit(SDL_INIT_AUDIO)) {
   395         SDL_AudioQuit();        /* shutdown driver if already running. */
   404         SDL_AudioQuit();        /* shutdown driver if already running. */
   396     }
   405     }
   397 
   406