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_api" 1841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George//#define LOG_NDEBUG 0 1941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 20122574f94d145974ab3468a2c33f3a02b982912fElliott Hughes#include <errno.h> 2141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#include <stdbool.h> 2241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#include <cutils/log.h> 2341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#include <tinyalsa/asoundlib.h> 2441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#include <sound/audio_effects.h> 2541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 2641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#include "effect_api.h" 2741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 2841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) 2941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 3041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#define OFFLOAD_PRESET_START_OFFSET_FOR_OPENSL 19 3141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeconst int map_eq_opensl_preset_2_offload_preset[] = { 3241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_PRESET_START_OFFSET_FOR_OPENSL, /* Normal Preset */ 3341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_PRESET_START_OFFSET_FOR_OPENSL+1, /* Classical Preset */ 3441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_PRESET_START_OFFSET_FOR_OPENSL+2, /* Dance Preset */ 3541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_PRESET_START_OFFSET_FOR_OPENSL+3, /* Flat Preset */ 3641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_PRESET_START_OFFSET_FOR_OPENSL+4, /* Folk Preset */ 3741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_PRESET_START_OFFSET_FOR_OPENSL+5, /* Heavy Metal Preset */ 3841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_PRESET_START_OFFSET_FOR_OPENSL+6, /* Hip Hop Preset */ 3941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_PRESET_START_OFFSET_FOR_OPENSL+7, /* Jazz Preset */ 4041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_PRESET_START_OFFSET_FOR_OPENSL+8, /* Pop Preset */ 4141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_PRESET_START_OFFSET_FOR_OPENSL+9, /* Rock Preset */ 4241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George OFFLOAD_PRESET_START_OFFSET_FOR_OPENSL+10 /* FX Booster */ 4341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George}; 4441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 4541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeconst int map_reverb_opensl_preset_2_offload_preset 4641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George [NUM_OSL_REVERB_PRESETS_SUPPORTED][2] = { 4741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {1, 15}, 4841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {2, 16}, 4941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {3, 17}, 5041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {4, 18}, 5141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {5, 3}, 5241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George {6, 20} 5341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George}; 5441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 5541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint offload_update_mixer_and_effects_ctl(int card, int device_id, 5641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George struct mixer *mixer, 5741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George struct mixer_ctl *ctl) 5841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 5941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George char mixer_string[128]; 6041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 6141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George snprintf(mixer_string, sizeof(mixer_string), 6241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George "%s %d", "Audio Effects Config", device_id); 6341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s: mixer_string: %s", __func__, mixer_string); 6441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George mixer = mixer_open(card); 6541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (!mixer) { 6641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGE("Failed to open mixer"); 6741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ctl = NULL; 6841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return -EINVAL; 6941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } else { 7041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ctl = mixer_get_ctl_by_name(mixer, mixer_string); 7141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (!ctl) { 7241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGE("mixer_get_ctl_by_name failed"); 7341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George mixer_close(mixer); 7441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George mixer = NULL; 7541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return -EINVAL; 7641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 7741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 7841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("mixer: %p, ctl: %p", mixer, ctl); 7941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return 0; 8041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 8141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 8241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_close_mixer(struct mixer *mixer) 8341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 8441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George mixer_close(mixer); 8541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 8641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 8741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_bassboost_set_device(struct bass_boost_params *bassboost, 8841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George uint32_t device) 8941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 9041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 9141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George bassboost->device = device; 9241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 9341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 9441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_bassboost_set_enable_flag(struct bass_boost_params *bassboost, 9541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George bool enable) 9641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 9741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 9841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George bassboost->enable_flag = enable; 9941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 10041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 10141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint offload_bassboost_get_enable_flag(struct bass_boost_params *bassboost) 10241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 10341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 10441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return bassboost->enable_flag; 10541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 10641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 10741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_bassboost_set_strength(struct bass_boost_params *bassboost, 10841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int strength) 10941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 11041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 11141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George bassboost->strength = strength; 11241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 11341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 11441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_bassboost_set_mode(struct bass_boost_params *bassboost, 11541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int mode) 11641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 11741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 11841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George bassboost->mode = mode; 11941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 12041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 12141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint offload_bassboost_send_params(struct mixer_ctl *ctl, 12241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George struct bass_boost_params *bassboost, 12341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George unsigned param_send_flags) 12441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 12541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int param_values[128] = {0}; 12641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int *p_param_values = param_values; 12741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 12841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 12941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = BASS_BOOST_MODULE; 13041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = bassboost->device; 13141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* num of commands*/ 13241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_BASSBOOST_ENABLE_FLAG) { 13341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = BASS_BOOST_ENABLE; 13441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 13541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 13641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = BASS_BOOST_ENABLE_PARAM_LEN; 13741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = bassboost->enable_flag; 13841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 13941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 14041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_BASSBOOST_STRENGTH) { 14141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = BASS_BOOST_STRENGTH; 14241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 14341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 14441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = BASS_BOOST_STRENGTH_PARAM_LEN; 14541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = bassboost->strength; 14641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 14741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 14841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_BASSBOOST_MODE) { 14941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = BASS_BOOST_MODE; 15041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 15141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 15241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = BASS_BOOST_MODE_PARAM_LEN; 15341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = bassboost->mode; 15441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 15541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 15641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 15741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_values[2] && ctl) 15841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George mixer_ctl_set_array(ctl, param_values, ARRAY_SIZE(param_values)); 15941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 16041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return 0; 16141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 16241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 16341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_virtualizer_set_device(struct virtualizer_params *virtualizer, 16441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George uint32_t device) 16541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 16641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 16741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George virtualizer->device = device; 16841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 16941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 17041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_virtualizer_set_enable_flag(struct virtualizer_params *virtualizer, 17141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George bool enable) 17241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 17341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 17441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George virtualizer->enable_flag = enable; 17541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 17641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 17741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint offload_virtualizer_get_enable_flag(struct virtualizer_params *virtualizer) 17841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 17941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 18041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return virtualizer->enable_flag; 18141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 18241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 18341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_virtualizer_set_strength(struct virtualizer_params *virtualizer, 18441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int strength) 18541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 18641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 18741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George virtualizer->strength = strength; 18841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 18941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 19041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_virtualizer_set_out_type(struct virtualizer_params *virtualizer, 19141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int out_type) 19241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 19341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 19441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George virtualizer->out_type = out_type; 19541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 19641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 19741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_virtualizer_set_gain_adjust(struct virtualizer_params *virtualizer, 19841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int gain_adjust) 19941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 20041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 20141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George virtualizer->gain_adjust = gain_adjust; 20241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 20341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 20441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint offload_virtualizer_send_params(struct mixer_ctl *ctl, 20541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George struct virtualizer_params *virtualizer, 20641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George unsigned param_send_flags) 20741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 20841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int param_values[128] = {0}; 20941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int *p_param_values = param_values; 21041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 21141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 21241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = VIRTUALIZER_MODULE; 21341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = virtualizer->device; 21441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* num of commands*/ 21541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_VIRTUALIZER_ENABLE_FLAG) { 21641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = VIRTUALIZER_ENABLE; 21741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 21841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 21941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = VIRTUALIZER_ENABLE_PARAM_LEN; 22041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = virtualizer->enable_flag; 22141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 22241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 22341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_VIRTUALIZER_STRENGTH) { 22441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = VIRTUALIZER_STRENGTH; 22541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 22641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 22741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = VIRTUALIZER_STRENGTH_PARAM_LEN; 22841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = virtualizer->strength; 22941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 23041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 23141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_VIRTUALIZER_OUT_TYPE) { 23241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = VIRTUALIZER_OUT_TYPE; 23341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 23441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 23541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = VIRTUALIZER_OUT_TYPE_PARAM_LEN; 23641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = virtualizer->out_type; 23741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 23841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 23941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_VIRTUALIZER_GAIN_ADJUST) { 24041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = VIRTUALIZER_GAIN_ADJUST; 24141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 24241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 24341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = VIRTUALIZER_GAIN_ADJUST_PARAM_LEN; 24441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = virtualizer->gain_adjust; 24541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 24641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 24741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 24841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_values[2] && ctl) 24941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George mixer_ctl_set_array(ctl, param_values, ARRAY_SIZE(param_values)); 25041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 25141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return 0; 25241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 25341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 25441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_eq_set_device(struct eq_params *eq, uint32_t device) 25541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 25641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 25741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George eq->device = device; 25841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 25941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 26041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_eq_set_enable_flag(struct eq_params *eq, bool enable) 26141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 26241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 26341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George eq->enable_flag = enable; 26441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 26541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 26641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint offload_eq_get_enable_flag(struct eq_params *eq) 26741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 26841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 26941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return eq->enable_flag; 27041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 27141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 27241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_eq_set_preset(struct eq_params *eq, int preset) 27341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 27441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 27541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George eq->config.preset_id = preset; 27641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George eq->config.eq_pregain = Q27_UNITY; 27741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 27841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 27941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_eq_set_bands_level(struct eq_params *eq, int num_bands, 28041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George const uint16_t *band_freq_list, 28141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int *band_gain_list) 28241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 28341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int i; 28441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 28541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George eq->config.num_bands = num_bands; 28641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George for (i=0; i<num_bands; i++) { 28741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George eq->per_band_cfg[i].band_idx = i; 28841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George eq->per_band_cfg[i].filter_type = EQ_BAND_BOOST; 28941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George eq->per_band_cfg[i].freq_millihertz = band_freq_list[i] * 1000; 29041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George eq->per_band_cfg[i].gain_millibels = band_gain_list[i] * 100; 29141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George eq->per_band_cfg[i].quality_factor = Q8_UNITY; 29241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 29341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 29441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 29541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint offload_eq_send_params(struct mixer_ctl *ctl, struct eq_params *eq, 29641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George unsigned param_send_flags) 29741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 29841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int param_values[128] = {0}; 29941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int *p_param_values = param_values; 30041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George uint32_t i; 30141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 30241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 30341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (eq->config.preset_id < -1 ) { 30441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("No Valid preset to set"); 30541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return 0; 30641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 30741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = EQ_MODULE; 30841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = eq->device; 30941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* num of commands*/ 31041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_EQ_ENABLE_FLAG) { 31141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = EQ_ENABLE; 31241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 31341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 31441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = EQ_ENABLE_PARAM_LEN; 31541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = eq->enable_flag; 31641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 31741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 31841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_EQ_PRESET) { 31941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = EQ_CONFIG; 32041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 32141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 32241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = EQ_CONFIG_PARAM_LEN; 32341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = eq->config.eq_pregain; 32441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 32541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George map_eq_opensl_preset_2_offload_preset[eq->config.preset_id]; 32641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; 32741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 32841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 32941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_EQ_BANDS_LEVEL) { 33041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = EQ_CONFIG; 33141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 33241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 33341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = EQ_CONFIG_PARAM_LEN + 33441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George eq->config.num_bands * EQ_CONFIG_PER_BAND_PARAM_LEN; 33541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = eq->config.eq_pregain; 33641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CUSTOM_OPENSL_PRESET; 33741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = eq->config.num_bands; 33841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George for (i=0; i<eq->config.num_bands; i++) { 33941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = eq->per_band_cfg[i].band_idx; 34041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = eq->per_band_cfg[i].filter_type; 34141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = eq->per_band_cfg[i].freq_millihertz; 34241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = eq->per_band_cfg[i].gain_millibels; 34341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = eq->per_band_cfg[i].quality_factor; 34441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 34541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 34641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 34741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 34841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_values[2] && ctl) 34941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George mixer_ctl_set_array(ctl, param_values, ARRAY_SIZE(param_values)); 35041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 35141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return 0; 35241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 35341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 35441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_reverb_set_device(struct reverb_params *reverb, uint32_t device) 35541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 35641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 35741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb->device = device; 35841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 35941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 36041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_reverb_set_enable_flag(struct reverb_params *reverb, bool enable) 36141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 36241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 36341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb->enable_flag = enable; 36441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 36541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 36641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint offload_reverb_get_enable_flag(struct reverb_params *reverb) 36741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 36841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 36941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return reverb->enable_flag; 37041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 37141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 37241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_reverb_set_mode(struct reverb_params *reverb, int mode) 37341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 37441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 37541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb->mode = mode; 37641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 37741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 37841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_reverb_set_preset(struct reverb_params *reverb, int preset) 37941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 38041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 38141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (preset && (preset <= NUM_OSL_REVERB_PRESETS_SUPPORTED)) 38241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb->preset = map_reverb_opensl_preset_2_offload_preset[preset-1][1]; 38341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 38441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 38541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_reverb_set_wet_mix(struct reverb_params *reverb, int wet_mix) 38641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 38741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 38841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb->wet_mix = wet_mix; 38941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 39041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 39141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_reverb_set_gain_adjust(struct reverb_params *reverb, 39241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int gain_adjust) 39341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 39441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 39541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb->gain_adjust = gain_adjust; 39641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 39741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 39841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_reverb_set_room_level(struct reverb_params *reverb, int room_level) 39941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 40041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 40141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb->room_level = room_level; 40241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 40341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 40441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_reverb_set_room_hf_level(struct reverb_params *reverb, 40541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int room_hf_level) 40641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 40741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 40841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb->room_hf_level = room_hf_level; 40941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 41041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 41141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_reverb_set_decay_time(struct reverb_params *reverb, int decay_time) 41241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 41341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 41441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb->decay_time = decay_time; 41541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 41641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 41741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_reverb_set_decay_hf_ratio(struct reverb_params *reverb, 41841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int decay_hf_ratio) 41941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 42041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 42141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb->decay_hf_ratio = decay_hf_ratio; 42241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 42341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 42441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_reverb_set_reflections_level(struct reverb_params *reverb, 42541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int reflections_level) 42641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 42741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 42841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb->reflections_level = reflections_level; 42941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 43041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 43141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_reverb_set_reflections_delay(struct reverb_params *reverb, 43241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int reflections_delay) 43341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 43441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 43541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb->reflections_delay = reflections_delay; 43641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 43741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 43841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_reverb_set_reverb_level(struct reverb_params *reverb, 43941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int reverb_level) 44041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 44141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 44241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb->level = reverb_level; 44341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 44441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 44541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_reverb_set_delay(struct reverb_params *reverb, int delay) 44641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 44741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 44841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb->delay = delay; 44941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 45041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 45141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_reverb_set_diffusion(struct reverb_params *reverb, int diffusion) 45241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 45341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 45441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb->diffusion = diffusion; 45541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 45641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 45741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgevoid offload_reverb_set_density(struct reverb_params *reverb, int density) 45841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 45941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 46041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George reverb->density = density; 46141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 46241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 46341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew Georgeint offload_reverb_send_params(struct mixer_ctl *ctl, 46441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George struct reverb_params *reverb, 46541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George unsigned param_send_flags) 46641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George{ 46741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int param_values[128] = {0}; 46841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int *p_param_values = param_values; 46941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 47041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George ALOGV("%s", __func__); 47141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_MODULE; 47241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = reverb->device; 47341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* num of commands*/ 47441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 47541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_REVERB_ENABLE_FLAG) { 47641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_ENABLE; 47741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 47841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 47941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_ENABLE_PARAM_LEN; 48041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = reverb->enable_flag; 48141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 48241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 48341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_REVERB_MODE) { 48441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_MODE; 48541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 48641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 48741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_MODE_PARAM_LEN; 48841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = reverb->mode; 48941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 49041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 49141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_REVERB_PRESET) { 49241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_PRESET; 49341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 49441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 49541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_PRESET_PARAM_LEN; 49641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = reverb->preset; 49741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 49841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 49941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_REVERB_WET_MIX) { 50041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_WET_MIX; 50141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 50241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 50341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_WET_MIX_PARAM_LEN; 50441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = reverb->wet_mix; 50541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 50641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 50741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_REVERB_GAIN_ADJUST) { 50841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_GAIN_ADJUST; 50941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 51041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 51141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_GAIN_ADJUST_PARAM_LEN; 51241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = reverb->gain_adjust; 51341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 51441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 51541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_REVERB_ROOM_LEVEL) { 51641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_ROOM_LEVEL; 51741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 51841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 51941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_ROOM_LEVEL_PARAM_LEN; 52041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = reverb->room_level; 52141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 52241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 52341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_REVERB_ROOM_HF_LEVEL) { 52441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_ROOM_HF_LEVEL; 52541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 52641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 52741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_ROOM_HF_LEVEL_PARAM_LEN; 52841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = reverb->room_hf_level; 52941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 53041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 53141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_REVERB_DECAY_TIME) { 53241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_DECAY_TIME; 53341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 53441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 53541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_DECAY_TIME_PARAM_LEN; 53641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = reverb->decay_time; 53741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 53841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 53941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_REVERB_DECAY_HF_RATIO) { 54041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_DECAY_HF_RATIO; 54141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 54241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 54341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_DECAY_HF_RATIO_PARAM_LEN; 54441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = reverb->decay_hf_ratio; 54541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 54641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 54741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_REVERB_REFLECTIONS_LEVEL) { 54841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_REFLECTIONS_LEVEL; 54941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 55041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 55141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_REFLECTIONS_LEVEL_PARAM_LEN; 55241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = reverb->reflections_level; 55341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 55441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 55541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_REVERB_REFLECTIONS_DELAY) { 55641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_REFLECTIONS_DELAY; 55741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 55841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 55941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_REFLECTIONS_DELAY_PARAM_LEN; 56041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = reverb->reflections_delay; 56141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 56241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 56341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_REVERB_LEVEL) { 56441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_LEVEL; 56541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 56641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 56741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_LEVEL_PARAM_LEN; 56841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = reverb->level; 56941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 57041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 57141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_REVERB_DELAY) { 57241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_DELAY; 57341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 57441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 57541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_DELAY_PARAM_LEN; 57641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = reverb->delay; 57741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 57841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 57941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_REVERB_DIFFUSION) { 58041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_DIFFUSION; 58141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 58241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 58341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_DIFFUSION_PARAM_LEN; 58441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = reverb->diffusion; 58541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 58641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 58741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_send_flags & OFFLOAD_SEND_REVERB_DENSITY) { 58841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_DENSITY; 58941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = CONFIG_SET; 59041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = 0; /* start offset if param size if greater than 128 */ 59141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = REVERB_DENSITY_PARAM_LEN; 59241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George *p_param_values++ = reverb->density; 59341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George param_values[2] += 1; 59441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George } 59541f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 59641f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George if (param_values[2] && ctl) 59741f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George mixer_ctl_set_array(ctl, param_values, ARRAY_SIZE(param_values)); 59841f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George 59941f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George return 0; 60041f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George} 601