morph
type: Specification
type: Feature
name: LV2 Morph Port Extension
shortdesc: Ports that can dynamically change type.
created: 2012-05-22
developer: me
documentation: This extension defines two port types: morph:MorphPort, which has a host-configurable type, and morph:AutoMorphPort, which may change type based on the type of other ports. These ports always have a default type and work normally work in hosts that are unaware of this extension. Thus, this extension provides a backwards compatibility mechanism which allows plugins to use new port types but gracefully fall back to a default type in hosts that do not support them.

Morph Port
type: Class
subclass of: Port
documentation: Ports of this type MUST have another type which defines the default buffer format (e.g. lv2:ControlPort) but can be dynamically changed to a different type in hosts that support morph:interface. The host may change the type of a MorphPort by calling LV2_Morph_Port_Interface::morph_port(). If the plugin has any morph:AutoMorphPort ports, the host MUST check their types after changing any port type since they may have changed.

Auto Morph Port
type: Class
subclass of: Port
documentation: Ports of this type MUST have another type which defines the default buffer format (e.g. lv2:ControlPort) but may dynamically change types based on the configured types of any morph:MorphPort ports on the same plugin instance. The type of a port may only change in response to a call to LV2_Morph_Port_Interface::morph_port(), i.e. ports can only change type as a result of an explicit host request. Whenever any port type on the instance changes, the host MUST check the type of all morph:AutoMorphPort ports on the instance before calling run() again, since they may have changed. This is mainly useful for outputs whose type depends on the type of corresponding inputs.

interface
type: ExtensionData
documentation: The interface provided by the plugin to support morph ports. To support this extension, the plugin must return a LV2_Morph_Port_Interface from LV2_Descriptor::extension_data() when it is called with this URI (LV2_STATE__interface).

supports type
type: Property
type: ObjectProperty
domain: Morph Port
documentation: Indicates that a port supports being switched to a certain type via morph:interface.