Mercurial > hg > pub > prymula > com
comparison DPF-Prymula-audioplugins/dpf/distrho/src/travesty/component.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 /* | |
2 * travesty, pure C VST3-compatible interface | |
3 * Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com> | |
4 * | |
5 * Permission to use, copy, modify, and/or distribute this software for any purpose with | |
6 * or without fee is hereby granted, provided that the above copyright notice and this | |
7 * permission notice appear in all copies. | |
8 * | |
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |
10 * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |
11 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |
12 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |
13 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |
14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
15 */ | |
16 | |
17 #pragma once | |
18 | |
19 #include "base.h" | |
20 #include "bstream.h" | |
21 | |
22 #include "align_push.h" | |
23 | |
24 /** | |
25 * buses | |
26 */ | |
27 | |
28 enum v3_media_types { | |
29 V3_AUDIO = 0, | |
30 V3_EVENT | |
31 }; | |
32 | |
33 static inline | |
34 const char* v3_media_type_str(int32_t type) | |
35 { | |
36 switch (type) | |
37 { | |
38 case V3_AUDIO: | |
39 return "V3_AUDIO"; | |
40 case V3_EVENT: | |
41 return "V3_EVENT"; | |
42 default: | |
43 return "[unknown]"; | |
44 } | |
45 } | |
46 | |
47 enum v3_bus_direction { | |
48 V3_INPUT = 0, | |
49 V3_OUTPUT | |
50 }; | |
51 | |
52 static inline | |
53 const char* v3_bus_direction_str(int32_t d) | |
54 { | |
55 switch (d) | |
56 { | |
57 case V3_INPUT: | |
58 return "V3_INPUT"; | |
59 case V3_OUTPUT: | |
60 return "V3_OUTPUT"; | |
61 default: | |
62 return "[unknown]"; | |
63 } | |
64 } | |
65 | |
66 enum v3_bus_types { | |
67 V3_MAIN = 0, | |
68 V3_AUX | |
69 }; | |
70 | |
71 enum v3_bus_flags { | |
72 V3_DEFAULT_ACTIVE = 1 << 0, | |
73 V3_IS_CONTROL_VOLTAGE = 1 << 1 | |
74 }; | |
75 | |
76 enum v3_io_mode { | |
77 V3_SIMPLE = 0, | |
78 V3_ADVANCED, | |
79 V3_OFFLINE_PROCESSING | |
80 }; | |
81 | |
82 struct v3_bus_info { | |
83 int32_t media_type; | |
84 int32_t direction; | |
85 int32_t channel_count; | |
86 v3_str_128 bus_name; | |
87 int32_t bus_type; | |
88 uint32_t flags; | |
89 }; | |
90 | |
91 struct v3_routing_info { | |
92 int32_t media_type; | |
93 int32_t bus_idx; | |
94 int32_t channel; | |
95 }; | |
96 | |
97 /** | |
98 * component | |
99 */ | |
100 | |
101 struct v3_component { | |
102 #ifndef __cplusplus | |
103 struct v3_plugin_base; | |
104 #endif | |
105 v3_result (V3_API *get_controller_class_id)(void* self, v3_tuid class_id); | |
106 v3_result (V3_API *set_io_mode)(void* self, int32_t io_mode); | |
107 int32_t (V3_API *get_bus_count)(void* self, int32_t media_type, int32_t bus_direction); | |
108 v3_result (V3_API *get_bus_info)(void* self, int32_t media_type, int32_t bus_direction, | |
109 int32_t bus_idx, struct v3_bus_info* bus_info); | |
110 v3_result (V3_API *get_routing_info)(void* self, struct v3_routing_info* input, struct v3_routing_info* output); | |
111 v3_result (V3_API *activate_bus)(void* self, int32_t media_type, int32_t bus_direction, | |
112 int32_t bus_idx, v3_bool state); | |
113 v3_result (V3_API *set_active)(void* self, v3_bool state); | |
114 v3_result (V3_API *set_state)(void* self, struct v3_bstream **); | |
115 v3_result (V3_API *get_state)(void* self, struct v3_bstream **); | |
116 }; | |
117 | |
118 static constexpr const v3_tuid v3_component_iid = | |
119 V3_ID(0xE831FF31, 0xF2D54301, 0x928EBBEE, 0x25697802); | |
120 | |
121 #ifdef __cplusplus | |
122 | |
123 /** | |
124 * C++ variants | |
125 */ | |
126 | |
127 struct v3_component_cpp : v3_funknown { | |
128 v3_plugin_base base; | |
129 v3_component comp; | |
130 }; | |
131 | |
132 template<> inline | |
133 constexpr v3_component* v3_cpp_obj(v3_component** obj) | |
134 { | |
135 /** | |
136 * this ugly piece of code is required due to C++ assuming `reinterpret_cast` by default, | |
137 * but we need everything to be `static_cast` for it to be `constexpr` compatible. | |
138 */ | |
139 return static_cast<v3_component*>( | |
140 static_cast<void*>(static_cast<uint8_t*>(static_cast<void*>(*obj)) + sizeof(void*)*5)); | |
141 } | |
142 | |
143 #endif | |
144 | |
145 #include "align_pop.h" |