bool can_request_update_devices () { return true; }
bool update_devices ();
+ bool can_use_buffered_io () { return true; }
+ void set_use_buffered_io (bool);
+ bool get_use_buffered_io () { return _use_blocking_api; }
+
bool use_separate_input_and_output_devices () const;
+ bool match_input_output_devices_or_none () const { return true; }
std::vector<DeviceStatus> enumerate_devices () const;
std::vector<DeviceStatus> enumerate_input_devices () const;
std::vector<DeviceStatus> enumerate_output_devices () const;
int set_output_channels (uint32_t);
int set_systemic_input_latency (uint32_t);
int set_systemic_output_latency (uint32_t);
- int set_systemic_midi_input_latency (std::string const, uint32_t) { return 0; }
- int set_systemic_midi_output_latency (std::string const, uint32_t) { return 0; }
+ int set_systemic_midi_input_latency (std::string const, uint32_t);
+ int set_systemic_midi_output_latency (std::string const, uint32_t);
int reset_device () { return 0; };
uint32_t output_channels () const;
uint32_t systemic_input_latency () const;
uint32_t systemic_output_latency () const;
- uint32_t systemic_midi_input_latency (std::string const) const { return 0; }
- uint32_t systemic_midi_output_latency (std::string const) const { return 0; }
+ uint32_t systemic_midi_input_latency (std::string const) const;
+ uint32_t systemic_midi_output_latency (std::string const) const;
- bool can_set_systemic_midi_latencies () const { return false; }
+ bool can_set_systemic_midi_latencies () const { return true; }
/* External control app */
std::string control_app_name () const;
int set_midi_option (const std::string&);
std::string midi_option () const;
- std::vector<DeviceStatus> enumerate_midi_devices () const {
- return std::vector<AudioBackend::DeviceStatus> ();
- }
- int set_midi_device_enabled (std::string const, bool) {
- return 0;
- }
- bool midi_device_enabled (std::string const) const {
- return true;
- }
+ std::vector<DeviceStatus> enumerate_midi_devices () const;
+ int set_midi_device_enabled (std::string const, bool);
+ bool midi_device_enabled (std::string const) const;
protected:
/* State Control */
std::string get_port_name (PortHandle) const;
PortHandle get_port_by_name (const std::string&) const;
int get_port_property (PortHandle, const std::string& key, std::string& value, std::string& type) const;
+ int set_port_property (PortHandle, const std::string& key, const std::string& value, const std::string& type);
int get_ports (const std::string& port_name_pattern, DataType type, PortFlags flags, std::vector<std::string>&) const;
void* get_buffer (PortHandle, pframes_t);
- void* main_blocking_process_thread ();
+ void* blocking_process_thread ();
void* freewheel_process_thread ();
bool _run; /* keep going or stop, ardour thread */
bool _active; /* is running, process thread */
+ bool _use_blocking_api;
bool _freewheel;
bool _freewheeling;
bool _freewheel_ack;
bool _reinit_thread_callback;
bool _measure_latency;
- ARDOUR::DSPLoadCalculator m_dsp_calc;
+ ARDOUR::DSPLoadCalculator _dsp_calc;
- bool m_freewheel_thread_active;
+ bool _freewheel_thread_active;
- pthread_mutex_t m_freewheel_mutex;
- pthread_cond_t m_freewheel_signal;
+ pthread_mutex_t _freewheel_mutex;
+ pthread_cond_t _freewheel_signal;
- uint64_t m_cycle_count;
- uint64_t m_total_deviation_us;
- uint64_t m_max_deviation_us;
+ uint64_t _cycle_count;
+ uint64_t _total_deviation_us;
+ uint64_t _max_deviation_us;
- CycleTimer m_cycle_timer;
- uint64_t m_last_cycle_start;
+ CycleTimer _cycle_timer;
+ uint64_t _last_cycle_start;
static std::vector<std::string> _midi_options;
static std::vector<AudioBackend::DeviceStatus> _input_audio_device_status;
uint32_t _systemic_audio_input_latency;
uint32_t _systemic_audio_output_latency;
+ MidiDeviceInfo* midi_device_info(const std::string&) const;
+
/* portaudio specific */
int name_to_id(std::string) const;
pthread_t _main_blocking_thread;
/* main thread in callback mode(or fw thread when running) */
- pthread_t m_main_thread;
+ pthread_t _main_thread;
/* freewheel thread in callback mode */
- pthread_t m_pthread_freewheel;
+ pthread_t _pthread_freewheel;
/* process threads */
static void* portaudio_process_thread (void *);