X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fbackends%2Fjack%2Fjack_audiobackend.h;h=847b21b767c703692a035fac96aaa53e7d6fcc94;hb=c8c6bca6587450ff64303dbc994a4cd28d6ce7aa;hp=2c77e6112b89fb55cdb3daf92c7092cfef8f03eb;hpb=08371ae2cf6231bbb8522645d14add41ffa9c1c0;p=ardour.git diff --git a/libs/backends/jack/jack_audiobackend.h b/libs/backends/jack/jack_audiobackend.h index 2c77e6112b..847b21b767 100644 --- a/libs/backends/jack/jack_audiobackend.h +++ b/libs/backends/jack/jack_audiobackend.h @@ -29,8 +29,7 @@ #include -#include -#include +#include "weak_libjack.h" #include "ardour/audio_backend.h" @@ -41,9 +40,9 @@ class JACKSession; class JACKAudioBackend : public AudioBackend { public: - JACKAudioBackend (AudioEngine& e, boost::shared_ptr); + JACKAudioBackend (AudioEngine& e, AudioBackendInfo& info, boost::shared_ptr); ~JACKAudioBackend (); - + /* AUDIOBACKEND API */ std::string name() const; @@ -59,6 +58,7 @@ class JACKAudioBackend : public AudioBackend { std::vector available_sample_rates (const std::string& device) const; std::vector available_buffer_sizes (const std::string& device) const; + std::vector available_period_sizes (const std::string& driver) const; uint32_t available_input_channel_count (const std::string& device) const; uint32_t available_output_channel_count (const std::string& device) const; @@ -68,35 +68,40 @@ class JACKAudioBackend : public AudioBackend { int set_device_name (const std::string&); int set_sample_rate (float); int set_buffer_size (uint32_t); - int set_sample_format (SampleFormat); + int set_peridod_size (uint32_t); int set_interleaved (bool yn); int set_input_channels (uint32_t); 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 reset_device (); std::string device_name () const; float sample_rate () const; uint32_t buffer_size () const; - SampleFormat sample_format () const; + uint32_t period_size () const; bool interleaved () const; uint32_t input_channels () const; 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; } std::string driver_name() const; std::string control_app_name () const; void launch_control_app (); - int _start (bool for_latency_measurement); int stop (); int freewheel (bool); - float cpu_load() const; + float dsp_load() const; - pframes_t sample_time (); - pframes_t sample_time_at_cycle_start (); + framepos_t sample_time (); + framepos_t sample_time_at_cycle_start (); pframes_t samples_since_cycle_start (); size_t raw_buffer_size (DataType t); @@ -118,7 +123,7 @@ class JACKAudioBackend : public AudioBackend { void update_latencies (); static bool already_configured(); - + /* PORTENGINE API */ const std::string& my_name() const; @@ -127,6 +132,8 @@ class JACKAudioBackend : public AudioBackend { int set_port_name (PortHandle, const std::string&); 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&) const; @@ -145,13 +152,29 @@ class JACKAudioBackend : public AudioBackend { int disconnect_all (PortHandle); int connect (const std::string& src, const std::string& dst); int disconnect (const std::string& src, const std::string& dst); - + /* MIDI */ std::vector enumerate_midi_options () const; int set_midi_option (const std::string&); std::string midi_option () const; + std::vector enumerate_midi_devices () const { + return std::vector (); + } + int set_midi_device_enabled (std::string const, bool) { + return 0; + } + bool midi_device_enabled (std::string const) const { + return true; + } + bool can_set_systemic_midi_latencies () const { + return false; + } + bool can_set_period_size () const { + return true; + } + int midi_event_get (pframes_t& timestamp, size_t& size, uint8_t** buf, void* port_buffer, uint32_t event_index); int midi_event_put (void* port_buffer, pframes_t timestamp, const uint8_t* buffer, size_t size); uint32_t get_midi_event_count (void* port_buffer); @@ -166,7 +189,7 @@ class JACKAudioBackend : public AudioBackend { /* Latency management */ - + void set_latency_range (PortHandle, bool for_playback, LatencyRange); LatencyRange get_latency_range (PortHandle, bool for_playback); @@ -193,6 +216,7 @@ class JACKAudioBackend : public AudioBackend { std::map _raw_buffer_sizes; std::vector _jack_threads; + jack_native_thread_t _main_thread; static int _xrun_callback (void *arg); static void* _process_thread (void *arg); @@ -203,7 +227,7 @@ class JACKAudioBackend : public AudioBackend { static void _freewheel_callback (int , void *arg); static void _latency_callback (jack_latency_callback_mode_t, void*); static void _session_callback (jack_session_event_t *event, void *arg); - + void jack_timebase_callback (jack_transport_state_t, pframes_t, jack_position_t*, int); int jack_sync_callback (jack_transport_state_t, jack_position_t*); int jack_bufsize_callback (pframes_t); @@ -215,16 +239,16 @@ class JACKAudioBackend : public AudioBackend { void set_jack_callbacks (); int reconnect_to_jack (); - + struct ThreadData { JACKAudioBackend* engine; boost::function f; size_t stacksize; - + ThreadData (JACKAudioBackend* e, boost::function fp, size_t stacksz) : engine (e) , f (fp) , stacksize (stacksz) {} }; - + void* process_thread (); static void* _start_process_thread (void*); @@ -236,6 +260,7 @@ class JACKAudioBackend : public AudioBackend { std::string _target_device; float _target_sample_rate; uint32_t _target_buffer_size; + uint32_t _target_num_periods; SampleFormat _target_sample_format; bool _target_interleaved; uint32_t _target_input_channels; @@ -248,7 +273,7 @@ class JACKAudioBackend : public AudioBackend { typedef std::set DeviceList; typedef std::map DriverDeviceMap; - + mutable DriverDeviceMap all_devices; PBD::ScopedConnection disconnect_connection; @@ -267,14 +292,17 @@ class JACKAudioBackend : public AudioBackend { void when_connected_to_jack (); PBD::ScopedConnection jack_connection_connection; - /* Object to manage interactions with Session in a way that + /* Object to manage interactions with Session in a way that keeps JACK out of libardour directly */ JACKSession* _session; + + protected: + int _start (bool for_latency_measurement); }; } // namespace #endif /* __ardour_audiobackend_h__ */ - +