blob: e97b651cf402896e88575787d549e2d0ac1bff3b [file] [log] [blame]
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -08001/*
Weiyin Jiang90ac1ea2017-04-13 14:18:23 +08002 * Copyright (c) 2013 - 2014, 2017, 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>
24#include <cutils/log.h>
25#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
33/* Offload auxiliary environmental reverb UUID: 79a18026-18fd-4185-8233-0002a5d5c51b */
34const effect_descriptor_t aux_env_reverb_descriptor = {
35 { 0xc2e5d5f0, 0x94bd, 0x4763, 0x9cac, { 0x4e, 0x23, 0x4d, 0x06, 0x83, 0x9e } },
36 { 0x79a18026, 0x18fd, 0x4185, 0x8233, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } },
37 EFFECT_CONTROL_API_VERSION,
Weiyin Jiang90ac1ea2017-04-13 14:18:23 +080038 (EFFECT_FLAG_TYPE_AUXILIARY | EFFECT_FLAG_HW_ACC_TUNNEL | EFFECT_FLAG_VOLUME_CTRL),
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -080039 0, /* TODO */
40 1,
41 "MSM offload Auxiliary Environmental Reverb",
42 "The Android Open Source Project",
43};
44
45/* Offload insert environmental reverb UUID: eb64ea04-973b-43d2-8f5e-0002a5d5c51b */
46const effect_descriptor_t ins_env_reverb_descriptor = {
47 {0xc2e5d5f0, 0x94bd, 0x4763, 0x9cac, {0x4e, 0x23, 0x4d, 0x06, 0x83, 0x9e}},
48 {0xeb64ea04, 0x973b, 0x43d2, 0x8f5e, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}},
49 EFFECT_CONTROL_API_VERSION,
Weiyin Jiang90ac1ea2017-04-13 14:18:23 +080050 (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_INSERT_FIRST | EFFECT_FLAG_HW_ACC_TUNNEL |
51 EFFECT_FLAG_VOLUME_CTRL),
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -080052 0, /* TODO */
53 1,
54 "MSM offload Insert Environmental Reverb",
55 "The Android Open Source Project",
56};
57
58// Offload auxiliary preset reverb UUID: 6987be09-b142-4b41-9056-0002a5d5c51b */
59const effect_descriptor_t aux_preset_reverb_descriptor = {
60 {0x47382d60, 0xddd8, 0x11db, 0xbf3a, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}},
61 {0x6987be09, 0xb142, 0x4b41, 0x9056, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}},
62 EFFECT_CONTROL_API_VERSION,
Weiyin Jiang90ac1ea2017-04-13 14:18:23 +080063 (EFFECT_FLAG_TYPE_AUXILIARY | EFFECT_FLAG_HW_ACC_TUNNEL | EFFECT_FLAG_VOLUME_CTRL),
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -080064 0, /* TODO */
65 1,
66 "MSM offload Auxiliary Preset Reverb",
67 "The Android Open Source Project",
68};
69
70// Offload insert preset reverb UUID: aa2bebf6-47cf-4613-9bca-0002a5d5c51b */
71const effect_descriptor_t ins_preset_reverb_descriptor = {
72 {0x47382d60, 0xddd8, 0x11db, 0xbf3a, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}},
73 {0xaa2bebf6, 0x47cf, 0x4613, 0x9bca, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}},
74 EFFECT_CONTROL_API_VERSION,
Weiyin Jiang90ac1ea2017-04-13 14:18:23 +080075 (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_INSERT_FIRST | EFFECT_FLAG_HW_ACC_TUNNEL |
76 EFFECT_FLAG_VOLUME_CTRL),
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -080077 0, /* TODO */
78 1,
79 "MSM offload Insert Preset Reverb",
80 "The Android Open Source Project",
81};
82
83static const reverb_settings_t reverb_presets[] = {
84 // REVERB_PRESET_NONE: values are unused
85 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
86 // REVERB_PRESET_SMALLROOM
87 {-400, -600, 1100, 830, -400, 5, 500, 10, 1000, 1000},
88 // REVERB_PRESET_MEDIUMROOM
89 {-400, -600, 1300, 830, -1000, 20, -200, 20, 1000, 1000},
90 // REVERB_PRESET_LARGEROOM
91 {-400, -600, 1500, 830, -1600, 5, -1000, 40, 1000, 1000},
92 // REVERB_PRESET_MEDIUMHALL
93 {-400, -600, 1800, 700, -1300, 15, -800, 30, 1000, 1000},
94 // REVERB_PRESET_LARGEHALL
95 {-400, -600, 1800, 700, -2000, 30, -1400, 60, 1000, 1000},
96 // REVERB_PRESET_PLATE
97 {-400, -200, 1300, 900, 0, 2, 0, 10, 1000, 750},
98};
99
100
101void reverb_auxiliary_init(reverb_context_t *context)
102{
103 context->auxiliary = true;
104 context->preset = false;
105}
106
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700107void reverb_insert_init(reverb_context_t *context)
108{
109 context->auxiliary = false;
110 context->preset = true;
111 context->cur_preset = REVERB_PRESET_LAST + 1;
112 context->next_preset = REVERB_DEFAULT_PRESET;
113}
114
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800115void reverb_preset_init(reverb_context_t *context)
116{
117 context->auxiliary = false;
118 context->preset = true;
119 context->cur_preset = REVERB_PRESET_LAST + 1;
120 context->next_preset = REVERB_DEFAULT_PRESET;
121}
122
123/*
124 * Reverb operations
125 */
126int16_t reverb_get_room_level(reverb_context_t *context)
127{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530128 ALOGV("%s: ctxt %p, room level: %d", __func__, context, context->reverb_settings.roomLevel);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800129 return context->reverb_settings.roomLevel;
130}
131
132void reverb_set_room_level(reverb_context_t *context, int16_t room_level)
133{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530134 ALOGV("%s: ctxt %p, room level: %d", __func__, context, room_level);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800135 context->reverb_settings.roomLevel = room_level;
136 offload_reverb_set_room_level(&(context->offload_reverb), room_level);
137 if (context->ctl)
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700138 offload_reverb_send_params(context->ctl, &context->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800139 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
140 OFFLOAD_SEND_REVERB_ROOM_LEVEL);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700141 if (context->hw_acc_fd > 0)
142 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
143 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
144 OFFLOAD_SEND_REVERB_ROOM_LEVEL);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800145}
146
147int16_t reverb_get_room_hf_level(reverb_context_t *context)
148{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530149 ALOGV("%s: ctxt %p, room hf level: %d", __func__, context,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800150 context->reverb_settings.roomHFLevel);
151 return context->reverb_settings.roomHFLevel;
152}
153
154void reverb_set_room_hf_level(reverb_context_t *context, int16_t room_hf_level)
155{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530156 ALOGV("%s: ctxt %p, room hf level: %d", __func__, context, room_hf_level);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800157 context->reverb_settings.roomHFLevel = room_hf_level;
158 offload_reverb_set_room_hf_level(&(context->offload_reverb), room_hf_level);
159 if (context->ctl)
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700160 offload_reverb_send_params(context->ctl, &context->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800161 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
162 OFFLOAD_SEND_REVERB_ROOM_HF_LEVEL);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700163 if (context->hw_acc_fd > 0)
164 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
165 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
166 OFFLOAD_SEND_REVERB_ROOM_HF_LEVEL);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800167}
168
169uint32_t reverb_get_decay_time(reverb_context_t *context)
170{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530171 ALOGV("%s: ctxt %p, decay time: %d", __func__, context,
172 context->reverb_settings.decayTime);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800173 return context->reverb_settings.decayTime;
174}
175
176void reverb_set_decay_time(reverb_context_t *context, uint32_t decay_time)
177{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530178 ALOGV("%s: ctxt %p, decay_time: %d", __func__, context, decay_time);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800179 context->reverb_settings.decayTime = decay_time;
180 offload_reverb_set_decay_time(&(context->offload_reverb), decay_time);
181 if (context->ctl)
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700182 offload_reverb_send_params(context->ctl, &context->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800183 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
184 OFFLOAD_SEND_REVERB_DECAY_TIME);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700185 if (context->hw_acc_fd > 0)
186 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
187 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
188 OFFLOAD_SEND_REVERB_DECAY_TIME);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800189}
190
191int16_t reverb_get_decay_hf_ratio(reverb_context_t *context)
192{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530193 ALOGV("%s: ctxt %p, decay hf ratio: %d", __func__, context,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800194 context->reverb_settings.decayHFRatio);
195 return context->reverb_settings.decayHFRatio;
196}
197
198void reverb_set_decay_hf_ratio(reverb_context_t *context, int16_t decay_hf_ratio)
199{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530200 ALOGV("%s: ctxt %p, decay_hf_ratio: %d", __func__, context, decay_hf_ratio);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800201 context->reverb_settings.decayHFRatio = decay_hf_ratio;
202 offload_reverb_set_decay_hf_ratio(&(context->offload_reverb), decay_hf_ratio);
203 if (context->ctl)
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700204 offload_reverb_send_params(context->ctl, &context->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800205 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
206 OFFLOAD_SEND_REVERB_DECAY_HF_RATIO);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700207 if (context->hw_acc_fd > 0)
208 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
209 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
210 OFFLOAD_SEND_REVERB_DECAY_HF_RATIO);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800211}
212
213int16_t reverb_get_reverb_level(reverb_context_t *context)
214{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530215 ALOGV("%s: ctxt %p, reverb level: %d", __func__, context,
216 context->reverb_settings.reverbLevel);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800217 return context->reverb_settings.reverbLevel;
218}
219
220void reverb_set_reverb_level(reverb_context_t *context, int16_t reverb_level)
221{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530222 ALOGV("%s: ctxt %p, reverb level: %d", __func__, context, reverb_level);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800223 context->reverb_settings.reverbLevel = reverb_level;
224 offload_reverb_set_reverb_level(&(context->offload_reverb), reverb_level);
225 if (context->ctl)
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700226 offload_reverb_send_params(context->ctl, &context->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800227 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
228 OFFLOAD_SEND_REVERB_LEVEL);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700229 if (context->hw_acc_fd > 0)
230 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
231 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
232 OFFLOAD_SEND_REVERB_LEVEL);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800233}
234
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800235uint32_t reverb_get_reverb_delay(reverb_context_t *context)
236{
237 ALOGV("%s: ctxt %p, reverb delay: %d", __func__, context,
238 context->reverb_settings.reverbDelay);
239 return context->reverb_settings.reverbDelay;
240}
241
242void reverb_set_reverb_delay(reverb_context_t *context, uint32_t delay)
243{
244 ALOGV("%s: ctxt %p, reverb delay: %d", __func__, context, delay);
245 context->reverb_settings.reverbDelay = delay;
246 offload_reverb_set_delay(&(context->offload_reverb), delay);
247 if (context->ctl)
248 offload_reverb_send_params(context->ctl, &context->offload_reverb,
249 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
250 OFFLOAD_SEND_REVERB_DELAY);
251 if (context->hw_acc_fd > 0)
252 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
253 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
254 OFFLOAD_SEND_REVERB_DELAY);
255}
256
257int16_t reverb_get_reflections_level(reverb_context_t *context)
258{
259 ALOGV("%s: ctxt %p, reflection level: %d", __func__, context,
260 context->reverb_settings.reflectionsLevel);
261 return context->reverb_settings.reflectionsLevel;
262}
263
264void reverb_set_reflections_level(reverb_context_t *context, int16_t level)
265{
266 ALOGV("%s: ctxt %p, reflection level: %d", __func__, context, level);
267 context->reverb_settings.reflectionsLevel = level;
268 offload_reverb_set_reflections_level(&(context->offload_reverb), level);
269 if (context->ctl)
270 offload_reverb_send_params(context->ctl, &context->offload_reverb,
271 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
272 OFFLOAD_SEND_REVERB_REFLECTIONS_LEVEL);
273 if (context->hw_acc_fd > 0)
274 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
275 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
276 OFFLOAD_SEND_REVERB_REFLECTIONS_LEVEL);
277}
278
279uint32_t reverb_get_reflections_delay(reverb_context_t *context)
280{
281 ALOGV("%s: ctxt %p, reflection delay: %d", __func__, context,
282 context->reverb_settings.reflectionsDelay);
283 return context->reverb_settings.reflectionsDelay;
284}
285
286void reverb_set_reflections_delay(reverb_context_t *context, uint32_t delay)
287{
288 ALOGV("%s: ctxt %p, reflection delay: %d", __func__, context, delay);
289 context->reverb_settings.reflectionsDelay = delay;
290 offload_reverb_set_reflections_delay(&(context->offload_reverb), delay);
291 if (context->ctl)
292 offload_reverb_send_params(context->ctl, &context->offload_reverb,
293 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
294 OFFLOAD_SEND_REVERB_REFLECTIONS_DELAY);
295 if (context->hw_acc_fd > 0)
296 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
297 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
298 OFFLOAD_SEND_REVERB_REFLECTIONS_DELAY);
299}
300
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800301int16_t reverb_get_diffusion(reverb_context_t *context)
302{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530303 ALOGV("%s: ctxt %p, diffusion: %d", __func__, context,
304 context->reverb_settings.diffusion);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800305 return context->reverb_settings.diffusion;
306}
307
308void reverb_set_diffusion(reverb_context_t *context, int16_t diffusion)
309{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530310 ALOGV("%s: ctxt %p, diffusion: %d", __func__, context, diffusion);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800311 context->reverb_settings.diffusion = diffusion;
312 offload_reverb_set_diffusion(&(context->offload_reverb), diffusion);
313 if (context->ctl)
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700314 offload_reverb_send_params(context->ctl, &context->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800315 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
316 OFFLOAD_SEND_REVERB_DIFFUSION);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700317 if (context->hw_acc_fd > 0)
318 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
319 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
320 OFFLOAD_SEND_REVERB_DIFFUSION);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800321}
322
323int16_t reverb_get_density(reverb_context_t *context)
324{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530325 ALOGV("%s: ctxt %p, density: %d", __func__, context,
326 context->reverb_settings.density);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800327 return context->reverb_settings.density;
328}
329
330void reverb_set_density(reverb_context_t *context, int16_t density)
331{
wjiang50b81f42014-08-06 08:03:14 +0800332 ALOGV("%s: ctxt %p, density: %d", __func__, context, density);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800333 context->reverb_settings.density = density;
334 offload_reverb_set_density(&(context->offload_reverb), density);
335 if (context->ctl)
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700336 offload_reverb_send_params(context->ctl, &context->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800337 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
338 OFFLOAD_SEND_REVERB_DENSITY);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700339 if (context->hw_acc_fd > 0)
340 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
341 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
342 OFFLOAD_SEND_REVERB_DENSITY);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800343}
344
345void reverb_set_preset(reverb_context_t *context, int16_t preset)
346{
wjiangb27e25f2014-01-22 13:24:26 +0800347 bool enable;
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530348 ALOGV("%s: ctxt %p, preset: %d", __func__, context, preset);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800349 context->next_preset = preset;
350 offload_reverb_set_preset(&(context->offload_reverb), preset);
wjiangb27e25f2014-01-22 13:24:26 +0800351
Dhananjay Kumar3fa6a002015-07-14 18:58:18 +0530352 if (context->enabled_by_client) {
353 enable = (preset == REVERB_PRESET_NONE) ? false: true;
354 offload_reverb_set_enable_flag(&(context->offload_reverb), enable);
wjiangb27e25f2014-01-22 13:24:26 +0800355
Dhananjay Kumar3fa6a002015-07-14 18:58:18 +0530356 if (context->ctl)
357 offload_reverb_send_params(context->ctl, &context->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800358 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
359 OFFLOAD_SEND_REVERB_PRESET);
Dhananjay Kumar3fa6a002015-07-14 18:58:18 +0530360 if (context->hw_acc_fd > 0)
361 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700362 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
363 OFFLOAD_SEND_REVERB_PRESET);
Dhananjay Kumar3fa6a002015-07-14 18:58:18 +0530364 }
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800365}
366
367void reverb_set_all_properties(reverb_context_t *context,
368 reverb_settings_t *reverb_settings)
369{
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530370 ALOGV("%s: ctxt %p", __func__, context);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800371 context->reverb_settings.roomLevel = reverb_settings->roomLevel;
372 context->reverb_settings.roomHFLevel = reverb_settings->roomHFLevel;
373 context->reverb_settings.decayTime = reverb_settings->decayTime;
374 context->reverb_settings.decayHFRatio = reverb_settings->decayHFRatio;
375 context->reverb_settings.reverbLevel = reverb_settings->reverbLevel;
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800376 context->reverb_settings.reverbDelay = reverb_settings->reverbDelay;
377 context->reverb_settings.reflectionsLevel = reverb_settings->reflectionsLevel;
378 context->reverb_settings.reflectionsDelay = reverb_settings->reflectionsDelay;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800379 context->reverb_settings.diffusion = reverb_settings->diffusion;
380 context->reverb_settings.density = reverb_settings->density;
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800381
382 offload_reverb_set_room_level(&(context->offload_reverb),
383 reverb_settings->roomLevel);
384 offload_reverb_set_room_hf_level(&(context->offload_reverb),
385 reverb_settings->roomHFLevel);
386 offload_reverb_set_decay_time(&(context->offload_reverb),
387 reverb_settings->decayTime);
388 offload_reverb_set_decay_hf_ratio(&(context->offload_reverb),
389 reverb_settings->decayHFRatio);
390 offload_reverb_set_reverb_level(&(context->offload_reverb),
391 reverb_settings->reverbLevel);
392 offload_reverb_set_delay(&(context->offload_reverb),
393 reverb_settings->reverbDelay);
394 offload_reverb_set_reflections_level(&(context->offload_reverb),
395 reverb_settings->reflectionsLevel);
396 offload_reverb_set_reflections_delay(&(context->offload_reverb),
397 reverb_settings->reflectionsDelay);
398 offload_reverb_set_diffusion(&(context->offload_reverb),
399 reverb_settings->diffusion);
400 offload_reverb_set_density(&(context->offload_reverb),
401 reverb_settings->density);
402
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800403 if (context->ctl)
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700404 offload_reverb_send_params(context->ctl, &context->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800405 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
406 OFFLOAD_SEND_REVERB_ROOM_LEVEL |
407 OFFLOAD_SEND_REVERB_ROOM_HF_LEVEL |
408 OFFLOAD_SEND_REVERB_DECAY_TIME |
409 OFFLOAD_SEND_REVERB_DECAY_HF_RATIO |
410 OFFLOAD_SEND_REVERB_LEVEL |
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800411 OFFLOAD_SEND_REVERB_DELAY |
412 OFFLOAD_SEND_REVERB_REFLECTIONS_LEVEL |
413 OFFLOAD_SEND_REVERB_REFLECTIONS_DELAY |
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800414 OFFLOAD_SEND_REVERB_DIFFUSION |
415 OFFLOAD_SEND_REVERB_DENSITY);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700416 if (context->hw_acc_fd > 0)
417 hw_acc_reverb_send_params(context->hw_acc_fd, &context->offload_reverb,
418 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
419 OFFLOAD_SEND_REVERB_ROOM_LEVEL |
420 OFFLOAD_SEND_REVERB_ROOM_HF_LEVEL |
421 OFFLOAD_SEND_REVERB_DECAY_TIME |
422 OFFLOAD_SEND_REVERB_DECAY_HF_RATIO |
423 OFFLOAD_SEND_REVERB_LEVEL |
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800424 OFFLOAD_SEND_REVERB_DELAY |
425 OFFLOAD_SEND_REVERB_REFLECTIONS_LEVEL |
426 OFFLOAD_SEND_REVERB_REFLECTIONS_DELAY |
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700427 OFFLOAD_SEND_REVERB_DIFFUSION |
428 OFFLOAD_SEND_REVERB_DENSITY);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800429}
430
431void reverb_load_preset(reverb_context_t *context)
432{
433 context->cur_preset = context->next_preset;
434
435 if (context->cur_preset != REVERB_PRESET_NONE) {
436 const reverb_settings_t *preset = &reverb_presets[context->cur_preset];
437 reverb_set_room_level(context, preset->roomLevel);
438 reverb_set_room_hf_level(context, preset->roomHFLevel);
439 reverb_set_decay_time(context, preset->decayTime);
440 reverb_set_decay_hf_ratio(context, preset->decayHFRatio);
441 reverb_set_reverb_level(context, preset->reverbLevel);
442 reverb_set_diffusion(context, preset->diffusion);
443 reverb_set_density(context, preset->density);
444 }
445}
446
447int reverb_get_parameter(effect_context_t *context, effect_param_t *p,
448 uint32_t *size)
449{
450 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
451 int voffset = ((p->psize - 1) / sizeof(int32_t) + 1) * sizeof(int32_t);
452 int32_t *param_tmp = (int32_t *)p->data;
453 int32_t param = *param_tmp++;
454 void *value = p->data + voffset;
455 reverb_settings_t *reverb_settings;
456 int i;
457
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530458 ALOGV("%s: ctxt %p, param %d", __func__, reverb_ctxt, param);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800459
460 p->status = 0;
461
462 if (reverb_ctxt->preset) {
463 if (param != REVERB_PARAM_PRESET || p->vsize < sizeof(uint16_t))
464 return -EINVAL;
465 *(uint16_t *)value = reverb_ctxt->next_preset;
466 ALOGV("get REVERB_PARAM_PRESET, preset %d", reverb_ctxt->next_preset);
wjiangc37c2602014-03-24 23:43:09 +0800467 return 0;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800468 }
469 switch (param) {
470 case REVERB_PARAM_ROOM_LEVEL:
471 if (p->vsize < sizeof(uint16_t))
472 p->status = -EINVAL;
473 p->vsize = sizeof(uint16_t);
474 break;
475 case REVERB_PARAM_ROOM_HF_LEVEL:
476 if (p->vsize < sizeof(uint16_t))
477 p->status = -EINVAL;
478 p->vsize = sizeof(uint16_t);
479 break;
480 case REVERB_PARAM_DECAY_TIME:
481 if (p->vsize < sizeof(uint32_t))
482 p->status = -EINVAL;
483 p->vsize = sizeof(uint32_t);
484 break;
485 case REVERB_PARAM_DECAY_HF_RATIO:
486 if (p->vsize < sizeof(uint16_t))
487 p->status = -EINVAL;
488 p->vsize = sizeof(uint16_t);
489 break;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800490 case REVERB_PARAM_REVERB_LEVEL:
491 if (p->vsize < sizeof(uint16_t))
492 p->status = -EINVAL;
493 p->vsize = sizeof(uint16_t);
494 break;
495 case REVERB_PARAM_REVERB_DELAY:
496 if (p->vsize < sizeof(uint32_t))
497 p->status = -EINVAL;
498 p->vsize = sizeof(uint32_t);
499 break;
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800500 case REVERB_PARAM_REFLECTIONS_LEVEL:
501 if (p->vsize < sizeof(uint16_t))
502 p->status = -EINVAL;
503 p->vsize = sizeof(uint16_t);
504 break;
505 case REVERB_PARAM_REFLECTIONS_DELAY:
506 if (p->vsize < sizeof(uint32_t))
507 p->status = -EINVAL;
508 p->vsize = sizeof(uint32_t);
509 break;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800510 case REVERB_PARAM_DIFFUSION:
511 if (p->vsize < sizeof(uint16_t))
512 p->status = -EINVAL;
513 p->vsize = sizeof(uint16_t);
514 break;
515 case REVERB_PARAM_DENSITY:
516 if (p->vsize < sizeof(uint16_t))
517 p->status = -EINVAL;
518 p->vsize = sizeof(uint16_t);
519 break;
520 case REVERB_PARAM_PROPERTIES:
521 if (p->vsize < sizeof(reverb_settings_t))
522 p->status = -EINVAL;
523 p->vsize = sizeof(reverb_settings_t);
524 break;
525 default:
526 p->status = -EINVAL;
527 }
528
529 *size = sizeof(effect_param_t) + voffset + p->vsize;
530
531 if (p->status != 0)
532 return 0;
533
534 switch (param) {
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800535 case REVERB_PARAM_ROOM_LEVEL:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800536 *(int16_t *)value = reverb_get_room_level(reverb_ctxt);
537 break;
538 case REVERB_PARAM_ROOM_HF_LEVEL:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800539 *(int16_t *)value = reverb_get_room_hf_level(reverb_ctxt);
540 break;
541 case REVERB_PARAM_DECAY_TIME:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800542 *(uint32_t *)value = reverb_get_decay_time(reverb_ctxt);
543 break;
544 case REVERB_PARAM_DECAY_HF_RATIO:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800545 *(int16_t *)value = reverb_get_decay_hf_ratio(reverb_ctxt);
546 break;
547 case REVERB_PARAM_REVERB_LEVEL:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800548 *(int16_t *)value = reverb_get_reverb_level(reverb_ctxt);
549 break;
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800550 case REVERB_PARAM_REVERB_DELAY:
551 *(uint32_t *)value = reverb_get_reverb_delay(reverb_ctxt);
552 break;
553 case REVERB_PARAM_REFLECTIONS_LEVEL:
554 *(int16_t *)value = reverb_get_reflections_level(reverb_ctxt);
555 break;
556 case REVERB_PARAM_REFLECTIONS_DELAY:
557 *(uint32_t *)value = reverb_get_reflections_delay(reverb_ctxt);
558 break;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800559 case REVERB_PARAM_DIFFUSION:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800560 *(int16_t *)value = reverb_get_diffusion(reverb_ctxt);
561 break;
562 case REVERB_PARAM_DENSITY:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800563 *(int16_t *)value = reverb_get_density(reverb_ctxt);
564 break;
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800565 case REVERB_PARAM_PROPERTIES:
566 reverb_settings = (reverb_settings_t *)value;
567 reverb_settings->roomLevel = reverb_get_room_level(reverb_ctxt);
568 reverb_settings->roomHFLevel = reverb_get_room_hf_level(reverb_ctxt);
569 reverb_settings->decayTime = reverb_get_decay_time(reverb_ctxt);
570 reverb_settings->decayHFRatio = reverb_get_decay_hf_ratio(reverb_ctxt);
571 reverb_settings->reverbLevel = reverb_get_reverb_level(reverb_ctxt);
572 reverb_settings->reverbDelay = reverb_get_reverb_delay(reverb_ctxt);
573 reverb_settings->reflectionsLevel = reverb_get_reflections_level(reverb_ctxt);
574 reverb_settings->reflectionsDelay = reverb_get_reflections_delay(reverb_ctxt);
575 reverb_settings->diffusion = reverb_get_diffusion(reverb_ctxt);
576 reverb_settings->density = reverb_get_density(reverb_ctxt);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800577 break;
578 default:
579 p->status = -EINVAL;
580 break;
581 }
582
583 return 0;
584}
585
586int reverb_set_parameter(effect_context_t *context, effect_param_t *p,
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700587 uint32_t size __unused)
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800588{
589 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
590 int voffset = ((p->psize - 1) / sizeof(int32_t) + 1) * sizeof(int32_t);
591 void *value = p->data + voffset;
592 int32_t *param_tmp = (int32_t *)p->data;
593 int32_t param = *param_tmp++;
594 reverb_settings_t *reverb_settings;
595 int16_t level;
596 int16_t ratio;
597 uint32_t time;
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800598 uint32_t delay;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800599
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530600 ALOGV("%s: ctxt %p, param %d", __func__, reverb_ctxt, param);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800601
602 p->status = 0;
603
604 if (reverb_ctxt->preset) {
605 if (param != REVERB_PARAM_PRESET)
606 return -EINVAL;
607 uint16_t preset = *(uint16_t *)value;
608 ALOGV("set REVERB_PARAM_PRESET, preset %d", preset);
609 if (preset > REVERB_PRESET_LAST) {
610 return -EINVAL;
611 }
612 reverb_set_preset(reverb_ctxt, preset);
wjiangc37c2602014-03-24 23:43:09 +0800613 return 0;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800614 }
615 switch (param) {
616 case REVERB_PARAM_PROPERTIES:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800617 reverb_settings = (reverb_settings_t *)value;
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800618 reverb_set_all_properties(reverb_ctxt, reverb_settings);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800619 break;
620 case REVERB_PARAM_ROOM_LEVEL:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800621 level = *(int16_t *)value;
622 reverb_set_room_level(reverb_ctxt, level);
623 break;
624 case REVERB_PARAM_ROOM_HF_LEVEL:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800625 level = *(int16_t *)value;
626 reverb_set_room_hf_level(reverb_ctxt, level);
627 break;
628 case REVERB_PARAM_DECAY_TIME:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800629 time = *(uint32_t *)value;
630 reverb_set_decay_time(reverb_ctxt, time);
631 break;
632 case REVERB_PARAM_DECAY_HF_RATIO:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800633 ratio = *(int16_t *)value;
634 reverb_set_decay_hf_ratio(reverb_ctxt, ratio);
635 break;
636 case REVERB_PARAM_REVERB_LEVEL:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800637 level = *(int16_t *)value;
638 reverb_set_reverb_level(reverb_ctxt, level);
639 break;
Weiyin Jiang6211dd02015-11-10 16:25:07 +0800640 case REVERB_PARAM_REVERB_DELAY:
641 delay = *(uint32_t *)value;
642 reverb_set_reverb_delay(reverb_ctxt, delay);
643 break;
644 case REVERB_PARAM_REFLECTIONS_LEVEL:
645 level = *(int16_t *)value;
646 reverb_set_reflections_level(reverb_ctxt, level);
647 break;
648 case REVERB_PARAM_REFLECTIONS_DELAY:
649 delay = *(uint32_t *)value;
650 reverb_set_reflections_delay(reverb_ctxt, delay);
651 break;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800652 case REVERB_PARAM_DIFFUSION:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800653 ratio = *(int16_t *)value;
654 reverb_set_diffusion(reverb_ctxt, ratio);
655 break;
656 case REVERB_PARAM_DENSITY:
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800657 ratio = *(int16_t *)value;
658 reverb_set_density(reverb_ctxt, ratio);
659 break;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800660 default:
661 p->status = -EINVAL;
662 break;
663 }
664
665 return 0;
666}
667
668int reverb_set_device(effect_context_t *context, uint32_t device)
669{
670 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
671
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530672 ALOGV("%s: ctxt %p, device: 0x%x", __func__, reverb_ctxt, device);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800673 reverb_ctxt->device = device;
674 offload_reverb_set_device(&(reverb_ctxt->offload_reverb), device);
675 return 0;
676}
677
678int reverb_reset(effect_context_t *context)
679{
680 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
681
682 return 0;
683}
684
685int reverb_init(effect_context_t *context)
686{
687 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
688
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530689 ALOGV("%s: ctxt %p", __func__, reverb_ctxt);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800690 context->config.inputCfg.accessMode = EFFECT_BUFFER_ACCESS_READ;
691 /*
692 FIXME: channel mode is mono for auxiliary. is it needed for offload ?
693 If so, this set config needs to be updated accordingly
694 */
695 context->config.inputCfg.channels = AUDIO_CHANNEL_OUT_STEREO;
696 context->config.inputCfg.format = AUDIO_FORMAT_PCM_16_BIT;
697 context->config.inputCfg.samplingRate = 44100;
698 context->config.inputCfg.bufferProvider.getBuffer = NULL;
699 context->config.inputCfg.bufferProvider.releaseBuffer = NULL;
700 context->config.inputCfg.bufferProvider.cookie = NULL;
701 context->config.inputCfg.mask = EFFECT_CONFIG_ALL;
702 context->config.outputCfg.accessMode = EFFECT_BUFFER_ACCESS_ACCUMULATE;
703 context->config.outputCfg.channels = AUDIO_CHANNEL_OUT_STEREO;
704 context->config.outputCfg.format = AUDIO_FORMAT_PCM_16_BIT;
705 context->config.outputCfg.samplingRate = 44100;
706 context->config.outputCfg.bufferProvider.getBuffer = NULL;
707 context->config.outputCfg.bufferProvider.releaseBuffer = NULL;
708 context->config.outputCfg.bufferProvider.cookie = NULL;
709 context->config.outputCfg.mask = EFFECT_CONFIG_ALL;
710
711 set_config(context, &context->config);
712
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700713 reverb_ctxt->hw_acc_fd = -1;
Dhananjay Kumar3fa6a002015-07-14 18:58:18 +0530714 reverb_ctxt->enabled_by_client = false;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800715 memset(&(reverb_ctxt->reverb_settings), 0, sizeof(reverb_settings_t));
716 memset(&(reverb_ctxt->offload_reverb), 0, sizeof(struct reverb_params));
717
718 if (reverb_ctxt->preset &&
719 reverb_ctxt->next_preset != reverb_ctxt->cur_preset)
720 reverb_load_preset(reverb_ctxt);
721
722 return 0;
723}
724
725int reverb_enable(effect_context_t *context)
726{
727 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
728
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530729 ALOGV("%s: ctxt %p", __func__, reverb_ctxt);
Dhananjay Kumar3fa6a002015-07-14 18:58:18 +0530730 reverb_ctxt->enabled_by_client = true;
731
732 /* REVERB_PRESET_NONE is equivalent to disabled state,
733 * But support for this state is not provided in DSP.
734 * Hence, do not set enable flag, if in peset mode with preset "NONE".
735 * Effect would be enabled when valid preset is set.
736 */
737 if ((reverb_ctxt->preset == true) &&
738 (reverb_ctxt->next_preset == REVERB_PRESET_NONE))
739 return 0;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800740
741 if (!offload_reverb_get_enable_flag(&(reverb_ctxt->offload_reverb)))
742 offload_reverb_set_enable_flag(&(reverb_ctxt->offload_reverb), true);
743 return 0;
744}
745
746int reverb_disable(effect_context_t *context)
747{
748 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
749
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530750 ALOGV("%s: ctxt %p", __func__, reverb_ctxt);
Dhananjay Kumar3fa6a002015-07-14 18:58:18 +0530751 reverb_ctxt->enabled_by_client = false;
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800752 if (offload_reverb_get_enable_flag(&(reverb_ctxt->offload_reverb))) {
753 offload_reverb_set_enable_flag(&(reverb_ctxt->offload_reverb), false);
754 if (reverb_ctxt->ctl)
755 offload_reverb_send_params(reverb_ctxt->ctl,
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700756 &reverb_ctxt->offload_reverb,
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800757 OFFLOAD_SEND_REVERB_ENABLE_FLAG);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700758 if (reverb_ctxt->hw_acc_fd > 0)
759 hw_acc_reverb_send_params(reverb_ctxt->hw_acc_fd,
760 &reverb_ctxt->offload_reverb,
761 OFFLOAD_SEND_REVERB_ENABLE_FLAG);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800762 }
763 return 0;
764}
765
766int reverb_start(effect_context_t *context, output_context_t *output)
767{
768 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
769
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530770 ALOGV("%s: ctxt %p, ctl %p", __func__, reverb_ctxt, output->ctl);
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800771 reverb_ctxt->ctl = output->ctl;
wjiangc37c2602014-03-24 23:43:09 +0800772 if (offload_reverb_get_enable_flag(&(reverb_ctxt->offload_reverb))) {
773 if (reverb_ctxt->ctl && reverb_ctxt->preset) {
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700774 offload_reverb_send_params(reverb_ctxt->ctl, &reverb_ctxt->offload_reverb,
wjiangc37c2602014-03-24 23:43:09 +0800775 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
776 OFFLOAD_SEND_REVERB_PRESET);
777 }
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700778 if ((reverb_ctxt->hw_acc_fd > 0) && reverb_ctxt->preset) {
779 hw_acc_reverb_send_params(reverb_ctxt->hw_acc_fd,
780 &reverb_ctxt->offload_reverb,
781 OFFLOAD_SEND_REVERB_ENABLE_FLAG |
782 OFFLOAD_SEND_REVERB_PRESET);
783 }
wjiangc37c2602014-03-24 23:43:09 +0800784 }
785
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800786 return 0;
787}
788
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700789int reverb_stop(effect_context_t *context, output_context_t *output __unused)
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800790{
791 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
792
Dhananjay Kumar574f3922014-03-25 17:41:44 +0530793 ALOGV("%s: ctxt %p", __func__, reverb_ctxt);
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700794 if (offload_reverb_get_enable_flag(&(reverb_ctxt->offload_reverb)) &&
795 reverb_ctxt->ctl) {
796 struct reverb_params reverb;
797 reverb.enable_flag = false;
798 offload_reverb_send_params(reverb_ctxt->ctl, &reverb,
799 OFFLOAD_SEND_REVERB_ENABLE_FLAG);
800 }
Subhash Chandra Bose Naripeddy3eedc002013-11-12 20:45:15 -0800801 reverb_ctxt->ctl = NULL;
802 return 0;
803}
804
Subhash Chandra Bose Naripeddye40a7cd2014-06-03 19:42:41 -0700805int reverb_set_mode(effect_context_t *context, int32_t hw_acc_fd)
806{
807 reverb_context_t *reverb_ctxt = (reverb_context_t *)context;
808
809 ALOGV("%s: ctxt %p", __func__, reverb_ctxt);
810 reverb_ctxt->hw_acc_fd = hw_acc_fd;
811 if ((reverb_ctxt->hw_acc_fd > 0) &&
812 (offload_reverb_get_enable_flag(&(reverb_ctxt->offload_reverb))))
813 hw_acc_reverb_send_params(reverb_ctxt->hw_acc_fd,
814 &reverb_ctxt->offload_reverb,
815 OFFLOAD_SEND_BASSBOOST_ENABLE_FLAG |
816 OFFLOAD_SEND_BASSBOOST_STRENGTH);
817 return 0;
818}