Fix crash caused by invalid mix_rate assignment due to bogus
project settings. We'll default to a sensible value in the case that a user has somehow managed to modify the configuration file incorrectly. Closes 69819
This commit is contained in:
parent
5860b02b63
commit
5a08091168
|
@ -44,7 +44,8 @@ extern int initialize_pulse(int verbose);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Error AudioDriverALSA::init_output_device() {
|
Error AudioDriverALSA::init_output_device() {
|
||||||
mix_rate = GLOBAL_GET("audio/driver/mix_rate");
|
mix_rate = _get_configured_mix_rate();
|
||||||
|
|
||||||
speaker_mode = SPEAKER_MODE_STEREO;
|
speaker_mode = SPEAKER_MODE_STEREO;
|
||||||
channels = 2;
|
channels = 2;
|
||||||
|
|
||||||
|
|
|
@ -116,7 +116,7 @@ Error AudioDriverCoreAudio::init() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
mix_rate = GLOBAL_GET("audio/driver/mix_rate");
|
mix_rate = _get_configured_mix_rate();
|
||||||
|
|
||||||
memset(&strdesc, 0, sizeof(strdesc));
|
memset(&strdesc, 0, sizeof(strdesc));
|
||||||
strdesc.mFormatID = kAudioFormatLinearPCM;
|
strdesc.mFormatID = kAudioFormatLinearPCM;
|
||||||
|
@ -405,7 +405,7 @@ Error AudioDriverCoreAudio::init_input_device() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
mix_rate = GLOBAL_GET("audio/driver/mix_rate");
|
mix_rate = _get_configured_mix_rate();
|
||||||
|
|
||||||
memset(&strdesc, 0, sizeof(strdesc));
|
memset(&strdesc, 0, sizeof(strdesc));
|
||||||
strdesc.mFormatID = kAudioFormatLinearPCM;
|
strdesc.mFormatID = kAudioFormatLinearPCM;
|
||||||
|
|
|
@ -293,7 +293,7 @@ Error AudioDriverPulseAudio::init() {
|
||||||
active.clear();
|
active.clear();
|
||||||
exit_thread.clear();
|
exit_thread.clear();
|
||||||
|
|
||||||
mix_rate = GLOBAL_GET("audio/driver/mix_rate");
|
mix_rate = _get_configured_mix_rate();
|
||||||
|
|
||||||
pa_ml = pa_mainloop_new();
|
pa_ml = pa_mainloop_new();
|
||||||
ERR_FAIL_COND_V(pa_ml == nullptr, ERR_CANT_OPEN);
|
ERR_FAIL_COND_V(pa_ml == nullptr, ERR_CANT_OPEN);
|
||||||
|
|
|
@ -547,7 +547,7 @@ Error AudioDriverWASAPI::finish_input_device() {
|
||||||
}
|
}
|
||||||
|
|
||||||
Error AudioDriverWASAPI::init() {
|
Error AudioDriverWASAPI::init() {
|
||||||
mix_rate = GLOBAL_GET("audio/driver/mix_rate");
|
mix_rate = _get_configured_mix_rate();
|
||||||
|
|
||||||
target_latency_ms = GLOBAL_GET("audio/driver/output_latency");
|
target_latency_ms = GLOBAL_GET("audio/driver/output_latency");
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,8 @@ Error AudioDriverXAudio2::init() {
|
||||||
pcm_open = false;
|
pcm_open = false;
|
||||||
samples_in = nullptr;
|
samples_in = nullptr;
|
||||||
|
|
||||||
mix_rate = GLOBAL_GET("audio/driver/mix_rate");
|
mix_rate = _get_configured_mix_rate();
|
||||||
|
|
||||||
// FIXME: speaker_mode seems unused in the Xaudio2 driver so far
|
// FIXME: speaker_mode seems unused in the Xaudio2 driver so far
|
||||||
speaker_mode = SPEAKER_MODE_STEREO;
|
speaker_mode = SPEAKER_MODE_STEREO;
|
||||||
channels = 2;
|
channels = 2;
|
||||||
|
|
|
@ -103,7 +103,7 @@ void AudioDriverWeb::_audio_driver_capture(int p_from, int p_samples) {
|
||||||
Error AudioDriverWeb::init() {
|
Error AudioDriverWeb::init() {
|
||||||
int latency = GLOBAL_GET("audio/driver/output_latency");
|
int latency = GLOBAL_GET("audio/driver/output_latency");
|
||||||
if (!audio_context.inited) {
|
if (!audio_context.inited) {
|
||||||
audio_context.mix_rate = GLOBAL_GET("audio/driver/mix_rate");
|
audio_context.mix_rate = _get_configured_mix_rate();
|
||||||
audio_context.channel_count = godot_audio_init(&audio_context.mix_rate, latency, &_state_change_callback, &_latency_update_callback);
|
audio_context.channel_count = godot_audio_init(&audio_context.mix_rate, latency, &_state_change_callback, &_latency_update_callback);
|
||||||
audio_context.inited = true;
|
audio_context.inited = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ Error AudioDriverDummy::init() {
|
||||||
samples_in = nullptr;
|
samples_in = nullptr;
|
||||||
|
|
||||||
if (mix_rate == -1) {
|
if (mix_rate == -1) {
|
||||||
mix_rate = GLOBAL_GET("audio/driver/mix_rate");
|
mix_rate = _get_configured_mix_rate();
|
||||||
}
|
}
|
||||||
|
|
||||||
channels = get_channels();
|
channels = get_channels();
|
||||||
|
|
|
@ -115,6 +115,20 @@ void AudioDriver::input_buffer_write(int32_t sample) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int AudioDriver::_get_configured_mix_rate() {
|
||||||
|
StringName audio_driver_setting = "audio/driver/mix_rate";
|
||||||
|
int mix_rate = GLOBAL_GET(audio_driver_setting);
|
||||||
|
|
||||||
|
// In the case of invalid mix rate, let's default to a sensible value..
|
||||||
|
if (mix_rate <= 0) {
|
||||||
|
WARN_PRINT(vformat("Invalid mix rate of %d, consider reassigning setting \'%s\'. \nDefaulting mix rate to value %d.",
|
||||||
|
mix_rate, audio_driver_setting, AudioDriverManager::DEFAULT_MIX_RATE));
|
||||||
|
mix_rate = AudioDriverManager::DEFAULT_MIX_RATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return mix_rate;
|
||||||
|
}
|
||||||
|
|
||||||
AudioDriver::SpeakerMode AudioDriver::get_speaker_mode_by_total_channels(int p_channels) const {
|
AudioDriver::SpeakerMode AudioDriver::get_speaker_mode_by_total_channels(int p_channels) const {
|
||||||
switch (p_channels) {
|
switch (p_channels) {
|
||||||
case 4:
|
case 4:
|
||||||
|
|
|
@ -66,6 +66,8 @@ protected:
|
||||||
void input_buffer_init(int driver_buffer_frames);
|
void input_buffer_init(int driver_buffer_frames);
|
||||||
void input_buffer_write(int32_t sample);
|
void input_buffer_write(int32_t sample);
|
||||||
|
|
||||||
|
int _get_configured_mix_rate();
|
||||||
|
|
||||||
#ifdef DEBUG_ENABLED
|
#ifdef DEBUG_ENABLED
|
||||||
_FORCE_INLINE_ void start_counting_ticks() { prof_ticks = OS::get_singleton()->get_ticks_usec(); }
|
_FORCE_INLINE_ void start_counting_ticks() { prof_ticks = OS::get_singleton()->get_ticks_usec(); }
|
||||||
_FORCE_INLINE_ void stop_counting_ticks() { prof_time += OS::get_singleton()->get_ticks_usec() - prof_ticks; }
|
_FORCE_INLINE_ void stop_counting_ticks() { prof_time += OS::get_singleton()->get_ticks_usec() - prof_ticks; }
|
||||||
|
@ -136,7 +138,6 @@ class AudioDriverManager {
|
||||||
MAX_DRIVERS = 10
|
MAX_DRIVERS = 10
|
||||||
};
|
};
|
||||||
|
|
||||||
static const int DEFAULT_MIX_RATE = 44100;
|
|
||||||
static const int DEFAULT_OUTPUT_LATENCY = 15;
|
static const int DEFAULT_OUTPUT_LATENCY = 15;
|
||||||
|
|
||||||
static AudioDriver *drivers[MAX_DRIVERS];
|
static AudioDriver *drivers[MAX_DRIVERS];
|
||||||
|
@ -145,6 +146,8 @@ class AudioDriverManager {
|
||||||
static AudioDriverDummy dummy_driver;
|
static AudioDriverDummy dummy_driver;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
static const int DEFAULT_MIX_RATE = 44100;
|
||||||
|
|
||||||
static void add_driver(AudioDriver *p_driver);
|
static void add_driver(AudioDriver *p_driver);
|
||||||
static void initialize(int p_driver);
|
static void initialize(int p_driver);
|
||||||
static int get_driver_count();
|
static int get_driver_count();
|
||||||
|
|
Loading…
Reference in New Issue