clap

CLAP Audio Plugin API
Log | Files | Refs | README | LICENSE

commit 73896baad650185a49dd4b85449251c553fcbdce
parent 235daa21ea7e66c6cf027b2d33ce47186a9cac4e
Author: Alexandre BIQUE <bique.alexandre@gmail.com>
Date:   Sun,  9 Jan 2022 14:03:03 +0100

Rework audio port sample size negotiation

Diffstat:
Minclude/clap/audio-buffer.h | 2+-
Minclude/clap/ext/audio-ports.h | 31+++++++++++++++++++++----------
2 files changed, 22 insertions(+), 11 deletions(-)

diff --git a/include/clap/audio-buffer.h b/include/clap/audio-buffer.h @@ -10,7 +10,7 @@ extern "C" { typedef struct clap_audio_buffer { // Either data32 or data64 pointer will be set. - float ** data32; + float **data32; double **data64; alignas(4) uint32_t channel_count; alignas(4) uint32_t latency; // latency from/to the audio interface diff --git a/include/clap/ext/audio-ports.h b/include/clap/ext/audio-ports.h @@ -8,7 +8,8 @@ /// /// This extension provides a way for the plugin to describe its current audio ports. /// -/// If the plugin does not implement this extension, it will have a default stereo input and output. +/// If the plugin does not implement this extension, it will have a default 32 bits stereo input and output. +/// This makes 32 bit support a requirement for both plugin and host. /// /// The plugin is only allowed to change its ports configuration while it is deactivated. @@ -20,18 +21,31 @@ extern "C" { #pragma pack(push, CLAP_ALIGN) +enum { + // This port main audio input or output. + // There can be only one main input and main output. + CLAP_AUDIO_PORT_IS_MAIN = 1 << 0, + + // Indicates that the host can use 64 bits audio with this port + CLAP_AUDIO_PORTS_SUPPORT_64BITS = 1 << 1, + + // Indicates that the host should use 64 bits audio with this port. + // For this port, the extra precision will lead to better processing. + CLAP_AUDIO_PORTS_PREFERS_64BITS = (1 << 2) | CLAP_AUDIO_PORTS_SUPPORT_64BITS, +}; + typedef struct clap_audio_port_info { alignas(4) clap_id id; // stable identifier alignas(1) char name[CLAP_NAME_SIZE]; // displayable name + alignas(4) uint32_t flags; alignas(4) uint32_t channel_count; alignas(4) clap_chmap channel_map; - alignas(4) uint32_t sample_size; // 32 for float and 64 for double - alignas(1) bool is_main; // there can only be 1 main input and output - alignas(1) bool is_cv; // control voltage - alignas(1) bool in_place; // if true the daw can use the same buffer for input - // and output, only for main input to main output + // in-place processing: allow the host to use the same buffer for input and output + // if supported set the pair port id. + // if not supported set to CLAP_INVALID_ID + alignas(4) clap_id in_place_pair; } clap_audio_port_info_t; // The audio ports scan has to be done while the plugin is deactivated. @@ -60,11 +74,8 @@ enum { }; typedef struct clap_host_audio_ports { - // [main-thread] - uint32_t (*get_preferred_sample_size)(const clap_host_t *host); - // Rescan the full list of audio ports according to the flags. - // [main-thread] + // [main-thread,!active] void (*rescan)(const clap_host_t *host, uint32_t flags); } clap_host_audio_ports_t;