Fixed bug 3662 - Error message when using the audio conversion setup without an initialized audio subsystem is a bit vague

Simon Hug

This issue actually raises the question if this API change (requirement of initialized audio subsystem) is breaking backwards compatibility. I don't see the documentation saying it is needed in 2.0.5.
Sam Lantinga 2017-08-28 21:42:39 -07:00
parent b128e8802d
commit d619d88560
4 changed files with 13 additions and 16 deletions

View File

@ -874,8 +874,6 @@ SDL_GetAudioDriver(int index)
return NULL; return NULL;
} }
extern void SDL_ChooseAudioConverters(void);
int int
SDL_AudioInit(const char *driver_name) SDL_AudioInit(const char *driver_name)
{ {
@ -890,8 +888,6 @@ SDL_AudioInit(const char *driver_name)
SDL_zero(current_audio); SDL_zero(current_audio);
SDL_zero(open_devices); SDL_zero(open_devices);
SDL_ChooseAudioConverters();
/* Select the proper audio driver */ /* Select the proper audio driver */
if (driver_name == NULL) { if (driver_name == NULL) {
driver_name = SDL_getenv("SDL_AUDIODRIVER"); driver_name = SDL_getenv("SDL_AUDIODRIVER");

View File

@ -54,7 +54,10 @@ extern SDL_AudioFormat SDL_NextAudioFormat(void);
/* Function to calculate the size and silence for a SDL_AudioSpec */ /* Function to calculate the size and silence for a SDL_AudioSpec */
extern void SDL_CalculateAudioSpec(SDL_AudioSpec * spec); extern void SDL_CalculateAudioSpec(SDL_AudioSpec * spec);
/* These pointers get set during init to various SIMD implementations. */ /* Choose the audio filter functions below */
extern void SDL_ChooseAudioConverters(void);
/* These pointers get set during SDL_ChooseAudioConverters() to various SIMD implementations. */
extern SDL_AudioFilter SDL_Convert_S8_to_F32; extern SDL_AudioFilter SDL_Convert_S8_to_F32;
extern SDL_AudioFilter SDL_Convert_U8_to_F32; extern SDL_AudioFilter SDL_Convert_U8_to_F32;
extern SDL_AudioFilter SDL_Convert_S16_to_F32; extern SDL_AudioFilter SDL_Convert_S16_to_F32;

View File

@ -895,11 +895,6 @@ SDL_BuildAudioCVT(SDL_AudioCVT * cvt,
return SDL_InvalidParamError("cvt"); return SDL_InvalidParamError("cvt");
} }
/* Conversions from and to float require the audio subsystem to be initialized */
if (!SDL_WasInit(SDL_INIT_AUDIO)) {
return SDL_SetError("Audio subsystem has not been initialized");
}
/* Make sure we zero out the audio conversion before error checking */ /* Make sure we zero out the audio conversion before error checking */
SDL_zerop(cvt); SDL_zerop(cvt);
@ -932,6 +927,9 @@ SDL_BuildAudioCVT(SDL_AudioCVT * cvt,
cvt->len_ratio = 1.0; cvt->len_ratio = 1.0;
cvt->rate_incr = ((double) dst_rate) / ((double) src_rate); cvt->rate_incr = ((double) dst_rate) / ((double) src_rate);
/* Make sure we've chosen audio conversion functions (MMX, scalar, etc.) */
SDL_ChooseAudioConverters();
/* SDL now favors float32 as its preferred internal format, and considers /* SDL now favors float32 as its preferred internal format, and considers
everything else to be a degenerate case that we might have to make everything else to be a degenerate case that we might have to make
multiple passes over the data to convert to and from float32 as multiple passes over the data to convert to and from float32 as

View File

@ -752,7 +752,7 @@ void SDL_ChooseAudioConverters(void)
return; return;
} }
#define SET_CONVERTER_FUNCS(fntype) \ #define SET_CONVERTER_FUNCS(fntype) \
SDL_Convert_S8_to_F32 = SDL_Convert_S8_to_F32_##fntype; \ SDL_Convert_S8_to_F32 = SDL_Convert_S8_to_F32_##fntype; \
SDL_Convert_U8_to_F32 = SDL_Convert_U8_to_F32_##fntype; \ SDL_Convert_U8_to_F32 = SDL_Convert_U8_to_F32_##fntype; \
SDL_Convert_S16_to_F32 = SDL_Convert_S16_to_F32_##fntype; \ SDL_Convert_S16_to_F32 = SDL_Convert_S16_to_F32_##fntype; \
@ -765,18 +765,18 @@ void SDL_ChooseAudioConverters(void)
SDL_Convert_F32_to_S32 = SDL_Convert_F32_to_S32_##fntype; \ SDL_Convert_F32_to_S32 = SDL_Convert_F32_to_S32_##fntype; \
converters_chosen = SDL_TRUE converters_chosen = SDL_TRUE
#if HAVE_SSE2_INTRINSICS #if HAVE_SSE2_INTRINSICS
if (SDL_HasSSE2()) { if (SDL_HasSSE2()) {
SET_CONVERTER_FUNCS(SSE2); SET_CONVERTER_FUNCS(SSE2);
return; return;
} }
#endif #endif
#if NEED_SCALAR_CONVERTER_FALLBACKS #if NEED_SCALAR_CONVERTER_FALLBACKS
SET_CONVERTER_FUNCS(Scalar); SET_CONVERTER_FUNCS(Scalar);
#endif #endif
#undef SET_CONVERTER_FUNCS #undef SET_CONVERTER_FUNCS
SDL_assert(converters_chosen == SDL_TRUE); SDL_assert(converters_chosen == SDL_TRUE);
} }