Procházet zdrojové kódy

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 před 1 rokem
rodič
revize
c552cc6847

+ 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;
 }