141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George/* 241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * Copyright (C) 2014 The Android Open Source Project 341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * 441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * Licensed under the Apache License, Version 2.0 (the "License"); 541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * you may not use this file except in compliance with the License. 641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * You may obtain a copy of the License at 741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * 841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * http://www.apache.org/licenses/LICENSE-2.0 941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * 1041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * Unless required by applicable law or agreed to in writing, software 1141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * distributed under the License is distributed on an "AS IS" BASIS, 1241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * See the License for the specific language governing permissions and 1441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * limitations under the License. 1541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George */ 1641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 1741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#define LOG_TAG "offload_effect_reverb" 1841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George//#define LOG_NDEBUG 0 1941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 2041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#include <cutils/list.h> 2141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#include <cutils/log.h> 2241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#include <tinyalsa/asoundlib.h> 2341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#include <sound/audio_effects.h> 2441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#include <audio_effects/effect_environmentalreverb.h> 2541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#include <audio_effects/effect_presetreverb.h> 2641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 2741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#include "effect_api.h" 2841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#include "reverb.h" 2941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 3041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George/* Offload auxiliary environmental reverb UUID: 79a18026-18fd-4185-8233-0002a5d5c51b */ 3141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeconst effect_descriptor_t aux_env_reverb_descriptor = { 3241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George { 0xc2e5d5f0, 0x94bd, 0x4763, 0x9cac, { 0x4e, 0x23, 0x4d, 0x06, 0x83, 0x9e } }, 3341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George { 0x79a18026, 0x18fd, 0x4185, 0x8233, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } }, 3441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George EFFECT_CONTROL_API_VERSION, 3541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George (EFFECT_FLAG_TYPE_AUXILIARY | EFFECT_FLAG_HW_ACC_TUNNEL), 3641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 0, /* TODO */ 3741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 1, 3841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George "MSM offload Auxiliary Environmental Reverb", 3941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George "The Android Open Source Project", 4041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George}; 4141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 4241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George/* Offload insert environmental reverb UUID: eb64ea04-973b-43d2-8f5e-0002a5d5c51b */ 4341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeconst effect_descriptor_t ins_env_reverb_descriptor = { 4441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {0xc2e5d5f0, 0x94bd, 0x4763, 0x9cac, {0x4e, 0x23, 0x4d, 0x06, 0x83, 0x9e}}, 4541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {0xeb64ea04, 0x973b, 0x43d2, 0x8f5e, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}, 4641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George EFFECT_CONTROL_API_VERSION, 4741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_INSERT_FIRST | EFFECT_FLAG_HW_ACC_TUNNEL), 4841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 0, /* TODO */ 4941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 1, 5041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George "MSM offload Insert Environmental Reverb", 5141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George "The Android Open Source Project", 5241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George}; 5341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 5441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George// Offload auxiliary preset reverb UUID: 6987be09-b142-4b41-9056-0002a5d5c51b */ 5541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeconst effect_descriptor_t aux_preset_reverb_descriptor = { 5641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {0x47382d60, 0xddd8, 0x11db, 0xbf3a, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}, 5741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {0x6987be09, 0xb142, 0x4b41, 0x9056, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}, 5841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George EFFECT_CONTROL_API_VERSION, 5941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George (EFFECT_FLAG_TYPE_AUXILIARY | EFFECT_FLAG_HW_ACC_TUNNEL), 6041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 0, /* TODO */ 6141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 1, 6241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George "MSM offload Auxiliary Preset Reverb", 6341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George "The Android Open Source Project", 6441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George}; 6541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 6641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George// Offload insert preset reverb UUID: aa2bebf6-47cf-4613-9bca-0002a5d5c51b */ 6741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeconst effect_descriptor_t ins_preset_reverb_descriptor = { 6841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {0x47382d60, 0xddd8, 0x11db, 0xbf3a, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}, 6941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {0xaa2bebf6, 0x47cf, 0x4613, 0x9bca, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}, 7041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George EFFECT_CONTROL_API_VERSION, 7141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_INSERT_FIRST | EFFECT_FLAG_HW_ACC_TUNNEL), 7241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 0, /* TODO */ 7341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 1, 7441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George "MSM offload Insert Preset Reverb", 7541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George "The Android Open Source Project", 7641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George}; 7741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 7841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgestatic const reverb_settings_t reverb_presets[] = { 7941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George // REVERB_PRESET_NONE: values are unused 8041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 8141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George // REVERB_PRESET_SMALLROOM 8241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {-400, -600, 1100, 830, -400, 5, 500, 10, 1000, 1000}, 8341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George // REVERB_PRESET_MEDIUMROOM 8441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {-400, -600, 1300, 830, -1000, 20, -200, 20, 1000, 1000}, 8541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George // REVERB_PRESET_LARGEROOM 8641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {-400, -600, 1500, 830, -1600, 5, -1000, 40, 1000, 1000}, 8741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George // REVERB_PRESET_MEDIUMHALL 8841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {-400, -600, 1800, 700, -1300, 15, -800, 30, 1000, 1000}, 8941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George // REVERB_PRESET_LARGEHALL 9041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {-400, -600, 1800, 700, -2000, 30, -1400, 60, 1000, 1000}, 9141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George // REVERB_PRESET_PLATE 9241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {-400, -200, 1300, 900, 0, 2, 0, 10, 1000, 750}, 9341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George}; 9441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 9541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 9641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid reverb_auxiliary_init(reverb_context_t *context) 9741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 9841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->auxiliary = true; 9941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->preset = false; 10041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 10141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 10241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid reverb_insert_init(reverb_context_t *context) 10341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 10441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->auxiliary = false; 10541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->preset = true; 10641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->cur_preset = REVERB_PRESET_LAST + 1; 10741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->next_preset = REVERB_DEFAULT_PRESET; 10841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 10941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 11041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid reverb_preset_init(reverb_context_t *context) 11141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 11241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->auxiliary = false; 11341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->preset = true; 11441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->cur_preset = REVERB_PRESET_LAST + 1; 11541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->next_preset = REVERB_DEFAULT_PRESET; 11641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 11741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 11841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George/* 11941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George * Reverb operations 12041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George */ 12141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint16_t reverb_get_room_level(reverb_context_t *context) 12241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 12341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: room level: %d", __func__, context->reverb_settings.roomLevel); 12441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return context->reverb_settings.roomLevel; 12541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 12641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 12741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid reverb_set_room_level(reverb_context_t *context, int16_t room_level) 12841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 12941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: room level: %d", __func__, room_level); 13041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->reverb_settings.roomLevel = room_level; 13141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_set_room_level(&(context->offload_reverb), room_level); 13241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (context->ctl) 13341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_send_params(context->ctl, &context->offload_reverb, 13441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_ENABLE_FLAG | 13541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_ROOM_LEVEL); 13641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 13741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 13841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint16_t reverb_get_room_hf_level(reverb_context_t *context) 13941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 14041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: room hf level: %d", __func__, 14141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->reverb_settings.roomHFLevel); 14241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return context->reverb_settings.roomHFLevel; 14341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 14441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 14541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid reverb_set_room_hf_level(reverb_context_t *context, int16_t room_hf_level) 14641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 14741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: room hf level: %d", __func__, room_hf_level); 14841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->reverb_settings.roomHFLevel = room_hf_level; 14941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_set_room_hf_level(&(context->offload_reverb), room_hf_level); 15041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (context->ctl) 15141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_send_params(context->ctl, &context->offload_reverb, 15241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_ENABLE_FLAG | 15341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_ROOM_HF_LEVEL); 15441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 15541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 15641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeuint32_t reverb_get_decay_time(reverb_context_t *context) 15741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 15841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: decay time: %d", __func__, context->reverb_settings.decayTime); 15941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return context->reverb_settings.decayTime; 16041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 16141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 16241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid reverb_set_decay_time(reverb_context_t *context, uint32_t decay_time) 16341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 16441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: decay_time: %d", __func__, decay_time); 16541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->reverb_settings.decayTime = decay_time; 16641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_set_decay_time(&(context->offload_reverb), decay_time); 16741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (context->ctl) 16841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_send_params(context->ctl, &context->offload_reverb, 16941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_ENABLE_FLAG | 17041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_DECAY_TIME); 17141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 17241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 17341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint16_t reverb_get_decay_hf_ratio(reverb_context_t *context) 17441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 17541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: decay hf ratio: %d", __func__, 17641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->reverb_settings.decayHFRatio); 17741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return context->reverb_settings.decayHFRatio; 17841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 17941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 18041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid reverb_set_decay_hf_ratio(reverb_context_t *context, int16_t decay_hf_ratio) 18141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 18241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: decay_hf_ratio: %d", __func__, decay_hf_ratio); 18341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->reverb_settings.decayHFRatio = decay_hf_ratio; 18441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_set_decay_hf_ratio(&(context->offload_reverb), decay_hf_ratio); 18541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (context->ctl) 18641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_send_params(context->ctl, &context->offload_reverb, 18741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_ENABLE_FLAG | 18841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_DECAY_HF_RATIO); 18941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 19041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 19141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint16_t reverb_get_reverb_level(reverb_context_t *context) 19241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 19341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: reverb level: %d", __func__, context->reverb_settings.reverbLevel); 19441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return context->reverb_settings.reverbLevel; 19541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 19641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 19741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid reverb_set_reverb_level(reverb_context_t *context, int16_t reverb_level) 19841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 19941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: reverb level: %d", __func__, reverb_level); 20041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->reverb_settings.reverbLevel = reverb_level; 20141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_set_reverb_level(&(context->offload_reverb), reverb_level); 20241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (context->ctl) 20341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_send_params(context->ctl, &context->offload_reverb, 20441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_ENABLE_FLAG | 20541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_LEVEL); 20641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 20741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 20841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint16_t reverb_get_diffusion(reverb_context_t *context) 20941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 21041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: diffusion: %d", __func__, context->reverb_settings.diffusion); 21141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return context->reverb_settings.diffusion; 21241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 21341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 21441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid reverb_set_diffusion(reverb_context_t *context, int16_t diffusion) 21541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 21641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: diffusion: %d", __func__, diffusion); 21741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->reverb_settings.diffusion = diffusion; 21841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_set_diffusion(&(context->offload_reverb), diffusion); 21941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (context->ctl) 22041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_send_params(context->ctl, &context->offload_reverb, 22141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_ENABLE_FLAG | 22241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_DIFFUSION); 22341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 22441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 22541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint16_t reverb_get_density(reverb_context_t *context) 22641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 22741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: density: %d", __func__, context->reverb_settings.density); 22841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return context->reverb_settings.density; 22941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 23041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 23141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid reverb_set_density(reverb_context_t *context, int16_t density) 23241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 23341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: density: %d", __func__, density); 23441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->reverb_settings.density = density; 23541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_set_density(&(context->offload_reverb), density); 23641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (context->ctl) 23741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_send_params(context->ctl, &context->offload_reverb, 23841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_ENABLE_FLAG | 23941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_DENSITY); 24041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 24141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 24241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid reverb_set_preset(reverb_context_t *context, int16_t preset) 24341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 24441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George bool enable; 24541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: preset: %d", __func__, preset); 24641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->next_preset = preset; 24741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_set_preset(&(context->offload_reverb), preset); 24841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 24941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George enable = (preset == REVERB_PRESET_NONE) ? false: true; 25041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_set_enable_flag(&(context->offload_reverb), enable); 25141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 25241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (context->ctl) 25341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_send_params(context->ctl, &context->offload_reverb, 25441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_ENABLE_FLAG | 25541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_PRESET); 25641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 25741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 25841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid reverb_set_all_properties(reverb_context_t *context, 25941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_settings_t *reverb_settings) 26041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 26141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 26241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->reverb_settings.roomLevel = reverb_settings->roomLevel; 26341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->reverb_settings.roomHFLevel = reverb_settings->roomHFLevel; 26441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->reverb_settings.decayTime = reverb_settings->decayTime; 26541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->reverb_settings.decayHFRatio = reverb_settings->decayHFRatio; 26641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->reverb_settings.reverbLevel = reverb_settings->reverbLevel; 26741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->reverb_settings.diffusion = reverb_settings->diffusion; 26841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->reverb_settings.density = reverb_settings->density; 26941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (context->ctl) 27041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_send_params(context->ctl, &context->offload_reverb, 27141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_ENABLE_FLAG | 27241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_ROOM_LEVEL | 27341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_ROOM_HF_LEVEL | 27441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_DECAY_TIME | 27541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_DECAY_HF_RATIO | 27641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_LEVEL | 27741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_DIFFUSION | 27841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_DENSITY); 27941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 28041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 28141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid reverb_load_preset(reverb_context_t *context) 28241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 28341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->cur_preset = context->next_preset; 28441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 28541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (context->cur_preset != REVERB_PRESET_NONE) { 28641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George const reverb_settings_t *preset = &reverb_presets[context->cur_preset]; 28741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_set_room_level(context, preset->roomLevel); 28841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_set_room_hf_level(context, preset->roomHFLevel); 28941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_set_decay_time(context, preset->decayTime); 29041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_set_decay_hf_ratio(context, preset->decayHFRatio); 29141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_set_reverb_level(context, preset->reverbLevel); 29241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_set_diffusion(context, preset->diffusion); 29341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_set_density(context, preset->density); 29441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 29541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 29641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 29741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint reverb_get_parameter(effect_context_t *context, effect_param_t *p, 29841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George uint32_t *size) 29941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 30041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_context_t *reverb_ctxt = (reverb_context_t *)context; 30141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int voffset = ((p->psize - 1) / sizeof(int32_t) + 1) * sizeof(int32_t); 30241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int32_t *param_tmp = (int32_t *)p->data; 30341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int32_t param = *param_tmp++; 30441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George void *value = p->data + voffset; 30541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_settings_t *reverb_settings; 30641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int i; 30741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 30841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 30941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 31041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->status = 0; 31141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 31241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (reverb_ctxt->preset) { 31341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param != REVERB_PARAM_PRESET || p->vsize < sizeof(uint16_t)) 31441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return -EINVAL; 31541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *(uint16_t *)value = reverb_ctxt->next_preset; 31641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("get REVERB_PARAM_PRESET, preset %d", reverb_ctxt->next_preset); 31741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return 0; 31841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 31941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George switch (param) { 32041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_ROOM_LEVEL: 32141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (p->vsize < sizeof(uint16_t)) 32241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->status = -EINVAL; 32341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->vsize = sizeof(uint16_t); 32441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 32541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_ROOM_HF_LEVEL: 32641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (p->vsize < sizeof(uint16_t)) 32741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->status = -EINVAL; 32841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->vsize = sizeof(uint16_t); 32941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 33041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_DECAY_TIME: 33141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (p->vsize < sizeof(uint32_t)) 33241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->status = -EINVAL; 33341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->vsize = sizeof(uint32_t); 33441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 33541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_DECAY_HF_RATIO: 33641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (p->vsize < sizeof(uint16_t)) 33741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->status = -EINVAL; 33841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->vsize = sizeof(uint16_t); 33941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 34041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_REFLECTIONS_LEVEL: 34141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (p->vsize < sizeof(uint16_t)) 34241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->status = -EINVAL; 34341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->vsize = sizeof(uint16_t); 34441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 34541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_REFLECTIONS_DELAY: 34641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (p->vsize < sizeof(uint32_t)) 34741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->status = -EINVAL; 34841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->vsize = sizeof(uint32_t); 34941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 35041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_REVERB_LEVEL: 35141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (p->vsize < sizeof(uint16_t)) 35241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->status = -EINVAL; 35341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->vsize = sizeof(uint16_t); 35441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 35541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_REVERB_DELAY: 35641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (p->vsize < sizeof(uint32_t)) 35741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->status = -EINVAL; 35841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->vsize = sizeof(uint32_t); 35941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 36041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_DIFFUSION: 36141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (p->vsize < sizeof(uint16_t)) 36241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->status = -EINVAL; 36341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->vsize = sizeof(uint16_t); 36441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 36541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_DENSITY: 36641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (p->vsize < sizeof(uint16_t)) 36741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->status = -EINVAL; 36841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->vsize = sizeof(uint16_t); 36941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 37041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_PROPERTIES: 37141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (p->vsize < sizeof(reverb_settings_t)) 37241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->status = -EINVAL; 37341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->vsize = sizeof(reverb_settings_t); 37441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 37541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George default: 37641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->status = -EINVAL; 37741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 37841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 37941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *size = sizeof(effect_param_t) + voffset + p->vsize; 38041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 38141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (p->status != 0) 38241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return 0; 38341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 38441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George switch (param) { 38541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_PROPERTIES: 38641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_PROPERTIES", __func__); 38741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_settings = (reverb_settings_t *)value; 38841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_settings->roomLevel = reverb_get_room_level(reverb_ctxt); 38941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_settings->roomHFLevel = reverb_get_room_hf_level(reverb_ctxt); 39041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_settings->decayTime = reverb_get_decay_time(reverb_ctxt); 39141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_settings->decayHFRatio = reverb_get_decay_hf_ratio(reverb_ctxt); 39241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_settings->reflectionsLevel = 0; 39341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_settings->reflectionsDelay = 0; 39441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_settings->reverbDelay = 0; 39541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_settings->reverbLevel = reverb_get_reverb_level(reverb_ctxt); 39641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_settings->diffusion = reverb_get_diffusion(reverb_ctxt); 39741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_settings->density = reverb_get_density(reverb_ctxt); 39841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 39941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_ROOM_LEVEL: 40041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_ROOM_LEVEL", __func__); 40141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *(int16_t *)value = reverb_get_room_level(reverb_ctxt); 40241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 40341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_ROOM_HF_LEVEL: 40441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_ROOM_HF_LEVEL", __func__); 40541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *(int16_t *)value = reverb_get_room_hf_level(reverb_ctxt); 40641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 40741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_DECAY_TIME: 40841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_DECAY_TIME", __func__); 40941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *(uint32_t *)value = reverb_get_decay_time(reverb_ctxt); 41041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 41141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_DECAY_HF_RATIO: 41241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_DECAY_HF_RATIO", __func__); 41341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *(int16_t *)value = reverb_get_decay_hf_ratio(reverb_ctxt); 41441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 41541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_REVERB_LEVEL: 41641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_REVERB_LEVEL", __func__); 41741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *(int16_t *)value = reverb_get_reverb_level(reverb_ctxt); 41841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 41941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_DIFFUSION: 42041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_DIFFUSION", __func__); 42141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *(int16_t *)value = reverb_get_diffusion(reverb_ctxt); 42241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 42341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_DENSITY: 42441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_DENSITY", __func__); 42541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *(int16_t *)value = reverb_get_density(reverb_ctxt); 42641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 42741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_REFLECTIONS_LEVEL: 42841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_REFLECTIONS_LEVEL", __func__); 42941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *(uint16_t *)value = 0; 43041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 43141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_REFLECTIONS_DELAY: 43241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_REFLECTIONS_DELAY", __func__); 43341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *(uint32_t *)value = 0; 43441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 43541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_REVERB_DELAY: 43641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_REVERB_DELAY", __func__); 43741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *(uint32_t *)value = 0; 43841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 43941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George default: 44041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->status = -EINVAL; 44141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 44241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 44341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 44441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return 0; 44541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 44641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 44741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint reverb_set_parameter(effect_context_t *context, effect_param_t *p, 44897a1059da4d3aa8bfb0883d5f932f86b95876512Haynes Mathew George uint32_t size __unused) 44941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 45041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_context_t *reverb_ctxt = (reverb_context_t *)context; 45141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int voffset = ((p->psize - 1) / sizeof(int32_t) + 1) * sizeof(int32_t); 45241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George void *value = p->data + voffset; 45341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int32_t *param_tmp = (int32_t *)p->data; 45441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int32_t param = *param_tmp++; 45541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_settings_t *reverb_settings; 45641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int16_t level; 45741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int16_t ratio; 45841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George uint32_t time; 45941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 46041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 46141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 46241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->status = 0; 46341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 46441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (reverb_ctxt->preset) { 46541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param != REVERB_PARAM_PRESET) 46641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return -EINVAL; 46741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George uint16_t preset = *(uint16_t *)value; 46841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("set REVERB_PARAM_PRESET, preset %d", preset); 46941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (preset > REVERB_PRESET_LAST) { 47041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return -EINVAL; 47141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 47241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_set_preset(reverb_ctxt, preset); 47341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return 0; 47441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 47541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George switch (param) { 47641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_PROPERTIES: 47741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_PROPERTIES", __func__); 47841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_settings = (reverb_settings_t *)value; 47941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 48041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_ROOM_LEVEL: 48141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_ROOM_LEVEL", __func__); 48241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George level = *(int16_t *)value; 48341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_set_room_level(reverb_ctxt, level); 48441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 48541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_ROOM_HF_LEVEL: 48641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_ROOM_HF_LEVEL", __func__); 48741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George level = *(int16_t *)value; 48841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_set_room_hf_level(reverb_ctxt, level); 48941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 49041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_DECAY_TIME: 49141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_DECAY_TIME", __func__); 49241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George time = *(uint32_t *)value; 49341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_set_decay_time(reverb_ctxt, time); 49441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 49541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_DECAY_HF_RATIO: 49641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_DECAY_HF_RATIO", __func__); 49741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ratio = *(int16_t *)value; 49841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_set_decay_hf_ratio(reverb_ctxt, ratio); 49941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 50041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_REVERB_LEVEL: 50141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_REVERB_LEVEL", __func__); 50241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George level = *(int16_t *)value; 50341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_set_reverb_level(reverb_ctxt, level); 50441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 50541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_DIFFUSION: 50641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_DIFFUSION", __func__); 50741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ratio = *(int16_t *)value; 50841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_set_diffusion(reverb_ctxt, ratio); 50941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 51041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_DENSITY: 51141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: REVERB_PARAM_DENSITY", __func__); 51241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ratio = *(int16_t *)value; 51341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_set_density(reverb_ctxt, ratio); 51441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 51541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_REFLECTIONS_LEVEL: 51641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_REFLECTIONS_DELAY: 51741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George case REVERB_PARAM_REVERB_DELAY: 51841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 51941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George default: 52041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George p->status = -EINVAL; 52141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George break; 52241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 52341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 52441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return 0; 52541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 52641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 52741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint reverb_set_device(effect_context_t *context, uint32_t device) 52841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 52941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_context_t *reverb_ctxt = (reverb_context_t *)context; 53041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 53141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: device: %d", __func__, device); 53241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_ctxt->device = device; 53341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_set_device(&(reverb_ctxt->offload_reverb), device); 53441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return 0; 53541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 53641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 53741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint reverb_reset(effect_context_t *context) 53841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 53941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_context_t *reverb_ctxt = (reverb_context_t *)context; 54041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 54141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return 0; 54241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 54341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 54441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint reverb_init(effect_context_t *context) 54541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 54641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_context_t *reverb_ctxt = (reverb_context_t *)context; 54741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 54841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->config.inputCfg.accessMode = EFFECT_BUFFER_ACCESS_READ; 54941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George /* 55041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George FIXME: channel mode is mono for auxiliary. is it needed for offload ? 55141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George If so, this set config needs to be updated accordingly 55241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George */ 55341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->config.inputCfg.channels = AUDIO_CHANNEL_OUT_STEREO; 55441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->config.inputCfg.format = AUDIO_FORMAT_PCM_16_BIT; 55541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->config.inputCfg.samplingRate = 44100; 55641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->config.inputCfg.bufferProvider.getBuffer = NULL; 55741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->config.inputCfg.bufferProvider.releaseBuffer = NULL; 55841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->config.inputCfg.bufferProvider.cookie = NULL; 55941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->config.inputCfg.mask = EFFECT_CONFIG_ALL; 56041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->config.outputCfg.accessMode = EFFECT_BUFFER_ACCESS_ACCUMULATE; 56141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->config.outputCfg.channels = AUDIO_CHANNEL_OUT_STEREO; 56241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->config.outputCfg.format = AUDIO_FORMAT_PCM_16_BIT; 56341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->config.outputCfg.samplingRate = 44100; 56441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->config.outputCfg.bufferProvider.getBuffer = NULL; 56541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->config.outputCfg.bufferProvider.releaseBuffer = NULL; 56641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->config.outputCfg.bufferProvider.cookie = NULL; 56741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George context->config.outputCfg.mask = EFFECT_CONFIG_ALL; 56841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 56941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George set_config(context, &context->config); 57041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 57141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George memset(&(reverb_ctxt->reverb_settings), 0, sizeof(reverb_settings_t)); 57241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George memset(&(reverb_ctxt->offload_reverb), 0, sizeof(struct reverb_params)); 57341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 57441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (reverb_ctxt->preset && 57541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_ctxt->next_preset != reverb_ctxt->cur_preset) 57641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_load_preset(reverb_ctxt); 57741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 57841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return 0; 57941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 58041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 58141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint reverb_enable(effect_context_t *context) 58241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 58341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_context_t *reverb_ctxt = (reverb_context_t *)context; 58441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 58541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 58641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 58741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (!offload_reverb_get_enable_flag(&(reverb_ctxt->offload_reverb))) 58841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_set_enable_flag(&(reverb_ctxt->offload_reverb), true); 58941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return 0; 59041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 59141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 59241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint reverb_disable(effect_context_t *context) 59341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 59441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_context_t *reverb_ctxt = (reverb_context_t *)context; 59541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 59641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 59741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (offload_reverb_get_enable_flag(&(reverb_ctxt->offload_reverb))) { 59841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_set_enable_flag(&(reverb_ctxt->offload_reverb), false); 59941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (reverb_ctxt->ctl) 60041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_send_params(reverb_ctxt->ctl, 60141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George &reverb_ctxt->offload_reverb, 60241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_ENABLE_FLAG); 60341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 60441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return 0; 60541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 60641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 60741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint reverb_start(effect_context_t *context, output_context_t *output) 60841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 60941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_context_t *reverb_ctxt = (reverb_context_t *)context; 61041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 61141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 61241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_ctxt->ctl = output->ctl; 61341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (offload_reverb_get_enable_flag(&(reverb_ctxt->offload_reverb))) { 61441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (reverb_ctxt->ctl && reverb_ctxt->preset) { 61541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George offload_reverb_send_params(reverb_ctxt->ctl, &reverb_ctxt->offload_reverb, 61641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_ENABLE_FLAG | 61741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_SEND_REVERB_PRESET); 61841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 61941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 62041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 62141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return 0; 62241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 62341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 62497a1059da4d3aa8bfb0883d5f932f86b95876512Haynes Mathew Georgeint reverb_stop(effect_context_t *context, output_context_t *output __unused) 62541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 62641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_context_t *reverb_ctxt = (reverb_context_t *)context; 62741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 62841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 62941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb_ctxt->ctl = NULL; 63041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return 0; 63141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 63241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 633