blob: a2fc4fd0a88c287bbe086b1961f2cf4865faa989 [file] [log] [blame]
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -08001/*
Aalique Grahame22e49102018-12-18 14:23:57 -08002 * Copyright (c) 2013-2014, 2017-2019, The Linux Foundation. All rights reserved.
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -08003 * Not a Contribution.
4 *
5 * Copyright (C) 2013 The Android Open Source Project
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 */
19
20#define LOG_TAG "offload_effect_reverb"
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -070021//#define LOG_NDEBUG 0
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -080022
23#include <cutils/list.h>
Aalique Grahame22e49102018-12-18 14:23:57 -080024#include <log/log.h>
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -080025#include <tinyalsa/asoundlib.h>
Subhash Chandra Bose Naripeddy090a2aa2014-01-30 14:03:12 -080026#include <sound/audio_effects.h>
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -080027#include <audio_effects/effect_environmentalreverb.h>
28#include <audio_effects/effect_presetreverb.h>
29
30#include "effect_api.h"
31#include "reverb.h"
32
Trinath Thammishetty765efd22018-08-20 13:23:24 +053033#define REVERB_MAX_LATENCY 100
34
Vatsal Buchac09ae062018-11-14 13:25:08 +053035#ifdef AUDIO_FEATURE_ENABLED_GCOV
36extern void __gcov_flush();
37static void enable_gcov()
38{
39 __gcov_flush();
40}
41#else
42static void enable_gcov()
43{
44}
45#endif
46
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -080047/* Offload auxiliary environmental reverb UUID: 79a18026-18fd-4185-8233-0002a5d5c51b */
48const effect_descriptor_t aux_env_reverb_descriptor = {
49 { 0xc2e5d5f0, 0x94bd, 0x4763, 0x9cac, { 0x4e, 0x23, 0x4d, 0x06, 0x83, 0x9e } },
50 { 0x79a18026, 0x18fd, 0x4185, 0x8233, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } },
51 EFFECT_CONTROL_API_VERSION,
Weiyin Jiang90ac1ea2017-04-13 14:18:23 +080052 (EFFECT_FLAG_TYPE_AUXILIARY | EFFECT_FLAG_HW_ACC_TUNNEL | EFFECT_FLAG_VOLUME_CTRL),
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -080053 0, /* TODO */
54 1,
55 "MSM offload Auxiliary Environmental Reverb",
56 "The Android Open Source Project",
57};
58
59/* Offload insert environmental reverb UUID: eb64ea04-973b-43d2-8f5e-0002a5d5c51b */
60const effect_descriptor_t ins_env_reverb_descriptor = {
61 {0xc2e5d5f0, 0x94bd, 0x4763, 0x9cac, {0x4e, 0x23, 0x4d, 0x06, 0x83, 0x9e}},
62 {0xeb64ea04, 0x973b, 0x43d2, 0x8f5e, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}},
63 EFFECT_CONTROL_API_VERSION,
Weiyin Jiang90ac1ea2017-04-13 14:18:23 +080064 (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_INSERT_FIRST | EFFECT_FLAG_HW_ACC_TUNNEL |
65 EFFECT_FLAG_VOLUME_CTRL),
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -080066 0, /* TODO */
67 1,
68 "MSM offload Insert Environmental Reverb",
69 "The Android Open Source Project",
70};
71
72// Offload auxiliary preset reverb UUID: 6987be09-b142-4b41-9056-0002a5d5c51b */
73const effect_descriptor_t aux_preset_reverb_descriptor = {
74 {0x47382d60, 0xddd8, 0x11db, 0xbf3a, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}},
75 {0x6987be09, 0xb142, 0x4b41, 0x9056, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}},
76 EFFECT_CONTROL_API_VERSION,
Weiyin Jiang90ac1ea2017-04-13 14:18:23 +080077 (EFFECT_FLAG_TYPE_AUXILIARY | EFFECT_FLAG_HW_ACC_TUNNEL | EFFECT_FLAG_VOLUME_CTRL),
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -080078 0, /* TODO */
79 1,
80 "MSM offload Auxiliary Preset Reverb",
81 "The Android Open Source Project",
82};
83
84// Offload insert preset reverb UUID: aa2bebf6-47cf-4613-9bca-0002a5d5c51b */
85const effect_descriptor_t ins_preset_reverb_descriptor = {
86 {0x47382d60, 0xddd8, 0x11db, 0xbf3a, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}},
87 {0xaa2bebf6, 0x47cf, 0x4613, 0x9bca, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}},
88 EFFECT_CONTROL_API_VERSION,
Weiyin Jiang90ac1ea2017-04-13 14:18:23 +080089 (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_INSERT_FIRST | EFFECT_FLAG_HW_ACC_TUNNEL |
90 EFFECT_FLAG_VOLUME_CTRL),
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -080091 0, /* TODO */
92 1,
93 "MSM offload Insert Preset Reverb",
94 "The Android Open Source Project",
95};
96
97static const reverb_settings_t reverb_presets[] = {
98 // REVERB_PRESET_NONE: values are unused
99 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
100 // REVERB_PRESET_SMALLROOM
101 {-400, -600, 1100, 830, -400, 5, 500, 10, 1000, 1000},
102 // REVERB_PRESET_MEDIUMROOM
103 {-400, -600, 1300, 830, -1000, 20, -200, 20, 1000, 1000},
104 // REVERB_PRESET_LARGEROOM
105 {-400, -600, 1500, 830, -1600, 5, -1000, 40, 1000, 1000},
106 // REVERB_PRESET_MEDIUMHALL
107 {-400, -600, 1800, 700, -1300, 15, -800, 30, 1000, 1000},
108 // REVERB_PRESET_LARGEHALL
109 {-400, -600, 1800, 700, -2000, 30, -1400, 60, 1000, 1000},
110 // REVERB_PRESET_PLATE
111 {-400, -200, 1300, 900, 0, 2, 0, 10, 1000, 750},
112};
113
114
115void reverb_auxiliary_init(reverb_context_t *context)
116{
117 context->auxiliary = true;
118 context->preset = false;
119}
120
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700121void reverb_insert_init(reverb_context_t *context)
122{
123 context->auxiliary = false;
124 context->preset = true;
125 context->cur_preset = REVERB_PRESET_LAST + 1;
126 context->next_preset = REVERB_DEFAULT_PRESET;
127}
128
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800129void reverb_preset_init(reverb_context_t *context)
130{
131 context->auxiliary = false;
132 context->preset = true;
133 context->cur_preset = REVERB_PRESET_LAST + 1;
134 context->next_preset = REVERB_DEFAULT_PRESET;
135}
136
137/*
138 * Reverb operations
139 */
140int16_t reverb_get_room_level(reverb_context_t *context)
141{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530142 ALOGV("%s: ctxt %p, room level: %d", __func__, context, context->reverb_settings.roomLevel);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800143 return context->reverb_settings.roomLevel;
144}
145
146void reverb_set_room_level(reverb_context_t *context, int16_t room_level)
147{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530148 ALOGV("%s: ctxt %p, room level: %d", __func__, context, room_level);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800149 context->reverb_settings.roomLevel = room_level;
150 offload_reverb_set_room_level(&(context->offload_reverb), room_level);
151 if (context->ctl)
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700152 offload_reverb_send_params(context->ctl, &context->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800153 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
154 OFFLOAD_SEND_REVERB_ROOM_LEVEL);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700155 if (context->hw_acc_fd > 0)
156 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
157 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
158 OFFLOAD_SEND_REVERB_ROOM_LEVEL);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800159}
160
161int16_t reverb_get_room_hf_level(reverb_context_t *context)
162{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530163 ALOGV("%s: ctxt %p, room hf level: %d", __func__, context,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800164 context->reverb_settings.roomHFLevel);
165 return context->reverb_settings.roomHFLevel;
166}
167
168void reverb_set_room_hf_level(reverb_context_t *context, int16_t room_hf_level)
169{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530170 ALOGV("%s: ctxt %p, room hf level: %d", __func__, context, room_hf_level);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800171 context->reverb_settings.roomHFLevel = room_hf_level;
172 offload_reverb_set_room_hf_level(&(context->offload_reverb), room_hf_level);
173 if (context->ctl)
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700174 offload_reverb_send_params(context->ctl, &context->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800175 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
176 OFFLOAD_SEND_REVERB_ROOM_HF_LEVEL);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700177 if (context->hw_acc_fd > 0)
178 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
179 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
180 OFFLOAD_SEND_REVERB_ROOM_HF_LEVEL);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800181}
182
183uint32_t reverb_get_decay_time(reverb_context_t *context)
184{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530185 ALOGV("%s: ctxt %p, decay time: %d", __func__, context,
186 context->reverb_settings.decayTime);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800187 return context->reverb_settings.decayTime;
188}
189
190void reverb_set_decay_time(reverb_context_t *context, uint32_t decay_time)
191{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530192 ALOGV("%s: ctxt %p, decay_time: %d", __func__, context, decay_time);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800193 context->reverb_settings.decayTime = decay_time;
194 offload_reverb_set_decay_time(&(context->offload_reverb), decay_time);
195 if (context->ctl)
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700196 offload_reverb_send_params(context->ctl, &context->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800197 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
198 OFFLOAD_SEND_REVERB_DECAY_TIME);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700199 if (context->hw_acc_fd > 0)
200 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
201 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
202 OFFLOAD_SEND_REVERB_DECAY_TIME);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800203}
204
205int16_t reverb_get_decay_hf_ratio(reverb_context_t *context)
206{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530207 ALOGV("%s: ctxt %p, decay hf ratio: %d", __func__, context,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800208 context->reverb_settings.decayHFRatio);
209 return context->reverb_settings.decayHFRatio;
210}
211
212void reverb_set_decay_hf_ratio(reverb_context_t *context, int16_t decay_hf_ratio)
213{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530214 ALOGV("%s: ctxt %p, decay_hf_ratio: %d", __func__, context, decay_hf_ratio);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800215 context->reverb_settings.decayHFRatio = decay_hf_ratio;
216 offload_reverb_set_decay_hf_ratio(&(context->offload_reverb), decay_hf_ratio);
217 if (context->ctl)
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700218 offload_reverb_send_params(context->ctl, &context->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800219 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
220 OFFLOAD_SEND_REVERB_DECAY_HF_RATIO);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700221 if (context->hw_acc_fd > 0)
222 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
223 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
224 OFFLOAD_SEND_REVERB_DECAY_HF_RATIO);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800225}
226
227int16_t reverb_get_reverb_level(reverb_context_t *context)
228{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530229 ALOGV("%s: ctxt %p, reverb level: %d", __func__, context,
230 context->reverb_settings.reverbLevel);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800231 return context->reverb_settings.reverbLevel;
232}
233
234void reverb_set_reverb_level(reverb_context_t *context, int16_t reverb_level)
235{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530236 ALOGV("%s: ctxt %p, reverb level: %d", __func__, context, reverb_level);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800237 context->reverb_settings.reverbLevel = reverb_level;
238 offload_reverb_set_reverb_level(&(context->offload_reverb), reverb_level);
239 if (context->ctl)
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700240 offload_reverb_send_params(context->ctl, &context->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800241 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
242 OFFLOAD_SEND_REVERB_LEVEL);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700243 if (context->hw_acc_fd > 0)
244 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
245 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
246 OFFLOAD_SEND_REVERB_LEVEL);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800247}
248
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800249uint32_t reverb_get_reverb_delay(reverb_context_t *context)
250{
251 ALOGV("%s: ctxt %p, reverb delay: %d", __func__, context,
252 context->reverb_settings.reverbDelay);
253 return context->reverb_settings.reverbDelay;
254}
255
256void reverb_set_reverb_delay(reverb_context_t *context, uint32_t delay)
257{
258 ALOGV("%s: ctxt %p, reverb delay: %d", __func__, context, delay);
259 context->reverb_settings.reverbDelay = delay;
260 offload_reverb_set_delay(&(context->offload_reverb), delay);
261 if (context->ctl)
262 offload_reverb_send_params(context->ctl, &context->offload_reverb,
263 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
264 OFFLOAD_SEND_REVERB_DELAY);
265 if (context->hw_acc_fd > 0)
266 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
267 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
268 OFFLOAD_SEND_REVERB_DELAY);
269}
270
271int16_t reverb_get_reflections_level(reverb_context_t *context)
272{
273 ALOGV("%s: ctxt %p, reflection level: %d", __func__, context,
274 context->reverb_settings.reflectionsLevel);
275 return context->reverb_settings.reflectionsLevel;
276}
277
278void reverb_set_reflections_level(reverb_context_t *context, int16_t level)
279{
280 ALOGV("%s: ctxt %p, reflection level: %d", __func__, context, level);
281 context->reverb_settings.reflectionsLevel = level;
282 offload_reverb_set_reflections_level(&(context->offload_reverb), level);
283 if (context->ctl)
284 offload_reverb_send_params(context->ctl, &context->offload_reverb,
285 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
286 OFFLOAD_SEND_REVERB_REFLECTIONS_LEVEL);
287 if (context->hw_acc_fd > 0)
288 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
289 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
290 OFFLOAD_SEND_REVERB_REFLECTIONS_LEVEL);
291}
292
293uint32_t reverb_get_reflections_delay(reverb_context_t *context)
294{
295 ALOGV("%s: ctxt %p, reflection delay: %d", __func__, context,
296 context->reverb_settings.reflectionsDelay);
297 return context->reverb_settings.reflectionsDelay;
298}
299
300void reverb_set_reflections_delay(reverb_context_t *context, uint32_t delay)
301{
302 ALOGV("%s: ctxt %p, reflection delay: %d", __func__, context, delay);
303 context->reverb_settings.reflectionsDelay = delay;
304 offload_reverb_set_reflections_delay(&(context->offload_reverb), delay);
305 if (context->ctl)
306 offload_reverb_send_params(context->ctl, &context->offload_reverb,
307 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
308 OFFLOAD_SEND_REVERB_REFLECTIONS_DELAY);
309 if (context->hw_acc_fd > 0)
310 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
311 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
312 OFFLOAD_SEND_REVERB_REFLECTIONS_DELAY);
313}
314
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800315int16_t reverb_get_diffusion(reverb_context_t *context)
316{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530317 ALOGV("%s: ctxt %p, diffusion: %d", __func__, context,
318 context->reverb_settings.diffusion);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800319 return context->reverb_settings.diffusion;
320}
321
322void reverb_set_diffusion(reverb_context_t *context, int16_t diffusion)
323{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530324 ALOGV("%s: ctxt %p, diffusion: %d", __func__, context, diffusion);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800325 context->reverb_settings.diffusion = diffusion;
326 offload_reverb_set_diffusion(&(context->offload_reverb), diffusion);
327 if (context->ctl)
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700328 offload_reverb_send_params(context->ctl, &context->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800329 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
330 OFFLOAD_SEND_REVERB_DIFFUSION);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700331 if (context->hw_acc_fd > 0)
332 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
333 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
334 OFFLOAD_SEND_REVERB_DIFFUSION);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800335}
336
337int16_t reverb_get_density(reverb_context_t *context)
338{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530339 ALOGV("%s: ctxt %p, density: %d", __func__, context,
340 context->reverb_settings.density);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800341 return context->reverb_settings.density;
342}
343
344void reverb_set_density(reverb_context_t *context, int16_t density)
345{
wjiang50b81f42014-08-06 08:03:14 +0800346 ALOGV("%s: ctxt %p, density: %d", __func__, context, density);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800347 context->reverb_settings.density = density;
348 offload_reverb_set_density(&(context->offload_reverb), density);
349 if (context->ctl)
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700350 offload_reverb_send_params(context->ctl, &context->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800351 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
352 OFFLOAD_SEND_REVERB_DENSITY);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700353 if (context->hw_acc_fd > 0)
354 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
355 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
356 OFFLOAD_SEND_REVERB_DENSITY);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800357}
358
359void reverb_set_preset(reverb_context_t *context, int16_t preset)
360{
wjiangb27e25f2014-01-22 13:24:26 +0800361 bool enable;
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530362 ALOGV("%s: ctxt %p, preset: %d", __func__, context, preset);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800363 context->next_preset = preset;
364 offload_reverb_set_preset(&(context->offload_reverb), preset);
wjiangb27e25f2014-01-22 13:24:26 +0800365
Dhananjay Kumar3fa6a002015-07-14 18:58:18 +0530366 if (context->enabled_by_client) {
367 enable = (preset == REVERB_PRESET_NONE) ? false: true;
368 offload_reverb_set_enable_flag(&(context->offload_reverb), enable);
wjiangb27e25f2014-01-22 13:24:26 +0800369
Dhananjay Kumar3fa6a002015-07-14 18:58:18 +0530370 if (context->ctl)
371 offload_reverb_send_params(context->ctl, &context->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800372 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
373 OFFLOAD_SEND_REVERB_PRESET);
Dhananjay Kumar3fa6a002015-07-14 18:58:18 +0530374 if (context->hw_acc_fd > 0)
375 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700376 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
377 OFFLOAD_SEND_REVERB_PRESET);
Dhananjay Kumar3fa6a002015-07-14 18:58:18 +0530378 }
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800379}
380
381void reverb_set_all_properties(reverb_context_t *context,
382 reverb_settings_t *reverb_settings)
383{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530384 ALOGV("%s: ctxt %p", __func__, context);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800385 context->reverb_settings.roomLevel = reverb_settings->roomLevel;
386 context->reverb_settings.roomHFLevel = reverb_settings->roomHFLevel;
387 context->reverb_settings.decayTime = reverb_settings->decayTime;
388 context->reverb_settings.decayHFRatio = reverb_settings->decayHFRatio;
389 context->reverb_settings.reverbLevel = reverb_settings->reverbLevel;
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800390 context->reverb_settings.reverbDelay = reverb_settings->reverbDelay;
391 context->reverb_settings.reflectionsLevel = reverb_settings->reflectionsLevel;
392 context->reverb_settings.reflectionsDelay = reverb_settings->reflectionsDelay;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800393 context->reverb_settings.diffusion = reverb_settings->diffusion;
394 context->reverb_settings.density = reverb_settings->density;
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800395
396 offload_reverb_set_room_level(&(context->offload_reverb),
397 reverb_settings->roomLevel);
398 offload_reverb_set_room_hf_level(&(context->offload_reverb),
399 reverb_settings->roomHFLevel);
400 offload_reverb_set_decay_time(&(context->offload_reverb),
401 reverb_settings->decayTime);
402 offload_reverb_set_decay_hf_ratio(&(context->offload_reverb),
403 reverb_settings->decayHFRatio);
404 offload_reverb_set_reverb_level(&(context->offload_reverb),
405 reverb_settings->reverbLevel);
406 offload_reverb_set_delay(&(context->offload_reverb),
407 reverb_settings->reverbDelay);
408 offload_reverb_set_reflections_level(&(context->offload_reverb),
409 reverb_settings->reflectionsLevel);
410 offload_reverb_set_reflections_delay(&(context->offload_reverb),
411 reverb_settings->reflectionsDelay);
412 offload_reverb_set_diffusion(&(context->offload_reverb),
413 reverb_settings->diffusion);
414 offload_reverb_set_density(&(context->offload_reverb),
415 reverb_settings->density);
416
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800417 if (context->ctl)
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700418 offload_reverb_send_params(context->ctl, &context->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800419 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
420 OFFLOAD_SEND_REVERB_ROOM_LEVEL |
421 OFFLOAD_SEND_REVERB_ROOM_HF_LEVEL |
422 OFFLOAD_SEND_REVERB_DECAY_TIME |
423 OFFLOAD_SEND_REVERB_DECAY_HF_RATIO |
424 OFFLOAD_SEND_REVERB_LEVEL |
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800425 OFFLOAD_SEND_REVERB_DELAY |
426 OFFLOAD_SEND_REVERB_REFLECTIONS_LEVEL |
427 OFFLOAD_SEND_REVERB_REFLECTIONS_DELAY |
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800428 OFFLOAD_SEND_REVERB_DIFFUSION |
429 OFFLOAD_SEND_REVERB_DENSITY);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700430 if (context->hw_acc_fd > 0)
431 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
432 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
433 OFFLOAD_SEND_REVERB_ROOM_LEVEL |
434 OFFLOAD_SEND_REVERB_ROOM_HF_LEVEL |
435 OFFLOAD_SEND_REVERB_DECAY_TIME |
436 OFFLOAD_SEND_REVERB_DECAY_HF_RATIO |
437 OFFLOAD_SEND_REVERB_LEVEL |
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800438 OFFLOAD_SEND_REVERB_DELAY |
439 OFFLOAD_SEND_REVERB_REFLECTIONS_LEVEL |
440 OFFLOAD_SEND_REVERB_REFLECTIONS_DELAY |
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700441 OFFLOAD_SEND_REVERB_DIFFUSION |
442 OFFLOAD_SEND_REVERB_DENSITY);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800443}
444
445void reverb_load_preset(reverb_context_t *context)
446{
447 context->cur_preset = context->next_preset;
448
449 if (context->cur_preset != REVERB_PRESET_NONE) {
450 const reverb_settings_t *preset = &reverb_presets[context->cur_preset];
451 reverb_set_room_level(context, preset->roomLevel);
452 reverb_set_room_hf_level(context, preset->roomHFLevel);
453 reverb_set_decay_time(context, preset->decayTime);
454 reverb_set_decay_hf_ratio(context, preset->decayHFRatio);
455 reverb_set_reverb_level(context, preset->reverbLevel);
456 reverb_set_diffusion(context, preset->diffusion);
457 reverb_set_density(context, preset->density);
458 }
459}
460
461int reverb_get_parameter(effect_context_t *context, effect_param_t *p,
462 uint32_t *size)
463{
464 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
465 int voffset = ((p->psize - 1) / sizeof(int32_t) + 1) * sizeof(int32_t);
466 int32_t *param_tmp = (int32_t *)p->data;
467 int32_t param = *param_tmp++;
468 void *value = p->data + voffset;
469 reverb_settings_t *reverb_settings;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800470
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530471 ALOGV("%s: ctxt %p, param %d", __func__, reverb_ctxt, param);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800472
473 p->status = 0;
474
475 if (reverb_ctxt->preset) {
476 if (param != REVERB_PARAM_PRESET || p->vsize < sizeof(uint16_t))
477 return -EINVAL;
478 *(uint16_t *)value = reverb_ctxt->next_preset;
479 ALOGV("get REVERB_PARAM_PRESET, preset %d", reverb_ctxt->next_preset);
wjiangc37c2602014-03-24 23:43:09 +0800480 return 0;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800481 }
482 switch (param) {
483 case REVERB_PARAM_ROOM_LEVEL:
484 if (p->vsize < sizeof(uint16_t))
485 p->status = -EINVAL;
486 p->vsize = sizeof(uint16_t);
487 break;
488 case REVERB_PARAM_ROOM_HF_LEVEL:
489 if (p->vsize < sizeof(uint16_t))
490 p->status = -EINVAL;
491 p->vsize = sizeof(uint16_t);
492 break;
493 case REVERB_PARAM_DECAY_TIME:
494 if (p->vsize < sizeof(uint32_t))
495 p->status = -EINVAL;
496 p->vsize = sizeof(uint32_t);
497 break;
498 case REVERB_PARAM_DECAY_HF_RATIO:
499 if (p->vsize < sizeof(uint16_t))
500 p->status = -EINVAL;
501 p->vsize = sizeof(uint16_t);
502 break;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800503 case REVERB_PARAM_REVERB_LEVEL:
504 if (p->vsize < sizeof(uint16_t))
505 p->status = -EINVAL;
506 p->vsize = sizeof(uint16_t);
507 break;
508 case REVERB_PARAM_REVERB_DELAY:
509 if (p->vsize < sizeof(uint32_t))
510 p->status = -EINVAL;
511 p->vsize = sizeof(uint32_t);
512 break;
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800513 case REVERB_PARAM_REFLECTIONS_LEVEL:
514 if (p->vsize < sizeof(uint16_t))
515 p->status = -EINVAL;
516 p->vsize = sizeof(uint16_t);
517 break;
518 case REVERB_PARAM_REFLECTIONS_DELAY:
519 if (p->vsize < sizeof(uint32_t))
520 p->status = -EINVAL;
521 p->vsize = sizeof(uint32_t);
522 break;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800523 case REVERB_PARAM_DIFFUSION:
524 if (p->vsize < sizeof(uint16_t))
525 p->status = -EINVAL;
526 p->vsize = sizeof(uint16_t);
527 break;
528 case REVERB_PARAM_DENSITY:
529 if (p->vsize < sizeof(uint16_t))
530 p->status = -EINVAL;
531 p->vsize = sizeof(uint16_t);
532 break;
533 case REVERB_PARAM_PROPERTIES:
534 if (p->vsize < sizeof(reverb_settings_t))
535 p->status = -EINVAL;
536 p->vsize = sizeof(reverb_settings_t);
537 break;
Trinath Thammishetty765efd22018-08-20 13:23:24 +0530538 case REVERB_PARAM_LATENCY:
539 if (p->vsize < sizeof(uint32_t))
540 return -EINVAL;
541 p->vsize = sizeof(uint32_t);
542 break;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800543 default:
544 p->status = -EINVAL;
545 }
546
547 *size = sizeof(effect_param_t) + voffset + p->vsize;
548
549 if (p->status != 0)
550 return 0;
551
552 switch (param) {
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800553 case REVERB_PARAM_ROOM_LEVEL:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800554 *(int16_t *)value = reverb_get_room_level(reverb_ctxt);
555 break;
556 case REVERB_PARAM_ROOM_HF_LEVEL:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800557 *(int16_t *)value = reverb_get_room_hf_level(reverb_ctxt);
558 break;
559 case REVERB_PARAM_DECAY_TIME:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800560 *(uint32_t *)value = reverb_get_decay_time(reverb_ctxt);
561 break;
562 case REVERB_PARAM_DECAY_HF_RATIO:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800563 *(int16_t *)value = reverb_get_decay_hf_ratio(reverb_ctxt);
564 break;
565 case REVERB_PARAM_REVERB_LEVEL:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800566 *(int16_t *)value = reverb_get_reverb_level(reverb_ctxt);
567 break;
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800568 case REVERB_PARAM_REVERB_DELAY:
569 *(uint32_t *)value = reverb_get_reverb_delay(reverb_ctxt);
570 break;
571 case REVERB_PARAM_REFLECTIONS_LEVEL:
572 *(int16_t *)value = reverb_get_reflections_level(reverb_ctxt);
573 break;
574 case REVERB_PARAM_REFLECTIONS_DELAY:
575 *(uint32_t *)value = reverb_get_reflections_delay(reverb_ctxt);
576 break;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800577 case REVERB_PARAM_DIFFUSION:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800578 *(int16_t *)value = reverb_get_diffusion(reverb_ctxt);
579 break;
580 case REVERB_PARAM_DENSITY:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800581 *(int16_t *)value = reverb_get_density(reverb_ctxt);
582 break;
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800583 case REVERB_PARAM_PROPERTIES:
584 reverb_settings = (reverb_settings_t *)value;
585 reverb_settings->roomLevel = reverb_get_room_level(reverb_ctxt);
586 reverb_settings->roomHFLevel = reverb_get_room_hf_level(reverb_ctxt);
587 reverb_settings->decayTime = reverb_get_decay_time(reverb_ctxt);
588 reverb_settings->decayHFRatio = reverb_get_decay_hf_ratio(reverb_ctxt);
589 reverb_settings->reverbLevel = reverb_get_reverb_level(reverb_ctxt);
590 reverb_settings->reverbDelay = reverb_get_reverb_delay(reverb_ctxt);
591 reverb_settings->reflectionsLevel = reverb_get_reflections_level(reverb_ctxt);
592 reverb_settings->reflectionsDelay = reverb_get_reflections_delay(reverb_ctxt);
593 reverb_settings->diffusion = reverb_get_diffusion(reverb_ctxt);
594 reverb_settings->density = reverb_get_density(reverb_ctxt);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800595 break;
Trinath Thammishetty765efd22018-08-20 13:23:24 +0530596 case REVERB_PARAM_LATENCY:
597 *(uint16_t *)value = REVERB_MAX_LATENCY;
598 break;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800599 default:
600 p->status = -EINVAL;
601 break;
602 }
603
604 return 0;
605}
606
607int reverb_set_parameter(effect_context_t *context, effect_param_t *p,
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700608 uint32_t size __unused)
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800609{
610 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
611 int voffset = ((p->psize - 1) / sizeof(int32_t) + 1) * sizeof(int32_t);
612 void *value = p->data + voffset;
613 int32_t *param_tmp = (int32_t *)p->data;
614 int32_t param = *param_tmp++;
615 reverb_settings_t *reverb_settings;
616 int16_t level;
617 int16_t ratio;
618 uint32_t time;
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800619 uint32_t delay;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800620
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530621 ALOGV("%s: ctxt %p, param %d", __func__, reverb_ctxt, param);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800622
623 p->status = 0;
624
625 if (reverb_ctxt->preset) {
626 if (param != REVERB_PARAM_PRESET)
627 return -EINVAL;
628 uint16_t preset = *(uint16_t *)value;
629 ALOGV("set REVERB_PARAM_PRESET, preset %d", preset);
630 if (preset > REVERB_PRESET_LAST) {
631 return -EINVAL;
632 }
633 reverb_set_preset(reverb_ctxt, preset);
wjiangc37c2602014-03-24 23:43:09 +0800634 return 0;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800635 }
636 switch (param) {
637 case REVERB_PARAM_PROPERTIES:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800638 reverb_settings = (reverb_settings_t *)value;
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800639 reverb_set_all_properties(reverb_ctxt, reverb_settings);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800640 break;
641 case REVERB_PARAM_ROOM_LEVEL:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800642 level = *(int16_t *)value;
643 reverb_set_room_level(reverb_ctxt, level);
644 break;
645 case REVERB_PARAM_ROOM_HF_LEVEL:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800646 level = *(int16_t *)value;
647 reverb_set_room_hf_level(reverb_ctxt, level);
648 break;
649 case REVERB_PARAM_DECAY_TIME:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800650 time = *(uint32_t *)value;
651 reverb_set_decay_time(reverb_ctxt, time);
652 break;
653 case REVERB_PARAM_DECAY_HF_RATIO:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800654 ratio = *(int16_t *)value;
655 reverb_set_decay_hf_ratio(reverb_ctxt, ratio);
656 break;
657 case REVERB_PARAM_REVERB_LEVEL:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800658 level = *(int16_t *)value;
659 reverb_set_reverb_level(reverb_ctxt, level);
660 break;
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800661 case REVERB_PARAM_REVERB_DELAY:
662 delay = *(uint32_t *)value;
663 reverb_set_reverb_delay(reverb_ctxt, delay);
664 break;
665 case REVERB_PARAM_REFLECTIONS_LEVEL:
666 level = *(int16_t *)value;
667 reverb_set_reflections_level(reverb_ctxt, level);
668 break;
669 case REVERB_PARAM_REFLECTIONS_DELAY:
670 delay = *(uint32_t *)value;
671 reverb_set_reflections_delay(reverb_ctxt, delay);
672 break;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800673 case REVERB_PARAM_DIFFUSION:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800674 ratio = *(int16_t *)value;
675 reverb_set_diffusion(reverb_ctxt, ratio);
676 break;
677 case REVERB_PARAM_DENSITY:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800678 ratio = *(int16_t *)value;
679 reverb_set_density(reverb_ctxt, ratio);
680 break;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800681 default:
682 p->status = -EINVAL;
683 break;
684 }
685
686 return 0;
687}
688
689int reverb_set_device(effect_context_t *context, uint32_t device)
690{
691 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
692
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530693 ALOGV("%s: ctxt %p, device: 0x%x", __func__, reverb_ctxt, device);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800694 reverb_ctxt->device = device;
695 offload_reverb_set_device(&(reverb_ctxt->offload_reverb), device);
696 return 0;
697}
698
Aalique Grahame22e49102018-12-18 14:23:57 -0800699int reverb_reset(effect_context_t *context __unused)
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800700{
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800701 return 0;
702}
703
704int reverb_init(effect_context_t *context)
705{
706 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
707
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530708 ALOGV("%s: ctxt %p", __func__, reverb_ctxt);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800709 context->config.inputCfg.accessMode = EFFECT_BUFFER_ACCESS_READ;
710 /*
711 FIXME: channel mode is mono for auxiliary. is it needed for offload ?
712 If so, this set config needs to be updated accordingly
713 */
714 context->config.inputCfg.channels = AUDIO_CHANNEL_OUT_STEREO;
715 context->config.inputCfg.format = AUDIO_FORMAT_PCM_16_BIT;
716 context->config.inputCfg.samplingRate = 44100;
717 context->config.inputCfg.bufferProvider.getBuffer = NULL;
718 context->config.inputCfg.bufferProvider.releaseBuffer = NULL;
719 context->config.inputCfg.bufferProvider.cookie = NULL;
720 context->config.inputCfg.mask = EFFECT_CONFIG_ALL;
721 context->config.outputCfg.accessMode = EFFECT_BUFFER_ACCESS_ACCUMULATE;
722 context->config.outputCfg.channels = AUDIO_CHANNEL_OUT_STEREO;
723 context->config.outputCfg.format = AUDIO_FORMAT_PCM_16_BIT;
724 context->config.outputCfg.samplingRate = 44100;
725 context->config.outputCfg.bufferProvider.getBuffer = NULL;
726 context->config.outputCfg.bufferProvider.releaseBuffer = NULL;
727 context->config.outputCfg.bufferProvider.cookie = NULL;
728 context->config.outputCfg.mask = EFFECT_CONFIG_ALL;
729
730 set_config(context, &context->config);
731
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700732 reverb_ctxt->hw_acc_fd = -1;
Dhananjay Kumar3fa6a002015-07-14 18:58:18 +0530733 reverb_ctxt->enabled_by_client = false;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800734 memset(&(reverb_ctxt->reverb_settings), 0, sizeof(reverb_settings_t));
735 memset(&(reverb_ctxt->offload_reverb), 0, sizeof(struct reverb_params));
736
737 if (reverb_ctxt->preset &&
738 reverb_ctxt->next_preset != reverb_ctxt->cur_preset)
739 reverb_load_preset(reverb_ctxt);
Vatsal Buchac09ae062018-11-14 13:25:08 +0530740 enable_gcov();
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800741 return 0;
742}
743
744int reverb_enable(effect_context_t *context)
745{
746 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
747
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530748 ALOGV("%s: ctxt %p", __func__, reverb_ctxt);
Dhananjay Kumar3fa6a002015-07-14 18:58:18 +0530749 reverb_ctxt->enabled_by_client = true;
750
751 /* REVERB_PRESET_NONE is equivalent to disabled state,
752 * But support for this state is not provided in DSP.
753 * Hence, do not set enable flag, if in peset mode with preset "NONE".
754 * Effect would be enabled when valid preset is set.
755 */
756 if ((reverb_ctxt->preset == true) &&
757 (reverb_ctxt->next_preset == REVERB_PRESET_NONE))
758 return 0;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800759
760 if (!offload_reverb_get_enable_flag(&(reverb_ctxt->offload_reverb)))
761 offload_reverb_set_enable_flag(&(reverb_ctxt->offload_reverb), true);
Vatsal Buchac09ae062018-11-14 13:25:08 +0530762 enable_gcov();
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800763 return 0;
764}
765
766int reverb_disable(effect_context_t *context)
767{
768 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
769
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530770 ALOGV("%s: ctxt %p", __func__, reverb_ctxt);
Dhananjay Kumar3fa6a002015-07-14 18:58:18 +0530771 reverb_ctxt->enabled_by_client = false;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800772 if (offload_reverb_get_enable_flag(&(reverb_ctxt->offload_reverb))) {
773 offload_reverb_set_enable_flag(&(reverb_ctxt->offload_reverb), false);
774 if (reverb_ctxt->ctl)
775 offload_reverb_send_params(reverb_ctxt->ctl,
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700776 &reverb_ctxt->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800777 OFFLOAD_SEND_REVERB_ENABLE_FLAG);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700778 if (reverb_ctxt->hw_acc_fd > 0)
779 hw_acc_reverb_send_params(reverb_ctxt->hw_acc_fd,
780 &reverb_ctxt->offload_reverb,
781 OFFLOAD_SEND_REVERB_ENABLE_FLAG);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800782 }
Vatsal Buchac09ae062018-11-14 13:25:08 +0530783 enable_gcov();
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800784 return 0;
785}
786
787int reverb_start(effect_context_t *context, output_context_t *output)
788{
789 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
790
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530791 ALOGV("%s: ctxt %p, ctl %p", __func__, reverb_ctxt, output->ctl);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800792 reverb_ctxt->ctl = output->ctl;
wjiangc37c2602014-03-24 23:43:09 +0800793 if (offload_reverb_get_enable_flag(&(reverb_ctxt->offload_reverb))) {
794 if (reverb_ctxt->ctl && reverb_ctxt->preset) {
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700795 offload_reverb_send_params(reverb_ctxt->ctl, &reverb_ctxt->offload_reverb,
wjiangc37c2602014-03-24 23:43:09 +0800796 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
797 OFFLOAD_SEND_REVERB_PRESET);
798 }
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700799 if ((reverb_ctxt->hw_acc_fd > 0) && reverb_ctxt->preset) {
800 hw_acc_reverb_send_params(reverb_ctxt->hw_acc_fd,
801 &reverb_ctxt->offload_reverb,
802 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
803 OFFLOAD_SEND_REVERB_PRESET);
804 }
wjiangc37c2602014-03-24 23:43:09 +0800805 }
Vatsal Buchac09ae062018-11-14 13:25:08 +0530806 enable_gcov();
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800807 return 0;
808}
809
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700810int reverb_stop(effect_context_t *context, output_context_t *output __unused)
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800811{
812 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
813
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530814 ALOGV("%s: ctxt %p", __func__, reverb_ctxt);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700815 if (offload_reverb_get_enable_flag(&(reverb_ctxt->offload_reverb)) &&
816 reverb_ctxt->ctl) {
817 struct reverb_params reverb;
818 reverb.enable_flag = false;
819 offload_reverb_send_params(reverb_ctxt->ctl, &reverb,
820 OFFLOAD_SEND_REVERB_ENABLE_FLAG);
821 }
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800822 reverb_ctxt->ctl = NULL;
Vatsal Buchac09ae062018-11-14 13:25:08 +0530823 enable_gcov();
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800824 return 0;
825}
826
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700827int reverb_set_mode(effect_context_t *context, int32_t hw_acc_fd)
828{
829 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
830
831 ALOGV("%s: ctxt %p", __func__, reverb_ctxt);
832 reverb_ctxt->hw_acc_fd = hw_acc_fd;
833 if ((reverb_ctxt->hw_acc_fd > 0) &&
834 (offload_reverb_get_enable_flag(&(reverb_ctxt->offload_reverb))))
835 hw_acc_reverb_send_params(reverb_ctxt->hw_acc_fd,
836 &reverb_ctxt->offload_reverb,
837 OFFLOAD_SEND_BASSBOOST_ENABLE_FLAG |
838 OFFLOAD_SEND_BASSBOOST_STRENGTH);
839 return 0;
840}