# LV2 Morph

Ports that can dynamically change type.

ID | http://lv2plug.in/ns/ext/morph
Version | 1.0
Discuss | devel@lists.lv2plug.in (subscribe)

- Index
- API

This extension defines two port types: MorphPort, which has a host-configurable type, and AutoMorphPort, which may automatically change type when a MorphPort's type is changed. 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.

This extension only defines port types and properties for describing morph ports. The actual run-time switching is done via the opts:interface API.

## Index

Classes | Properties
--- | ---
AutoMorphPort MorphPort | currentType supportsType

## Classes

### AutoMorphPort

Class

Label | Auto Morph Port
Subclass of | lv2:Port

A port that can change its type based on that of another.

Ports of this type MUST have another type which defines the default buffer format (for example, lv2:ControlPort) but may dynamically change types based on the configured types of any MorphPort ports on the same plugin instance.

The type of a port may only change in response to a host call to LV2_Options_Interface::set(). Whenever any port type on the instance changes, the host MUST check the type of all AutoMorphPort ports with LV2_Options_Interface::get() before calling run() again, since they may have changed. If the type of any port is zero, it means the current configuration is invalid and the plugin may not be run (unless that port is lv2:connectionOptional and connected to NULL).

This is mainly useful for outputs whose type depends on the type of corresponding inputs.

### MorphPort

Class

Label | Morph Port
Subclass of | lv2:Port
In domain of | currentType
| supportsType

A port which can be switched to another type.

Ports of this type MUST have another type which defines the default buffer format (for example lv2:ControlPort) but can be dynamically changed to a different type in hosts that support opts:interface.

The host may change the type of a MorphPort by setting its currentType with LV2_Options_Interface::set(). If the plugin has any AutoMorphPort ports, the host MUST check their types after changing any port type since they may have changed.

## Properties

### currentType

Property

Label | current type
Domain | MorphPort
Type | Object Property

The currently active type of the port.

The currently active type of the port. This is for dynamic use as an option and SHOULD NOT be listed in the static plugin data.

### supportsType

Property

Label | supports type
Domain | MorphPort
Type | Object Property

A type that a port supports being switched to.

Indicates that a port supports being switched to a certain type. A MorphPort MUST list each type it supports being switched to in the plugin data using this property.