Skip to content

Commit

Permalink
Further refactoring to AudioDriver implementations after godotengine#…
Browse files Browse the repository at this point in the history
…69120.

- Rename all instances of `capture_start()` and `capture_end()` to their new
  names. Fixes godotengine#72892.
- More internal renames to match what was started in godotengine#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 <[email protected]>
  • Loading branch information
2 people authored and JeffVenancius committed Feb 13, 2023
1 parent d5ae396 commit 055ee0b
Show file tree
Hide file tree
Showing 22 changed files with 229 additions and 217 deletions.
52 changes: 26 additions & 26 deletions drivers/alsa/audio_driver_alsa.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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";
}
}

Expand All @@ -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);
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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();
Expand All @@ -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");
Expand Down Expand Up @@ -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();
}

Expand All @@ -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;
Expand All @@ -327,7 +327,7 @@ void AudioDriverALSA::finish() {
exit_thread.set();
thread.wait_to_finish();

finish_device();
finish_output_device();
}

#endif // ALSA_ENABLED
36 changes: 19 additions & 17 deletions drivers/alsa/audio_driver_alsa.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand All @@ -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() {}
Expand Down
30 changes: 15 additions & 15 deletions drivers/coreaudio/audio_driver_coreaudio.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -287,7 +287,7 @@ bool AudioDriverCoreAudio::try_lock() {
}

void AudioDriverCoreAudio::finish() {
capture_finish();
finish_input_device();

if (audio_unit) {
OSStatus result;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -433,7 +433,7 @@ Error AudioDriverCoreAudio::capture_init() {
return OK;
}

void AudioDriverCoreAudio::capture_finish() {
void AudioDriverCoreAudio::finish_input_device() {
if (input_unit) {
lock();

Expand Down Expand Up @@ -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);
Expand All @@ -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) {
Expand Down Expand Up @@ -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);
}
Expand All @@ -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() {
Expand Down
44 changes: 22 additions & 22 deletions drivers/coreaudio/audio_driver_coreaudio.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 Error capture_start();
virtual Error capture_stop();

bool try_lock();
void stop();
virtual void lock() override;
virtual void unlock() override;
virtual void finish() override;

#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_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();
virtual void set_input_device(const String &p_name);
virtual String get_input_device();
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();

AudioDriverCoreAudio();
~AudioDriverCoreAudio() {}
};
Expand Down
16 changes: 8 additions & 8 deletions drivers/pulseaudio/audio_driver_pulseaudio.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}

Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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();
Expand Down
Loading

0 comments on commit 055ee0b

Please sign in to comment.