mirror of
https://github.com/godotengine/godot.git
synced 2025-12-08 06:09:55 +00:00
Further refactoring to AudioDriver implementations after #69120.
- Rename all instances of `capture_start()` and `capture_end()` to their new names. Fixes #72892. - More internal renames to match what was started in #69120. - Use `override` consistently so that such refactoring bugs can be caught. - Harmonize the order of definition of the overridden virtual methods in each audio driver. - Harmonize prototype for `set_output_device` and `set_input_device`. Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
This commit is contained in:
parent
d69809cab6
commit
c36460060e
22 changed files with 227 additions and 215 deletions
|
|
@ -43,17 +43,17 @@ extern int initialize_pulse(int verbose);
|
|||
}
|
||||
#endif
|
||||
|
||||
Error AudioDriverALSA::init_device() {
|
||||
Error AudioDriverALSA::init_output_device() {
|
||||
mix_rate = GLOBAL_GET("audio/driver/mix_rate");
|
||||
speaker_mode = SPEAKER_MODE_STEREO;
|
||||
channels = 2;
|
||||
|
||||
// If there is a specified device check that it is really present
|
||||
if (device_name != "Default") {
|
||||
PackedStringArray list = get_device_list();
|
||||
if (list.find(device_name) == -1) {
|
||||
device_name = "Default";
|
||||
new_device = "Default";
|
||||
// If there is a specified output device check that it is really present
|
||||
if (output_device_name != "Default") {
|
||||
PackedStringArray list = get_output_device_list();
|
||||
if (list.find(output_device_name) == -1) {
|
||||
output_device_name = "Default";
|
||||
new_output_device = "Default";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -75,10 +75,10 @@ Error AudioDriverALSA::init_device() {
|
|||
//6 chans - "plug:surround51"
|
||||
//4 chans - "plug:surround40";
|
||||
|
||||
if (device_name == "Default") {
|
||||
if (output_device_name == "Default") {
|
||||
status = snd_pcm_open(&pcm_handle, "default", SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK);
|
||||
} else {
|
||||
String device = device_name;
|
||||
String device = output_device_name;
|
||||
int pos = device.find(";");
|
||||
if (pos != -1) {
|
||||
device = device.substr(0, pos);
|
||||
|
|
@ -171,7 +171,7 @@ Error AudioDriverALSA::init() {
|
|||
active.clear();
|
||||
exit_thread.clear();
|
||||
|
||||
Error err = init_device();
|
||||
Error err = init_output_device();
|
||||
if (err == OK) {
|
||||
thread.start(AudioDriverALSA::thread_func, this);
|
||||
}
|
||||
|
|
@ -227,18 +227,18 @@ void AudioDriverALSA::thread_func(void *p_udata) {
|
|||
}
|
||||
}
|
||||
|
||||
// User selected a new device, finish the current one so we'll init the new device
|
||||
if (ad->device_name != ad->new_device) {
|
||||
ad->device_name = ad->new_device;
|
||||
ad->finish_device();
|
||||
// User selected a new output device, finish the current one so we'll init the new device.
|
||||
if (ad->output_device_name != ad->new_output_device) {
|
||||
ad->output_device_name = ad->new_output_device;
|
||||
ad->finish_output_device();
|
||||
|
||||
Error err = ad->init_device();
|
||||
Error err = ad->init_output_device();
|
||||
if (err != OK) {
|
||||
ERR_PRINT("ALSA: init_device error");
|
||||
ad->device_name = "Default";
|
||||
ad->new_device = "Default";
|
||||
ERR_PRINT("ALSA: init_output_device error");
|
||||
ad->output_device_name = "Default";
|
||||
ad->new_output_device = "Default";
|
||||
|
||||
err = ad->init_device();
|
||||
err = ad->init_output_device();
|
||||
if (err != OK) {
|
||||
ad->active.clear();
|
||||
ad->exit_thread.set();
|
||||
|
|
@ -263,7 +263,7 @@ AudioDriver::SpeakerMode AudioDriverALSA::get_speaker_mode() const {
|
|||
return speaker_mode;
|
||||
}
|
||||
|
||||
PackedStringArray AudioDriverALSA::get_device_list() {
|
||||
PackedStringArray AudioDriverALSA::get_output_device_list() {
|
||||
PackedStringArray list;
|
||||
|
||||
list.push_back("Default");
|
||||
|
|
@ -298,13 +298,13 @@ PackedStringArray AudioDriverALSA::get_device_list() {
|
|||
return list;
|
||||
}
|
||||
|
||||
String AudioDriverALSA::get_device() {
|
||||
return device_name;
|
||||
String AudioDriverALSA::get_output_device() {
|
||||
return output_device_name;
|
||||
}
|
||||
|
||||
void AudioDriverALSA::set_device(String device) {
|
||||
void AudioDriverALSA::set_output_device(const String &p_name) {
|
||||
lock();
|
||||
new_device = device;
|
||||
new_output_device = p_name;
|
||||
unlock();
|
||||
}
|
||||
|
||||
|
|
@ -316,7 +316,7 @@ void AudioDriverALSA::unlock() {
|
|||
mutex.unlock();
|
||||
}
|
||||
|
||||
void AudioDriverALSA::finish_device() {
|
||||
void AudioDriverALSA::finish_output_device() {
|
||||
if (pcm_handle) {
|
||||
snd_pcm_close(pcm_handle);
|
||||
pcm_handle = nullptr;
|
||||
|
|
@ -327,7 +327,7 @@ void AudioDriverALSA::finish() {
|
|||
exit_thread.set();
|
||||
thread.wait_to_finish();
|
||||
|
||||
finish_device();
|
||||
finish_output_device();
|
||||
}
|
||||
|
||||
#endif // ALSA_ENABLED
|
||||
|
|
|
|||
|
|
@ -46,14 +46,14 @@ class AudioDriverALSA : public AudioDriver {
|
|||
|
||||
snd_pcm_t *pcm_handle = nullptr;
|
||||
|
||||
String device_name = "Default";
|
||||
String new_device = "Default";
|
||||
String output_device_name = "Default";
|
||||
String new_output_device = "Default";
|
||||
|
||||
Vector<int32_t> samples_in;
|
||||
Vector<int16_t> samples_out;
|
||||
|
||||
Error init_device();
|
||||
void finish_device();
|
||||
Error init_output_device();
|
||||
void finish_output_device();
|
||||
|
||||
static void thread_func(void *p_udata);
|
||||
|
||||
|
|
@ -69,20 +69,22 @@ class AudioDriverALSA : public AudioDriver {
|
|||
SafeFlag exit_thread;
|
||||
|
||||
public:
|
||||
const char *get_name() const {
|
||||
virtual const char *get_name() const override {
|
||||
return "ALSA";
|
||||
};
|
||||
}
|
||||
|
||||
virtual Error init();
|
||||
virtual void start();
|
||||
virtual int get_mix_rate() const;
|
||||
virtual SpeakerMode get_speaker_mode() const;
|
||||
virtual PackedStringArray get_device_list();
|
||||
virtual String get_device();
|
||||
virtual void set_device(String device);
|
||||
virtual void lock();
|
||||
virtual void unlock();
|
||||
virtual void finish();
|
||||
virtual Error init() override;
|
||||
virtual void start() override;
|
||||
virtual int get_mix_rate() const override;
|
||||
virtual SpeakerMode get_speaker_mode() const override;
|
||||
|
||||
virtual void lock() override;
|
||||
virtual void unlock() override;
|
||||
virtual void finish() override;
|
||||
|
||||
virtual PackedStringArray get_output_device_list() override;
|
||||
virtual String get_output_device() override;
|
||||
virtual void set_output_device(const String &p_name) override;
|
||||
|
||||
AudioDriverALSA() {}
|
||||
~AudioDriverALSA() {}
|
||||
|
|
|
|||
|
|
@ -158,7 +158,7 @@ Error AudioDriverCoreAudio::init() {
|
|||
ERR_FAIL_COND_V(result != noErr, FAILED);
|
||||
|
||||
if (GLOBAL_GET("audio/driver/enable_input")) {
|
||||
return capture_init();
|
||||
return init_input_device();
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
|
@ -287,7 +287,7 @@ bool AudioDriverCoreAudio::try_lock() {
|
|||
}
|
||||
|
||||
void AudioDriverCoreAudio::finish() {
|
||||
capture_finish();
|
||||
finish_input_device();
|
||||
|
||||
if (audio_unit) {
|
||||
OSStatus result;
|
||||
|
|
@ -337,7 +337,7 @@ void AudioDriverCoreAudio::finish() {
|
|||
}
|
||||
}
|
||||
|
||||
Error AudioDriverCoreAudio::capture_init() {
|
||||
Error AudioDriverCoreAudio::init_input_device() {
|
||||
AudioComponentDescription desc;
|
||||
memset(&desc, 0, sizeof(desc));
|
||||
desc.componentType = kAudioUnitType_Output;
|
||||
|
|
@ -433,7 +433,7 @@ Error AudioDriverCoreAudio::capture_init() {
|
|||
return OK;
|
||||
}
|
||||
|
||||
void AudioDriverCoreAudio::capture_finish() {
|
||||
void AudioDriverCoreAudio::finish_input_device() {
|
||||
if (input_unit) {
|
||||
lock();
|
||||
|
||||
|
|
@ -471,7 +471,7 @@ void AudioDriverCoreAudio::capture_finish() {
|
|||
}
|
||||
}
|
||||
|
||||
Error AudioDriverCoreAudio::capture_start() {
|
||||
Error AudioDriverCoreAudio::input_start() {
|
||||
input_buffer_init(buffer_frames);
|
||||
|
||||
OSStatus result = AudioOutputUnitStart(input_unit);
|
||||
|
|
@ -482,7 +482,7 @@ Error AudioDriverCoreAudio::capture_start() {
|
|||
return OK;
|
||||
}
|
||||
|
||||
Error AudioDriverCoreAudio::capture_stop() {
|
||||
Error AudioDriverCoreAudio::input_stop() {
|
||||
if (input_unit) {
|
||||
OSStatus result = AudioOutputUnitStop(input_unit);
|
||||
if (result != noErr) {
|
||||
|
|
@ -647,20 +647,13 @@ String AudioDriverCoreAudio::get_output_device() {
|
|||
return output_device_name;
|
||||
}
|
||||
|
||||
void AudioDriverCoreAudio::set_output_device(String output_device) {
|
||||
output_device_name = output_device;
|
||||
void AudioDriverCoreAudio::set_output_device(const String &p_name) {
|
||||
output_device_name = p_name;
|
||||
if (active) {
|
||||
_set_device(output_device_name);
|
||||
}
|
||||
}
|
||||
|
||||
void AudioDriverCoreAudio::set_input_device(const String &p_name) {
|
||||
input_device_name = p_name;
|
||||
if (active) {
|
||||
_set_device(input_device_name, true);
|
||||
}
|
||||
}
|
||||
|
||||
PackedStringArray AudioDriverCoreAudio::get_input_device_list() {
|
||||
return _get_device_list(true);
|
||||
}
|
||||
|
|
@ -669,6 +662,13 @@ String AudioDriverCoreAudio::get_input_device() {
|
|||
return input_device_name;
|
||||
}
|
||||
|
||||
void AudioDriverCoreAudio::set_input_device(const String &p_name) {
|
||||
input_device_name = p_name;
|
||||
if (active) {
|
||||
_set_device(input_device_name, true);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
AudioDriverCoreAudio::AudioDriverCoreAudio() {
|
||||
|
|
|
|||
|
|
@ -83,39 +83,39 @@ class AudioDriverCoreAudio : public AudioDriver {
|
|||
UInt32 inBusNumber, UInt32 inNumberFrames,
|
||||
AudioBufferList *ioData);
|
||||
|
||||
Error capture_init();
|
||||
void capture_finish();
|
||||
Error init_input_device();
|
||||
void finish_input_device();
|
||||
|
||||
public:
|
||||
const char *get_name() const {
|
||||
virtual const char *get_name() const override {
|
||||
return "CoreAudio";
|
||||
};
|
||||
|
||||
virtual Error init();
|
||||
virtual void start();
|
||||
virtual int get_mix_rate() const;
|
||||
virtual SpeakerMode get_speaker_mode() const;
|
||||
virtual Error init() override;
|
||||
virtual void start() override;
|
||||
virtual int get_mix_rate() const override;
|
||||
virtual SpeakerMode get_speaker_mode() const override;
|
||||
|
||||
virtual void lock();
|
||||
virtual void unlock();
|
||||
virtual void finish();
|
||||
virtual void lock() override;
|
||||
virtual void unlock() override;
|
||||
virtual void finish() override;
|
||||
|
||||
virtual Error capture_start();
|
||||
virtual Error capture_stop();
|
||||
#ifdef MACOS_ENABLED
|
||||
virtual PackedStringArray get_output_device_list() override;
|
||||
virtual String get_output_device() override;
|
||||
virtual void set_output_device(const String &p_name) override;
|
||||
|
||||
virtual PackedStringArray get_input_device_list() override;
|
||||
virtual String get_input_device() override;
|
||||
virtual void set_input_device(const String &p_name) override;
|
||||
#endif
|
||||
|
||||
virtual Error input_start() override;
|
||||
virtual Error input_stop() override;
|
||||
|
||||
bool try_lock();
|
||||
void stop();
|
||||
|
||||
#ifdef MACOS_ENABLED
|
||||
virtual PackedStringArray get_output_device_list();
|
||||
virtual String get_output_device();
|
||||
virtual void set_output_device(String output_device);
|
||||
|
||||
virtual PackedStringArray get_input_device_list();
|
||||
virtual void set_input_device(const String &p_name);
|
||||
virtual String get_input_device();
|
||||
#endif
|
||||
|
||||
AudioDriverCoreAudio();
|
||||
~AudioDriverCoreAudio() {}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -631,9 +631,9 @@ String AudioDriverPulseAudio::get_output_device() {
|
|||
return output_device_name;
|
||||
}
|
||||
|
||||
void AudioDriverPulseAudio::set_output_device(String output_device) {
|
||||
void AudioDriverPulseAudio::set_output_device(const String &p_name) {
|
||||
lock();
|
||||
new_output_device = output_device;
|
||||
new_output_device = p_name;
|
||||
unlock();
|
||||
}
|
||||
|
||||
|
|
@ -761,12 +761,6 @@ Error AudioDriverPulseAudio::input_stop() {
|
|||
return OK;
|
||||
}
|
||||
|
||||
void AudioDriverPulseAudio::set_input_device(const String &p_name) {
|
||||
lock();
|
||||
new_input_device = p_name;
|
||||
unlock();
|
||||
}
|
||||
|
||||
void AudioDriverPulseAudio::pa_sourcelist_cb(pa_context *c, const pa_source_info *l, int eol, void *userdata) {
|
||||
AudioDriverPulseAudio *ad = static_cast<AudioDriverPulseAudio *>(userdata);
|
||||
|
||||
|
|
@ -821,6 +815,12 @@ String AudioDriverPulseAudio::get_input_device() {
|
|||
return name;
|
||||
}
|
||||
|
||||
void AudioDriverPulseAudio::set_input_device(const String &p_name) {
|
||||
lock();
|
||||
new_input_device = p_name;
|
||||
unlock();
|
||||
}
|
||||
|
||||
AudioDriverPulseAudio::AudioDriverPulseAudio() {
|
||||
samples_in.clear();
|
||||
samples_out.clear();
|
||||
|
|
|
|||
|
|
@ -94,31 +94,30 @@ class AudioDriverPulseAudio : public AudioDriver {
|
|||
static void thread_func(void *p_udata);
|
||||
|
||||
public:
|
||||
const char *get_name() const {
|
||||
virtual const char *get_name() const override {
|
||||
return "PulseAudio";
|
||||
};
|
||||
|
||||
virtual Error init();
|
||||
virtual void start();
|
||||
virtual int get_mix_rate() const;
|
||||
virtual SpeakerMode get_speaker_mode() const;
|
||||
virtual Error init() override;
|
||||
virtual void start() override;
|
||||
virtual int get_mix_rate() const override;
|
||||
virtual SpeakerMode get_speaker_mode() const override;
|
||||
virtual float get_latency() override;
|
||||
|
||||
virtual PackedStringArray get_output_device_list();
|
||||
virtual String get_output_device();
|
||||
virtual void set_output_device(String output_device);
|
||||
virtual void lock() override;
|
||||
virtual void unlock() override;
|
||||
virtual void finish() override;
|
||||
|
||||
virtual PackedStringArray get_input_device_list();
|
||||
virtual void set_input_device(const String &p_name);
|
||||
virtual String get_input_device();
|
||||
virtual PackedStringArray get_output_device_list() override;
|
||||
virtual String get_output_device() override;
|
||||
virtual void set_output_device(const String &p_name) override;
|
||||
|
||||
virtual void lock();
|
||||
virtual void unlock();
|
||||
virtual void finish();
|
||||
virtual Error input_start() override;
|
||||
virtual Error input_stop() override;
|
||||
|
||||
virtual float get_latency();
|
||||
|
||||
virtual Error input_start();
|
||||
virtual Error input_stop();
|
||||
virtual PackedStringArray get_input_device_list() override;
|
||||
virtual String get_input_device() override;
|
||||
virtual void set_input_device(const String &p_name) override;
|
||||
|
||||
AudioDriverPulseAudio();
|
||||
~AudioDriverPulseAudio() {}
|
||||
|
|
|
|||
|
|
@ -634,9 +634,9 @@ String AudioDriverWASAPI::get_output_device() {
|
|||
return name;
|
||||
}
|
||||
|
||||
void AudioDriverWASAPI::set_output_device(String output_device) {
|
||||
void AudioDriverWASAPI::set_output_device(const String &p_name) {
|
||||
lock();
|
||||
audio_output.new_device = output_device;
|
||||
audio_output.new_device = p_name;
|
||||
unlock();
|
||||
}
|
||||
|
||||
|
|
@ -964,12 +964,6 @@ Error AudioDriverWASAPI::input_stop() {
|
|||
return FAILED;
|
||||
}
|
||||
|
||||
void AudioDriverWASAPI::set_input_device(const String &p_name) {
|
||||
lock();
|
||||
audio_input.new_device = p_name;
|
||||
unlock();
|
||||
}
|
||||
|
||||
PackedStringArray AudioDriverWASAPI::get_input_device_list() {
|
||||
return audio_device_get_list(true);
|
||||
}
|
||||
|
|
@ -982,6 +976,12 @@ String AudioDriverWASAPI::get_input_device() {
|
|||
return name;
|
||||
}
|
||||
|
||||
void AudioDriverWASAPI::set_input_device(const String &p_name) {
|
||||
lock();
|
||||
audio_input.new_device = p_name;
|
||||
unlock();
|
||||
}
|
||||
|
||||
AudioDriverWASAPI::AudioDriverWASAPI() {
|
||||
samples_in.clear();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -94,27 +94,30 @@ class AudioDriverWASAPI : public AudioDriver {
|
|||
PackedStringArray audio_device_get_list(bool p_input);
|
||||
|
||||
public:
|
||||
virtual const char *get_name() const {
|
||||
virtual const char *get_name() const override {
|
||||
return "WASAPI";
|
||||
}
|
||||
|
||||
virtual Error init();
|
||||
virtual void start();
|
||||
virtual int get_mix_rate() const;
|
||||
virtual float get_latency();
|
||||
virtual SpeakerMode get_speaker_mode() const;
|
||||
virtual PackedStringArray get_output_device_list();
|
||||
virtual String get_output_device();
|
||||
virtual void set_output_device(String output_device);
|
||||
virtual void lock();
|
||||
virtual void unlock();
|
||||
virtual void finish();
|
||||
virtual Error init() override;
|
||||
virtual void start() override;
|
||||
virtual int get_mix_rate() const override;
|
||||
virtual SpeakerMode get_speaker_mode() const override;
|
||||
virtual float get_latency() override;
|
||||
|
||||
virtual Error input_start();
|
||||
virtual Error input_stop();
|
||||
virtual PackedStringArray get_input_device_list();
|
||||
virtual void set_input_device(const String &p_name);
|
||||
virtual String get_input_device();
|
||||
virtual void lock() override;
|
||||
virtual void unlock() override;
|
||||
virtual void finish() override;
|
||||
|
||||
virtual PackedStringArray get_output_device_list() override;
|
||||
virtual String get_output_device() override;
|
||||
virtual void set_output_device(const String &p_name) override;
|
||||
|
||||
virtual Error input_start() override;
|
||||
virtual Error input_stop() override;
|
||||
|
||||
virtual PackedStringArray get_input_device_list() override;
|
||||
virtual String get_input_device() override;
|
||||
virtual void set_input_device(const String &p_name) override;
|
||||
|
||||
AudioDriverWASAPI();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -33,10 +33,6 @@
|
|||
#include "core/config/project_settings.h"
|
||||
#include "core/os/os.h"
|
||||
|
||||
const char *AudioDriverXAudio2::get_name() const {
|
||||
return "XAudio2";
|
||||
}
|
||||
|
||||
Error AudioDriverXAudio2::init() {
|
||||
active.clear();
|
||||
exit_thread.clear();
|
||||
|
|
|
|||
|
|
@ -91,16 +91,19 @@ class AudioDriverXAudio2 : public AudioDriver {
|
|||
XAudio2DriverVoiceCallback voice_callback;
|
||||
|
||||
public:
|
||||
const char *get_name() const;
|
||||
virtual const char *get_name() const override {
|
||||
return "XAudio2";
|
||||
}
|
||||
|
||||
virtual Error init();
|
||||
virtual void start();
|
||||
virtual int get_mix_rate() const;
|
||||
virtual SpeakerMode get_speaker_mode() const;
|
||||
virtual float get_latency();
|
||||
virtual void lock();
|
||||
virtual void unlock();
|
||||
virtual void finish();
|
||||
virtual Error init() override;
|
||||
virtual void start() override;
|
||||
virtual int get_mix_rate() const override;
|
||||
virtual SpeakerMode get_speaker_mode() const override;
|
||||
virtual float get_latency() override;
|
||||
|
||||
virtual void lock() override;
|
||||
virtual void unlock() override;
|
||||
virtual void finish() override;
|
||||
|
||||
AudioDriverXAudio2();
|
||||
~AudioDriverXAudio2() {}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue