diff options
Diffstat (limited to 'drivers/wasapi/audio_driver_wasapi.h')
| -rw-r--r-- | drivers/wasapi/audio_driver_wasapi.h | 71 |
1 files changed, 41 insertions, 30 deletions
diff --git a/drivers/wasapi/audio_driver_wasapi.h b/drivers/wasapi/audio_driver_wasapi.h index e722d85353..a131eb5dae 100644 --- a/drivers/wasapi/audio_driver_wasapi.h +++ b/drivers/wasapi/audio_driver_wasapi.h @@ -43,53 +43,63 @@ class AudioDriverWASAPI : public AudioDriver { - HANDLE event; - // Audio out - IAudioClient *audio_client; - IAudioRenderClient *render_client; - // Microphone - class MicrophoneDeviceOutputDirectWASAPI : public MicrophoneDeviceOutputDirect { + class AudioDeviceWASAPI { public: IAudioClient *audio_client; + IAudioRenderClient *render_client; IAudioCaptureClient *capture_client; - WORD capture_format_tag; + bool active; + + WORD format_tag; + WORD bits_per_sample; + unsigned int channels; + unsigned int frame_size; + + String device_name; + String new_device; + + AudioDeviceWASAPI() { + audio_client = NULL; + render_client = NULL; + capture_client = NULL; + active = false; + format_tag = 0; + bits_per_sample = 0; + channels = 0; + frame_size = 0; + device_name = "Default"; + new_device = "Default"; + } }; - // - Mutex *mutex; - Thread *thread; - String device_name; - String new_device; - String capture_device_default_name; + AudioDeviceWASAPI audio_input; + AudioDeviceWASAPI audio_output; - WORD format_tag; - WORD bits_per_sample; + Mutex *mutex; + Thread *thread; Vector<int32_t> samples_in; - Map<StringName, StringName> capture_device_id_map; - - unsigned int buffer_size; unsigned int channels; - unsigned int wasapi_channels; int mix_rate; int buffer_frames; bool thread_exited; mutable bool exit_thread; - bool active; - _FORCE_INLINE_ void write_sample(AudioDriverWASAPI *ad, BYTE *buffer, int i, int32_t sample); - static _FORCE_INLINE_ float read_sample(WORD format_tag, int bits_per_sample, BYTE *buffer, int i); + static _FORCE_INLINE_ void write_sample(WORD format_tag, int bits_per_sample, BYTE *buffer, int i, int32_t sample); + static _FORCE_INLINE_ int32_t read_sample(WORD format_tag, int bits_per_sample, BYTE *buffer, int i); static void thread_func(void *p_udata); - StringName get_default_capture_device_name(IMMDeviceEnumerator *p_enumerator); - Error init_render_device(bool reinit = false); - Error init_capture_devices(bool reinit = false); + Error init_capture_device(bool reinit = false); Error finish_render_device(); - Error finish_capture_devices(); + Error finish_capture_device(); + + Error audio_device_init(AudioDeviceWASAPI *p_device, bool p_capture, bool reinit); + Error audio_device_finish(AudioDeviceWASAPI *p_device); + Array audio_device_get_list(bool p_capture); public: virtual const char *get_name() const { @@ -107,10 +117,11 @@ public: virtual void unlock(); virtual void finish(); - virtual bool capture_device_start(StringName p_name); - virtual bool capture_device_stop(StringName p_name); - virtual PoolStringArray capture_device_get_names(); - virtual StringName capture_device_get_default_name(); + virtual Error capture_start(); + virtual Error capture_stop(); + virtual Array capture_get_device_list(); + virtual void capture_set_device(StringName p_name); + virtual StringName capture_get_device(); AudioDriverWASAPI(); }; |
