ardour
|
#include <port_engine.h>
Public Types | |
typedef void * | PortHandle |
Public Member Functions | |
PortEngine (PortManager &pm) | |
virtual | ~PortEngine () |
virtual void * | private_handle () const =0 |
virtual const std::string & | my_name () const =0 |
virtual bool | available () const =0 |
virtual uint32_t | port_name_size () const =0 |
virtual int | set_port_name (PortHandle port, const std::string &name)=0 |
virtual std::string | get_port_name (PortHandle) const =0 |
virtual int | get_port_property (PortHandle, const std::string &key, std::string &value, std::string &type) const |
virtual PortHandle | get_port_by_name (const std::string &) const =0 |
virtual int | get_ports (const std::string &port_name_pattern, DataType type, PortFlags flags, std::vector< std::string > &ports) const =0 |
virtual DataType | port_data_type (PortHandle port) const =0 |
virtual PortHandle | register_port (const std::string &shortname, ARDOUR::DataType type, ARDOUR::PortFlags flags)=0 |
virtual void | unregister_port (PortHandle)=0 |
virtual int | connect (const std::string &src, const std::string &dst)=0 |
virtual int | disconnect (const std::string &src, const std::string &dst)=0 |
virtual int | connect (PortHandle src, const std::string &dst)=0 |
virtual int | disconnect (PortHandle src, const std::string &dst)=0 |
virtual int | disconnect_all (PortHandle port)=0 |
virtual bool | connected (PortHandle port, bool process_callback_safe=true)=0 |
virtual bool | connected_to (PortHandle, const std::string &name, bool process_callback_safe=true)=0 |
virtual bool | physically_connected (PortHandle port, bool process_callback_safe=true)=0 |
virtual int | get_connections (PortHandle port, std::vector< std::string > &names, bool process_callback_safe=true)=0 |
virtual int | midi_event_get (pframes_t ×tamp, size_t &size, uint8_t **buf, void *port_buffer, uint32_t event_index)=0 |
virtual int | midi_event_put (void *port_buffer, pframes_t timestamp, const uint8_t *buffer, size_t size)=0 |
virtual uint32_t | get_midi_event_count (void *port_buffer)=0 |
virtual void | midi_clear (void *port_buffer)=0 |
virtual bool | can_monitor_input () const =0 |
virtual int | request_input_monitoring (PortHandle port, bool yn)=0 |
virtual int | ensure_input_monitoring (PortHandle port, bool yn)=0 |
virtual bool | monitoring_input (PortHandle port)=0 |
virtual void | set_latency_range (PortHandle port, bool for_playback, LatencyRange r)=0 |
virtual LatencyRange | get_latency_range (PortHandle port, bool for_playback)=0 |
virtual bool | port_is_physical (PortHandle port) const =0 |
virtual void | get_physical_outputs (DataType type, std::vector< std::string > &names)=0 |
virtual void | get_physical_inputs (DataType type, std::vector< std::string > &names)=0 |
virtual ChanCount | n_physical_outputs () const =0 |
virtual ChanCount | n_physical_inputs () const =0 |
virtual void * | get_buffer (PortHandle, pframes_t)=0 |
virtual framepos_t | sample_time_at_cycle_start ()=0 |
Protected Attributes | |
PortManager & | manager |
PortEngine is an abstract base class that defines the functionality required by Ardour.
A Port is basically an endpoint for a datastream (which can either be continuous, like audio, or event-based, like MIDI). Ports have buffers associated with them into which data can be written (if they are output ports) and from which data can be read (if they input ports). Ports can be connected together so that data written to an output port can be read from an input port. These connections can be 1:1, 1:N OR N:1.
Ports may be associated with software only, or with hardware. Hardware related ports are often referred to as physical, and correspond to some relevant physical entity on a hardware device, such as an audio jack or a MIDI connector. Physical ports may be potentially asked to monitor their inputs, though some implementations may not support this.
Most physical ports will also be considered "terminal", which means that data delivered there or read from there will go to or comes from a system outside of the PortEngine implementation's control (e.g. the analog domain for audio, or external MIDI devices for MIDI). Non-physical ports can also be considered "terminal". For example, the output port of a software synthesizer is a terminal port, because the data contained in its buffer does not and cannot be considered to come from any other port - it is synthesized by its owner.
Ports also have latency associated with them. Each port has a playback latency and a capture latency:
capture latency: how long since the data read from the buffer of a port arrived at at a terminal port. The data will have come from the "outside world" if the terminal port is also physical, or will have been synthesized by the entity that owns the terminal port.
playback latency: how long until the data written to the buffer of port will reach a terminal port.
For more detailed questions about the PortEngine API, consult the JACK API documentation, on which this entire object is based.
Definition at line 78 of file port_engine.h.
typedef void* ARDOUR::PortEngine::PortHandle |
Definition at line 96 of file port_engine.h.
|
inline |
Definition at line 80 of file port_engine.h.
|
inlinevirtual |
Definition at line 81 of file port_engine.h.
|
pure virtual |
Return true if the underlying mechanism/API is still available for us to utilize. return false if some or all of the AudioBackend API can no longer be effectively used.
|
pure virtual |
Return true if the implementation can offer input monitoring.
Input monitoring involves the (selective) routing of incoming data to an outgoing data stream, without the data being passed to the CPU.
Only certain audio hardware can provide this, and only certain audio APIs can offer it.
|
pure virtual |
Ensure that data written to the port named by
src | will be readable from the port named by |
dst. | Return zero on success, non-zero otherwise. |
|
pure virtual |
Ensure that data written to the port referenced by
portwill | be readable from the port named by |
dst. | Return zero on success, non-zero otherwise. |
|
pure virtual |
|
pure virtual |
|
pure virtual |
Remove any existing connection between the ports named by
src | and |
dst. | Return zero on success, non-zero otherwise. |
|
pure virtual |
Remove any existing connection between the port referenced by
src | and the port named |
dst. | Return zero on success, non-zero otherwise. |
|
pure virtual |
Remove all connections between the port referred to by
port | and any other ports. Return zero on success, non-zero otherwise. |
|
pure virtual |
|
pure virtual |
|
pure virtual |
Place the names of all ports connected to the port named by
ports | into |
names,and | return the number of connections. |
|
pure virtual |
|
pure virtual |
|
pure virtual |
Store into
names | the names of all ports with the IsInput and IsPhysical flags set, that handle data of type |
type. | This can be used to discover inputs associated with hardware devices. |
|
pure virtual |
Store into
names | the names of all ports with the IsOutput and IsPhysical flag set, that handle data of type |
type. | This can be used to discover outputs associated with hardware devices. |
|
pure virtual |
|
pure virtual |
Return the name of the port referred to by
port. | If the port does not exist, return an empty string. |
|
inlinevirtual |
Return the port-property value and type for a given key. (eg query a human readable port name)
The API follows jack_get_property():
key | The key of the property to retrieve |
value | Set to the value of the property if found |
type | The type of the property if set ( Type of data, either a MIME type or URI. If type is empty, the data is assumed to be a UTF-8 encoded string. |
subject
has no key
property.for available keys, see https://github.com/jackaudio/headers/blob/master/metadata.h https://github.com/drobilla/jackey/blob/master/jackey.h
Definition at line 139 of file port_engine.h.
|
pure virtual |
Find the set of ports whose names, types and flags match specified values, place the names of each port into
ports,and | return the count of the number found. |
To avoid selecting by name, pass an empty string for
port_name_pattern. | To avoid selecting by type, pass DataType::NIL as |
type. | To avoid selecting by flags, pass PortFlags (0) as |
flags. |
|
pure virtual |
Clear the buffer at
port_buffer | of all MIDI events. |
After a call to this method, an immediate, subsequent call to get_midi_event_count() with the same
port_buffer | argument must return zero. |
|
pure virtual |
Retrieve a MIDI event from the data at
port_buffer. | The event number to be retrieved is given by |
event_index | (a value of zero indicates that the first event in the port_buffer should be retrieved). |
The data associated with the event will be copied into the buffer at
buf | and the number of bytes written will be stored in |
size. | The timestamp of the event (which is always relative to the start of the current process cycle, in samples) will be stored in |
timestamp |
|
pure virtual |
Place a MIDI event consisting of
size | bytes copied from the data at |
buf | into the port buffer referred to by |
port_buffer. | The MIDI event will be marked with a time given by |
timestamp. | Return zero on success, non-zero otherwise. |
Events must be added monotonically to a port buffer. An attempt to add a non-monotonic event (e.g. out-of-order) will cause this method to return a failure status.
|
pure virtual |
|
pure virtual |
Return the name of this process as used by the port manager when naming ports.
|
pure virtual |
Return the total count (possibly mixed between different data types) of the number of ports with the IsPhysical and IsInput flags set.
|
pure virtual |
Return the total count (possibly mixed between different data types) of the number of ports with the IsPhysical and IsOutput flags set.
|
pure virtual |
|
pure virtual |
Return the Ardour data type handled by the port referred to by
port. | Returns DataType::NIL if the port does not exist. |
|
pure virtual |
|
pure virtual |
Return the maximum size of a port name
|
pure virtual |
Return a private, type-free pointer to any data that might be useful to a concrete implementation
|
pure virtual |
|
pure virtual |
Increment or decrement the number of requests to monitor the input of the hardware channel represented by the port referred to by
port. | If the number of requests rises above zero, input monitoring will be enabled (if can_monitor_input() returns true for the implementation). |
If the number of requests falls to zero, input monitoring will be disabled (if can_monitor_input() returns true for the implementation)
|
pure virtual |
Implemented in ARDOUR::AudioBackend.
|
pure virtual |
Set the latency range for the port referred to by
port | to |
r. | The playback range will be set if |
for_playback | is true, otherwise the capture range will be set. |
|
pure virtual |
Returns zero if the port referred to by
port | was set to |
name. | Return non-zero otherwise. |
|
pure virtual |
|
protected |
Definition at line 361 of file port_engine.h.