Mercurial > hg > pub > prymula > com
comparison DPF-Prymula-audioplugins/dpf/distrho/src/clap/ext/audio-ports.h @ 3:84e66ea83026
DPF-Prymula-audioplugins-0.231015-2
author | prymula <prymula76@outlook.com> |
---|---|
date | Mon, 16 Oct 2023 21:53:34 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2:cf2cb71d31dd | 3:84e66ea83026 |
---|---|
1 #pragma once | |
2 | |
3 #include "../plugin.h" | |
4 #include "../string-sizes.h" | |
5 | |
6 /// @page Audio Ports | |
7 /// | |
8 /// This extension provides a way for the plugin to describe its current audio ports. | |
9 /// | |
10 /// If the plugin does not implement this extension, it won't have audio ports. | |
11 /// | |
12 /// 32 bits support is required for both host and plugins. 64 bits audio is optional. | |
13 /// | |
14 /// The plugin is only allowed to change its ports configuration while it is deactivated. | |
15 | |
16 static CLAP_CONSTEXPR const char CLAP_EXT_AUDIO_PORTS[] = "clap.audio-ports"; | |
17 static CLAP_CONSTEXPR const char CLAP_PORT_MONO[] = "mono"; | |
18 static CLAP_CONSTEXPR const char CLAP_PORT_STEREO[] = "stereo"; | |
19 | |
20 #ifdef __cplusplus | |
21 extern "C" { | |
22 #endif | |
23 | |
24 enum { | |
25 // This port is the main audio input or output. | |
26 // There can be only one main input and main output. | |
27 // Main port must be at index 0. | |
28 CLAP_AUDIO_PORT_IS_MAIN = 1 << 0, | |
29 | |
30 // This port can be used with 64 bits audio | |
31 CLAP_AUDIO_PORT_SUPPORTS_64BITS = 1 << 1, | |
32 | |
33 // 64 bits audio is preferred with this port | |
34 CLAP_AUDIO_PORT_PREFERS_64BITS = 1 << 2, | |
35 | |
36 // This port must be used with the same sample size as all the other ports which have this flag. | |
37 // In other words if all ports have this flag then the plugin may either be used entirely with | |
38 // 64 bits audio or 32 bits audio, but it can't be mixed. | |
39 CLAP_AUDIO_PORT_REQUIRES_COMMON_SAMPLE_SIZE = 1 << 3, | |
40 }; | |
41 | |
42 typedef struct clap_audio_port_info { | |
43 // id identifies a port and must be stable. | |
44 // id may overlap between input and output ports. | |
45 clap_id id; | |
46 char name[CLAP_NAME_SIZE]; // displayable name | |
47 | |
48 uint32_t flags; | |
49 uint32_t channel_count; | |
50 | |
51 // If null or empty then it is unspecified (arbitrary audio). | |
52 // This filed can be compared against: | |
53 // - CLAP_PORT_MONO | |
54 // - CLAP_PORT_STEREO | |
55 // - CLAP_PORT_SURROUND (defined in the surround extension) | |
56 // - CLAP_PORT_AMBISONIC (defined in the ambisonic extension) | |
57 // - CLAP_PORT_CV (defined in the cv extension) | |
58 // | |
59 // An extension can provide its own port type and way to inspect the channels. | |
60 const char *port_type; | |
61 | |
62 // in-place processing: allow the host to use the same buffer for input and output | |
63 // if supported set the pair port id. | |
64 // if not supported set to CLAP_INVALID_ID | |
65 clap_id in_place_pair; | |
66 } clap_audio_port_info_t; | |
67 | |
68 // The audio ports scan has to be done while the plugin is deactivated. | |
69 typedef struct clap_plugin_audio_ports { | |
70 // number of ports, for either input or output | |
71 // [main-thread] | |
72 uint32_t(CLAP_ABI *count)(const clap_plugin_t *plugin, bool is_input); | |
73 | |
74 // get info about about an audio port. | |
75 // [main-thread] | |
76 bool(CLAP_ABI *get)(const clap_plugin_t *plugin, | |
77 uint32_t index, | |
78 bool is_input, | |
79 clap_audio_port_info_t *info); | |
80 } clap_plugin_audio_ports_t; | |
81 | |
82 enum { | |
83 // The ports name did change, the host can scan them right away. | |
84 CLAP_AUDIO_PORTS_RESCAN_NAMES = 1 << 0, | |
85 | |
86 // [!active] The flags did change | |
87 CLAP_AUDIO_PORTS_RESCAN_FLAGS = 1 << 1, | |
88 | |
89 // [!active] The channel_count did change | |
90 CLAP_AUDIO_PORTS_RESCAN_CHANNEL_COUNT = 1 << 2, | |
91 | |
92 // [!active] The port type did change | |
93 CLAP_AUDIO_PORTS_RESCAN_PORT_TYPE = 1 << 3, | |
94 | |
95 // [!active] The in-place pair did change, this requires. | |
96 CLAP_AUDIO_PORTS_RESCAN_IN_PLACE_PAIR = 1 << 4, | |
97 | |
98 // [!active] The list of ports have changed: entries have been removed/added. | |
99 CLAP_AUDIO_PORTS_RESCAN_LIST = 1 << 5, | |
100 }; | |
101 | |
102 typedef struct clap_host_audio_ports { | |
103 // Checks if the host allows a plugin to change a given aspect of the audio ports definition. | |
104 // [main-thread] | |
105 bool(CLAP_ABI *is_rescan_flag_supported)(const clap_host_t *host, uint32_t flag); | |
106 | |
107 // Rescan the full list of audio ports according to the flags. | |
108 // It is illegal to ask the host to rescan with a flag that is not supported. | |
109 // Certain flags require the plugin to be de-activated. | |
110 // [main-thread] | |
111 void(CLAP_ABI *rescan)(const clap_host_t *host, uint32_t flags); | |
112 } clap_host_audio_ports_t; | |
113 | |
114 #ifdef __cplusplus | |
115 } | |
116 #endif |