Browse Source

We don't require the audio system to be initialized for audio format conversion

This is helpful for tools pipelines where audio devices are never used.
Sam Lantinga 1 year ago
parent
commit
c552cc6847
3 changed files with 9 additions and 7 deletions
  1. 0 3
      src/audio/SDL_audio.c
  2. 2 4
      src/audio/SDL_audiocvt.c
  3. 7 0
      test/testautomation_audio.c

+ 0 - 3
src/audio/SDL_audio.c

@@ -602,9 +602,6 @@ int SDL_InitAudio(const char *driver_name)
         SDL_QuitAudio(); // shutdown driver if already running.
     }
 
-    SDL_ChooseAudioConverters();
-    SDL_SetupAudioResampler();
-
     SDL_RWLock *device_list_lock = SDL_CreateRWLock();  // create this early, so if it fails we don't have to tear down the whole audio subsystem.
     if (!device_list_lock) {
         return -1;

+ 2 - 4
src/audio/SDL_audiocvt.c

@@ -404,10 +404,8 @@ static int UpdateAudioStreamInputSpec(SDL_AudioStream *stream, const SDL_AudioSp
 
 SDL_AudioStream *SDL_CreateAudioStream(const SDL_AudioSpec *src_spec, const SDL_AudioSpec *dst_spec)
 {
-    if (!SDL_WasInit(SDL_INIT_AUDIO)) {
-        SDL_SetError("Audio subsystem is not initialized");
-        return NULL;
-    }
+    SDL_ChooseAudioConverters();
+    SDL_SetupAudioResampler();
 
     SDL_AudioStream *retval = (SDL_AudioStream *)SDL_calloc(1, sizeof(SDL_AudioStream));
     if (retval == NULL) {

+ 7 - 0
test/testautomation_audio.c

@@ -481,6 +481,10 @@ static int audio_buildAudioStream(void *arg)
     SDL_AudioSpec spec2;
     int i, ii, j, jj, k, kk;
 
+    /* Call Quit */
+    SDL_QuitSubSystem(SDL_INIT_AUDIO);
+    SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)");
+
     /* No conversion needed */
     spec1.format = SDL_AUDIO_S16LE;
     spec1.channels = 2;
@@ -528,6 +532,9 @@ static int audio_buildAudioStream(void *arg)
         }
     }
 
+    /* Restart audio again */
+    audioSetUp(NULL);
+
     return TEST_COMPLETED;
 }