mirror of
https://github.com/Relintai/pandemonium_engine_minimal.git
synced 2024-11-17 22:17:19 +01:00
103 lines
2.4 KiB
C++
103 lines
2.4 KiB
C++
#ifndef AUDIO_DRIVER_PULSEAUDIO_H
|
|
#define AUDIO_DRIVER_PULSEAUDIO_H
|
|
|
|
/* audio_driver_pulseaudio.h */
|
|
|
|
|
|
#ifdef PULSEAUDIO_ENABLED
|
|
|
|
#include "core/os/mutex.h"
|
|
#include "core/os/thread.h"
|
|
#include "core/os/safe_refcount.h"
|
|
#include "servers/audio_server.h"
|
|
|
|
#include "pulse-so_wrap.h"
|
|
|
|
class AudioDriverPulseAudio : public AudioDriver {
|
|
Thread thread;
|
|
Mutex mutex;
|
|
|
|
pa_mainloop *pa_ml;
|
|
pa_context *pa_ctx;
|
|
pa_stream *pa_str;
|
|
pa_stream *pa_rec_str;
|
|
pa_channel_map pa_map;
|
|
pa_channel_map pa_rec_map;
|
|
|
|
String device_name;
|
|
String new_device;
|
|
String default_device;
|
|
|
|
String capture_device_name;
|
|
String capture_new_device;
|
|
String capture_default_device;
|
|
|
|
Vector<int32_t> samples_in;
|
|
Vector<int16_t> samples_out;
|
|
|
|
unsigned int mix_rate;
|
|
unsigned int buffer_frames;
|
|
unsigned int pa_buffer_size;
|
|
int channels;
|
|
int pa_ready;
|
|
int pa_status;
|
|
Array pa_devices;
|
|
Array pa_rec_devices;
|
|
|
|
SafeFlag active;
|
|
SafeFlag exit_thread;
|
|
|
|
float latency;
|
|
|
|
static void pa_state_cb(pa_context *c, void *userdata);
|
|
static void pa_sink_info_cb(pa_context *c, const pa_sink_info *l, int eol, void *userdata);
|
|
static void pa_source_info_cb(pa_context *c, const pa_source_info *l, int eol, void *userdata);
|
|
static void pa_server_info_cb(pa_context *c, const pa_server_info *i, void *userdata);
|
|
static void pa_sinklist_cb(pa_context *c, const pa_sink_info *l, int eol, void *userdata);
|
|
static void pa_sourcelist_cb(pa_context *c, const pa_source_info *l, int eol, void *userdata);
|
|
|
|
Error init_device();
|
|
void finish_device();
|
|
|
|
Error capture_init_device();
|
|
void capture_finish_device();
|
|
|
|
Error detect_channels(bool capture = false);
|
|
|
|
static void thread_func(void *p_udata);
|
|
|
|
public:
|
|
const char *get_name() const {
|
|
return "PulseAudio";
|
|
};
|
|
|
|
virtual Error init();
|
|
virtual void start();
|
|
virtual int get_mix_rate() const;
|
|
virtual SpeakerMode get_speaker_mode() const;
|
|
|
|
virtual Array get_device_list();
|
|
virtual String get_device();
|
|
virtual void set_device(String device);
|
|
|
|
virtual Array capture_get_device_list();
|
|
virtual void capture_set_device(const String &p_name);
|
|
virtual String capture_get_device();
|
|
|
|
virtual void lock();
|
|
virtual void unlock();
|
|
virtual void finish();
|
|
|
|
virtual float get_latency();
|
|
|
|
virtual Error capture_start();
|
|
virtual Error capture_stop();
|
|
|
|
AudioDriverPulseAudio();
|
|
~AudioDriverPulseAudio();
|
|
};
|
|
|
|
#endif // PULSEAUDIO_ENABLED
|
|
|
|
#endif // AUDIO_DRIVER_PULSEAUDIO_H
|