1 /*
2 * Copyright (C) 2023 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #ifndef ANDROID_EFFECT_UUID_H_
18 #define ANDROID_EFFECT_UUID_H_
19
20 #include <aidl/android/hardware/audio/effect/Descriptor.h>
21 #include <aidl/android/media/audio/common/AudioUuid.h>
22 #include <android-base/no_destructor.h>
23
24 namespace aidl::android::hardware::audio::effect {
25
26 using ::aidl::android::media::audio::common::AudioUuid;
27
stringToUuid(const char * str)28 inline AudioUuid stringToUuid(const char* str) {
29 AudioUuid uuid{};
30 uint32_t tmp[10];
31 if (!str || sscanf(str, "%08x-%04x-%04x-%04x-%02x%02x%02x%02x%02x%02x", tmp,
32 tmp + 1, tmp + 2, tmp + 3, tmp + 4, tmp + 5, tmp + 6,
33 tmp + 7, tmp + 8, tmp + 9) < 10) {
34 return uuid;
35 }
36
37 uuid.timeLow = (uint32_t)tmp[0];
38 uuid.timeMid = (uint16_t)tmp[1];
39 uuid.timeHiAndVersion = (uint16_t)tmp[2];
40 uuid.clockSeq = (uint16_t)tmp[3];
41 uuid.node.insert(uuid.node.end(), {(uint8_t)tmp[4], (uint8_t)tmp[5], (uint8_t)tmp[6],
42 (uint8_t)tmp[7], (uint8_t)tmp[8], (uint8_t)tmp[9]});
43 return uuid;
44 }
45
46 inline const char* const& kEffectTypeUuidAcousticEchoCanceler =
47 Descriptor::EFFECT_TYPE_UUID_AEC;
48 inline const char* const& kEffectTypeUuidAutomaticGainControlV1 =
49 Descriptor::EFFECT_TYPE_UUID_AGC1;
50 inline const char* const& kEffectTypeUuidAutomaticGainControlV2 =
51 Descriptor::EFFECT_TYPE_UUID_AGC2;
52 inline const char* const& kEffectTypeUuidBassBoost =
53 Descriptor::EFFECT_TYPE_UUID_BASS_BOOST;
54 inline const char* const& kEffectTypeUuidDownmix =
55 Descriptor::EFFECT_TYPE_UUID_DOWNMIX;
56 inline const char* const& kEffectTypeUuidDynamicsProcessing =
57 Descriptor::EFFECT_TYPE_UUID_DYNAMICS_PROCESSING;
58 inline const char* const& kEffectTypeUuidEnvReverb =
59 Descriptor::EFFECT_TYPE_UUID_ENV_REVERB;
60 inline const char* const& kEffectTypeUuidEqualizer =
61 Descriptor::EFFECT_TYPE_UUID_EQUALIZER;
62 inline const char* const& kEffectTypeUuidHapticGenerator =
63 Descriptor::EFFECT_TYPE_UUID_HAPTIC_GENERATOR;
64 inline const char* const& kEffectTypeUuidLoudnessEnhancer =
65 Descriptor::EFFECT_TYPE_UUID_LOUDNESS_ENHANCER;
66 inline const char* const& kEffectTypeUuidNoiseSuppression =
67 Descriptor::EFFECT_TYPE_UUID_NS;
68 inline const char* const& kEffectTypeUuidPresetReverb =
69 Descriptor::EFFECT_TYPE_UUID_PRESET_REVERB;
70 inline const char* const& kEffectTypeUuidSpatializer =
71 Descriptor::EFFECT_TYPE_UUID_SPATIALIZER;
72 inline const char* const& kEffectTypeUuidVirtualizer =
73 Descriptor::EFFECT_TYPE_UUID_VIRTUALIZER;
74 inline const char* const& kEffectTypeUuidVisualizer =
75 Descriptor::EFFECT_TYPE_UUID_VISUALIZER;
76 inline const char* const& kEffectTypeUuidVolume =
77 Descriptor::EFFECT_TYPE_UUID_VOLUME;
78
79 constexpr char kEffectImplUuidAcousticEchoCancelerSw[] = "bb392ec0-8d4d-11e0-a896-0002a5d5c51b";
80 constexpr char kEffectImplUuidAutomaticGainControlV1Sw[] = "aa8130e0-66fc-11e0-bad0-0002a5d5c51b";
81 constexpr char kEffectImplUuidAutomaticGainControlV2Sw[] = "89f38e65-d4d2-4d64-ad0e-2b3e799ea886";
82 constexpr char kEffectImplUuidBassBoostSw[] = "fa8181f2-588b-11ed-9b6a-0242ac120002";
83 constexpr char kEffectImplUuidBassBoostBundle[] = "8631f300-72e2-11df-b57e-0002a5d5c51b";
84 constexpr char kEffectImplUuidBassBoostProxy[] = "14804144-a5ee-4d24-aa88-0002a5d5c51b";
85 constexpr char kEffectImplUuidDownmixSw[] = "fa8187ba-588b-11ed-9b6a-0242ac120002";
86 constexpr char kEffectImplUuidDownmix[] = "93f04452-e4fe-41cc-91f9-e475b6d1d69f";
87 constexpr char kEffectImplUuidDynamicsProcessingSw[] = "fa818d78-588b-11ed-9b6a-0242ac120002";
88 constexpr char kEffectImplUuidDynamicsProcessing[] = "e0e6539b-1781-7261-676f-6d7573696340";
89 constexpr char kEffectImplUuidEqualizerSw[] = "0bed4300-847d-11df-bb17-0002a5d5c51b";
90 constexpr char kEffectImplUuidEqualizerBundle[] = "ce772f20-847d-11df-bb17-0002a5d5c51b";
91 constexpr char kEffectImplUuidEqualizerProxy[] = "c8e70ecd-48ca-456e-8a4f-0002a5d5c51b";
92 constexpr char kEffectImplUuidHapticGeneratorSw[] = "fa819110-588b-11ed-9b6a-0242ac120002";
93 constexpr char kEffectImplUuidHapticGenerator[] = "97c4acd1-8b82-4f2f-832e-c2fe5d7a9931";
94 constexpr char kEffectImplUuidLoudnessEnhancerSw[] = "fa819610-588b-11ed-9b6a-0242ac120002";
95 constexpr char kEffectImplUuidLoudnessEnhancer[] = "fa415329-2034-4bea-b5dc-5b381c8d1e2c";
96 constexpr char kEffectImplUuidEnvReverbSw[] = "fa819886-588b-11ed-9b6a-0242ac120002";
97 constexpr char kEffectImplUuidAuxEnvReverb[] = "4a387fc0-8ab3-11df-8bad-0002a5d5c51b";
98 constexpr char kEffectImplUuidInsertEnvReverb[] = "c7a511a0-a3bb-11df-860e-0002a5d5c51b";
99 constexpr char kEffectImplUuidNoiseSuppressionSw[] = "c06c8400-8e06-11e0-9cb6-0002a5d5c51b";
100 constexpr char kEffectImplUuidPresetReverbSw[] = "fa8199c6-588b-11ed-9b6a-0242ac120002";
101 constexpr char kEffectImplUuidAuxPresetReverb[] = "f29a1400-a3bb-11df-8ddc-0002a5d5c51b";
102 constexpr char kEffectImplUuidInsertPresetReverb[] = "172cdf00-a3bc-11df-a72f-0002a5d5c51b";
103 constexpr char kEffectImplUuidVirtualizerSw[] = "fa819d86-588b-11ed-9b6a-0242ac120002";
104 constexpr char kEffectImplUuidVirtualizerBundle[] = "1d4033c0-8557-11df-9f2d-0002a5d5c51b";
105 constexpr char kEffectImplUuidVirtualizerProxy[] = "d3467faa-acc7-4d34-acaf-0002a5d5c51b";
106 constexpr char kEffectImplUuidVisualizerSw[] = "fa81a0f6-588b-11ed-9b6a-0242ac120002";
107 constexpr char kEffectImplUuidVisualizer[] = "d069d9e0-8329-11df-9168-0002a5d5c51b";
108 constexpr char kEffectImplUuidVisualizerProxy[] = "1d0a1a53-7d5d-48f2-8e71-27fbd10d842c";
109 constexpr char kEffectImplUuidVolumeSw[] = "fa81a718-588b-11ed-9b6a-0242ac120002";
110 constexpr char kEffectImplUuidVolumeBundle[] = "119341a0-8469-11df-81f9-0002a5d5c51b";
111 constexpr char kEffectImplUuidSpatializerSw[] = "fa81a880-588b-11ed-9b6a-0242ac120002";
112
113
114 constexpr char kEffectUuidNull[] = "ec7178ec-e5e1-4432-a3f4-4657e6795210";
115 constexpr char kEffectUuidZero[] = "00000000-0000-0000-0000-000000000000";
116 constexpr char kEffectTypeUuidExtension[] = "fa81dbde-588b-11ed-9b6a-0242ac120002";
117 constexpr char kEffectImplUuidExtension[] = "fa81dd00-588b-11ed-9b6a-0242ac120002";
118
119 #define EFFECT_TYPE_UUID_LIST_DEF(V) \
120 V(TypeUuidAcousticEchoCanceler) \
121 V(TypeUuidAutomaticGainControlV1) \
122 V(TypeUuidAutomaticGainControlV2) \
123 V(TypeUuidBassBoost) \
124 V(TypeUuidDownmix) \
125 V(TypeUuidDynamicsProcessing) \
126 V(TypeUuidEqualizer) \
127 V(TypeUuidExtension) \
128 V(TypeUuidHapticGenerator) \
129 V(TypeUuidLoudnessEnhancer) \
130 V(TypeUuidEnvReverb) \
131 V(TypeUuidPresetReverb) \
132 V(TypeUuidNoiseSuppression) \
133 V(TypeUuidSpatializer) \
134 V(TypeUuidVirtualizer) \
135 V(TypeUuidVisualizer) \
136 V(TypeUuidVolume)
137
138 #define EFFECT_IMPL_UUID_LIST_DEF(V) \
139 V(ImplUuidAcousticEchoCancelerSw) \
140 V(ImplUuidAutomaticGainControlV1Sw) \
141 V(ImplUuidAutomaticGainControlV2Sw) \
142 V(ImplUuidBassBoostSw) \
143 V(ImplUuidBassBoostBundle) \
144 V(ImplUuidBassBoostProxy) \
145 V(ImplUuidDownmixSw) \
146 V(ImplUuidDownmix) \
147 V(ImplUuidDynamicsProcessingSw) \
148 V(ImplUuidDynamicsProcessing) \
149 V(ImplUuidEqualizerSw) \
150 V(ImplUuidEqualizerBundle) \
151 V(ImplUuidEqualizerProxy) \
152 V(ImplUuidExtension) \
153 V(ImplUuidHapticGeneratorSw) \
154 V(ImplUuidHapticGenerator) \
155 V(ImplUuidLoudnessEnhancerSw) \
156 V(ImplUuidLoudnessEnhancer) \
157 V(ImplUuidEnvReverbSw) \
158 V(ImplUuidAuxEnvReverb) \
159 V(ImplUuidInsertEnvReverb) \
160 V(ImplUuidNoiseSuppressionSw) \
161 V(ImplUuidPresetReverbSw) \
162 V(ImplUuidAuxPresetReverb) \
163 V(ImplUuidInsertPresetReverb) \
164 V(ImplUuidVirtualizerSw) \
165 V(ImplUuidVirtualizerBundle) \
166 V(ImplUuidVirtualizerProxy) \
167 V(ImplUuidVisualizerSw) \
168 V(ImplUuidVisualizer) \
169 V(ImplUuidVisualizerProxy) \
170 V(ImplUuidVolumeSw) \
171 V(ImplUuidVolumeBundle) \
172 V(ImplUuidSpatializerSw)
173
174 #define EFFECT_OTHER_UUID_LIST_DEF(V) \
175 V(UuidNull) \
176 V(UuidZero) \
177
178 #define GENERATE_UUID_GETTER_V(symbol) \
179 inline const AudioUuid& getEffect##symbol() { \
180 static const ::android::base::NoDestructor<AudioUuid> uuid( \
181 stringToUuid(kEffect##symbol)); \
182 return *uuid; \
183 }
184
185 // Generate all the UUID getter functions:
186 EFFECT_TYPE_UUID_LIST_DEF(GENERATE_UUID_GETTER_V)
187
188 EFFECT_IMPL_UUID_LIST_DEF(GENERATE_UUID_GETTER_V)
189
190 EFFECT_OTHER_UUID_LIST_DEF(GENERATE_UUID_GETTER_V)
191
192 } // namespace aidl::android::hardware::audio::effect
193
194 #endif // ANDROID_EFFECT_UUID_H_