EffectBundle.cpp revision 2c8e5cab3faa6d360e222b7a6c40a80083d021ac
12c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 22c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copyright (C) 2010-2010 NXP Software 32c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copyright (C) 2009 The Android Open Source Project 42c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * 52c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 62c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * you may not use this file except in compliance with the License. 72c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * You may obtain a copy of the License at 82c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * 92c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * http://www.apache.org/licenses/LICENSE-2.0 102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * 112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Unless required by applicable law or agreed to in writing, software 122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * See the License for the specific language governing permissions and 152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * limitations under the License. 162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LOG_TAG "Bundle" 192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) 202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_BUNDLE // Include all the bundle code 212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LOG_NDEBUG 0 222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include <cutils/log.h> 242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include <assert.h> 252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include <stdlib.h> 262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include <string.h> 272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include <new> 282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include <EffectBundle.h> 292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#ifdef LVM_BUNDLE 312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_MAX_SESSIONS 32 322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define MAX_NUM_BANDS 5 332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define MAX_CALL_SIZE 256 342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif /* end LVM_BUNDLE */ 352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint framecountag = 0; 382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// effect_interface_t interface implementation for bass boost 392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentextern "C" const struct effect_interface_s gLvmEffectInterface; 402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define LVM_ERROR_CHECK(LvmStatus, callingFunc, calledFunc){\ 422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (LvmStatus == LVM_NULLADDRESS){\ 432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Parameter error - "\ 442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "null pointer returned by %s in %s\n\n\n\n", callingFunc, calledFunc);\ 452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent }\ 462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (LvmStatus == LVM_ALIGNMENTERROR){\ 472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Parameter error - "\ 482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "bad alignment returned by %s in %s\n\n\n\n", callingFunc, calledFunc);\ 492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent }\ 502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (LvmStatus == LVM_INVALIDNUMSAMPLES){\ 512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Parameter error - "\ 522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "bad number of samples returned by %s in %s\n\n\n\n", callingFunc, calledFunc);\ 532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent }\ 542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (LvmStatus == LVM_OUTOFRANGE){\ 552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Parameter error - "\ 562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "out of range returned by %s in %s\n", callingFunc, calledFunc);\ 572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent }\ 582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Namespaces 652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentnamespace android { 662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentnamespace { 672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* local functions */ 692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define CHECK_ARG(cond) { \ 702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (!(cond)) { \ 712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Invalid argument: "#cond); \ 722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; \ 732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } \ 742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint LvmInitFlag = LVM_FALSE; 772c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentSessionContext GlobalSessionMemory[32]; 782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// NXP SW BassBoost UUID 802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentconst effect_descriptor_t gBassBoostDescriptor = { 812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent {0x0634f220, 0xddd4, 0x11db, 0xa0fc, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b }}, 822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent {0x8631f300, 0x72e2, 0x11df, 0xb57e, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}, // uuid 832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EFFECT_API_VERSION, 842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_INSERT_LAST), 852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 0, // TODO 862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1, 872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "Dynamic Bass Boost", 882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "NXP Software Ltd.", 892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}; 902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// NXP SW Virtualizer UUID 922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentconst effect_descriptor_t gVirtualizerDescriptor = { 932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent {0x37cc2c00, 0xdddd, 0x11db, 0x8577, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}, // Virtualizer ID 942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent {0x1d4033c0, 0x8557, 0x11df, 0x9f2d, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}, // NXP SW UUID gen july 01 2010 952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EFFECT_API_VERSION, 962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_INSERT_LAST), 972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 0, // TODO 982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1, 992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "Virtualizer", 1002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "NXP Software Ltd.", 1012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}; 1022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// NXP SW Equalizer UUID 1042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentconst effect_descriptor_t gEqualizerDescriptor = { 1052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent {0x0bed4300, 0xddd6, 0x11db, 0x8f34, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}, // type 1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent {0xce772f20, 0x847d, 0x11df, 0xbb17, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}, // uuid Eq NXP 1072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EFFECT_API_VERSION, 1082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_INSERT_LAST), 1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 0, // TODO 1102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1, 1112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "Equalizer", 1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "NXP Software Ltd.", 1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}; 1142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// NXP SW Volume UUID 1162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentconst effect_descriptor_t gVolumeDescriptor = { 1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent {0x09e8ede0, 0xddde, 0x11db, 0xb4f6, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b }}, 1182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent //{0x8631f300, 0x72e2, 0x11df, 0xb57e, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b }}, // uuid 1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent {0x119341a0, 0x8469, 0x11df, 0x81f9, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b }}, //uuid VOL NXP 1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EFFECT_API_VERSION, 1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_INSERT_LAST), 1222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 0, // TODO 1232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1, 1242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "Volume", 1252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "NXP Software Ltd.", 1262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}; 1272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//--- local function prototypes 1292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LvmGlobalBundle_init (void); 1302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint LvmBundle_init (EffectContext *pContext); 1312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint LvmEffect_enable (EffectContext *pContext); 1322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint LvmEffect_disable (EffectContext *pContext); 1332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LvmEffect_free (EffectContext *pContext); 1342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint Effect_configure (EffectContext *pContext, effect_config_t *pConfig); 1352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint BassBoost_setParameter (EffectContext *pContext, int32_t *pParam, void *pValue); 1362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint BassBoost_getParameter (EffectContext *pContext, 1372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t *pParam, 1382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent size_t *pValueSize, 1392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent void *pValue); 1402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint Virtualizer_setParameter (EffectContext *pContext, int32_t *pParam, void *pValue); 1412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint Virtualizer_getParameter (EffectContext *pContext, 1422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t *pParam, 1432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent size_t *pValueSize, 1442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent void *pValue); 1452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint Equalizer_setParameter (EffectContext *pContext, int32_t *pParam, void *pValue); 1462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint Equalizer_getParameter (EffectContext *pContext, 1472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t *pParam, 1482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent size_t *pValueSize, 1492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent void *pValue); 1502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint Volume_setParameter (EffectContext *pContext, int32_t *pParam, void *pValue); 1512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint Volume_getParameter (EffectContext *pContext, 1522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t *pParam, 1532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent size_t *pValueSize, 1542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent void *pValue); 1552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Effect Library Interface Implementation */ 1722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentextern "C" int EffectQueryNumberEffects(uint32_t *pNumEffects){ 1732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\n\tEffectQueryNumberEffects start"); 1742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pNumEffects = 4; 1752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectQueryNumberEffects creating %d effects", *pNumEffects); 1762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectQueryNumberEffects end\n"); 1772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 0; 1782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end EffectQueryNumberEffects */ 1792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentextern "C" int EffectQueryEffect(uint32_t index, effect_descriptor_t *pDescriptor){ 1822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\n\tEffectQueryEffect start"); 1832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectQueryEffect processing index %d", index); 1842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pDescriptor == NULL){ 1862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : EffectQueryEffect was passed NULL pointer"); 1872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 1882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (index > 3){ 1902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : EffectQueryEffect index out of range %d", index); 1912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -ENOENT; 1922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(index == LVM_BASS_BOOST){ 1942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectQueryEffect processing LVM_BASS_BOOST"); 1952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent memcpy(pDescriptor, &gBassBoostDescriptor, sizeof(effect_descriptor_t)); 1962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent }else if(index == LVM_VIRTUALIZER){ 1972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectQueryEffect processing LVM_VIRTUALIZER"); 1982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent memcpy(pDescriptor, &gVirtualizerDescriptor, sizeof(effect_descriptor_t)); 1992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } else if(index == LVM_EQUALIZER){ 2002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectQueryEffect processing LVM_EQUALIZER"); 2012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent memcpy(pDescriptor, &gEqualizerDescriptor, sizeof(effect_descriptor_t)); 2022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } else if(index == LVM_VOLUME){ 2032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectQueryEffect processing LVM_VOLUME"); 2042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent memcpy(pDescriptor, &gVolumeDescriptor, sizeof(effect_descriptor_t)); 2052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectQueryEffect end\n"); 2072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 0; 2082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end EffectQueryEffect */ 2092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentextern "C" int EffectCreate(effect_uuid_t *uuid, 2122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t sessionId, 2132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t ioId, 2142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent effect_interface_t *pInterface){ 2152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int ret; 2162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int i; 2172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EffectContext *pContext = new EffectContext; 2182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\n\tEffectCreate start session %d", sessionId); 2202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pInterface == NULL || uuid == NULL){ 2222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : EffectCreate() called with NULL pointer"); 2232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 2242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((sessionId < 0)||(sessionId >= LVM_MAX_SESSIONS)){ 2272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : EffectCreate sessionId is less than 0"); 2282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 2292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LvmInitFlag == LVM_FALSE){ 2322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmInitFlag = LVM_TRUE; 2332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectCreate - Initializing all global memory"); 2342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmGlobalBundle_init(); 2352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // If this is the first create in this session 2382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(GlobalSessionMemory[sessionId].bBundledEffectsEnabled == LVM_FALSE){ 2392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectCreate - This is the first effect in current session %d", sessionId); 2402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectCreate - Setting up Bundled Effects Instance for session %d", sessionId); 2412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent GlobalSessionMemory[sessionId].bBundledEffectsEnabled = LVM_TRUE; 2422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent GlobalSessionMemory[sessionId].pBundledContext = new BundledEffectContext; 2432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext = GlobalSessionMemory[sessionId].pBundledContext; 2452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->SessionNo = sessionId; 2462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->hInstance = NULL; 2472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->bVolumeEnabled = LVM_FALSE; 2482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->bEqualizerEnabled = LVM_FALSE; 2492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->bBassEnabled = LVM_FALSE; 2502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->bVirtualizerEnabled = LVM_FALSE; 2512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->NumberEffectsEnabled = 0; 2522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->NumberEffectsCalled = 0; 2532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Saved strength is used to return the exact strength that was used in the set to the get 2552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * because we map the original strength range of 0:1000 to 1:15, and this will avoid 2562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * quantisation like effect when returning 2572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->BassStrengthSaved = 0; 2592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->VirtStrengthSaved = 0; 2602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->CurPreset = PRESET_CUSTOM; 2612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->levelSaved = 0; 2622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->bMuteEnabled = LVM_FALSE; 2632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectCreate - Calling LvmBundle_init"); 2652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ret = LvmBundle_init(pContext); 2662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (ret < 0){ 2682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : EffectCreate() Bundle init failed"); 2692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent delete pContext->pBundledContext; 2702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent delete pContext; 2712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return ret; 2722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else{ 2752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext = GlobalSessionMemory[sessionId].pBundledContext; 2762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectCreate - pBundledContext is %p", pContext->pBundledContext); 2792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Create each Effect 2812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (memcmp(uuid, &gBassBoostDescriptor.uuid, sizeof(effect_uuid_t)) == 0){ 2822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Create Bass Boost 2832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectCreate - Effect to be created is LVM_BASS_BOOST"); 2842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent GlobalSessionMemory[sessionId].bBassInstantiated = LVM_TRUE; 2852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->itfe = &gLvmEffectInterface; 2872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->EffectType = LVM_BASS_BOOST; 2882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } else if (memcmp(uuid, &gVirtualizerDescriptor.uuid, sizeof(effect_uuid_t)) == 0){ 2892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Create Virtualizer 2902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectCreate - Effect to be created is LVM_VIRTUALIZER"); 2912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent GlobalSessionMemory[sessionId].bVirtualizerInstantiated = LVM_TRUE; 2922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->itfe = &gLvmEffectInterface; 2942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->EffectType = LVM_VIRTUALIZER; 2952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } else if (memcmp(uuid, &gEqualizerDescriptor.uuid, sizeof(effect_uuid_t)) == 0){ 2962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Create Equalizer 2972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectCreate - Effect to be created is LVM_EQUALIZER"); 2982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent GlobalSessionMemory[sessionId].bEqualizerInstantiated = LVM_TRUE; 2992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->itfe = &gLvmEffectInterface; 3012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->EffectType = LVM_EQUALIZER; 3022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } else if (memcmp(uuid, &gVolumeDescriptor.uuid, sizeof(effect_uuid_t)) == 0){ 3032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Create Volume 3042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectCreate - Effect to be created is LVM_VOLUME"); 3052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent GlobalSessionMemory[sessionId].bVolumeInstantiated = LVM_TRUE; 3062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->itfe = &gLvmEffectInterface; 3082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->EffectType = LVM_VOLUME; 3092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else{ 3112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : EffectCreate() invalid UUID"); 3122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 3132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pInterface = (effect_interface_t)pContext; 3162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectCreate end..\n\n"); 3172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 0; 3182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end EffectCreate */ 3192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentextern "C" int EffectRelease(effect_interface_t interface){ 3232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\n\tEffectRelease start %p", interface); 3242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EffectContext * pContext = (EffectContext *)interface; 3252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pContext == NULL){ 3272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : EffectRelease called with NULL pointer"); 3282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 3292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Clear the instantiated flag for the effect 3322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_BASS_BOOST) { 3332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectRelease LVM_BASS_BOOST Clearing global intstantiated flag"); 3342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent GlobalSessionMemory[pContext->pBundledContext->SessionNo].bBassInstantiated = LVM_FALSE; 3352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } else if(pContext->EffectType == LVM_VIRTUALIZER) { 3362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectRelease LVM_VIRTUALIZER Clearing global intstantiated flag"); 3372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent GlobalSessionMemory[pContext->pBundledContext->SessionNo].bVirtualizerInstantiated = LVM_FALSE; 3382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } else if(pContext->EffectType == LVM_EQUALIZER) { 3392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectRelease LVM_EQUALIZER Clearing global intstantiated flag"); 3402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent GlobalSessionMemory[pContext->pBundledContext->SessionNo].bEqualizerInstantiated = LVM_FALSE; 3412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } else if(pContext->EffectType == LVM_VOLUME) { 3422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectRelease LVM_VOLUME Clearing global intstantiated flag"); 3432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent GlobalSessionMemory[pContext->pBundledContext->SessionNo].bVolumeInstantiated = LVM_FALSE; 3442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } else { 3452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : EffectRelease : Unsupported effect\n\n\n\n\n\n\n"); 3462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // if all effects are no longer instantiaed free the lvm memory and delete BundledEffectContext 3492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((GlobalSessionMemory[pContext->pBundledContext->SessionNo].bBassInstantiated == LVM_FALSE)&& 3502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (GlobalSessionMemory[pContext->pBundledContext->SessionNo].bVolumeInstantiated == LVM_FALSE)&& 3512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (GlobalSessionMemory[pContext->pBundledContext->SessionNo].bEqualizerInstantiated == LVM_FALSE)&& 3522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (GlobalSessionMemory[pContext->pBundledContext->SessionNo].bVirtualizerInstantiated == LVM_FALSE)) 3532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 3542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectRelease: All effects are no longer instantiated\n"); 3552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent GlobalSessionMemory[pContext->pBundledContext->SessionNo].bBundledEffectsEnabled = LVM_FALSE; 3562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent GlobalSessionMemory[pContext->pBundledContext->SessionNo].pBundledContext = LVM_NULL; 3572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectRelease: Freeing LVM Bundle memory\n"); 3582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmEffect_free(pContext); 3592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectRelease: Deleting LVM Bundle context\n"); 3602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent delete pContext->pBundledContext; 3612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // free the effect context for current effect 3642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent delete pContext; 3652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffectRelease end\n"); 3672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 0; 3682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end EffectRelease */ 3702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LvmGlobalBundle_init(){ 3872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmGlobalBundle_init start"); 3882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for(int i=0; i<LVM_MAX_SESSIONS; i++){ 3892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent GlobalSessionMemory[i].bBundledEffectsEnabled = LVM_FALSE; 3902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent GlobalSessionMemory[i].bVolumeInstantiated = LVM_FALSE; 3912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent GlobalSessionMemory[i].bEqualizerInstantiated = LVM_FALSE; 3922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent GlobalSessionMemory[i].bBassInstantiated = LVM_FALSE; 3932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent GlobalSessionMemory[i].bVirtualizerInstantiated = LVM_FALSE; 3942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent GlobalSessionMemory[i].pBundledContext = LVM_NULL; 3952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return; 3972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 3982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 3992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// LvmBundle_init() 4002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 4012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: Initialize engine with default configuration, creates instance 4022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// with all effects disabled. 4032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 4042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 4052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 4062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 4072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 4082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 4092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 4102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint LvmBundle_init(EffectContext *pContext){ 4122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int status; 4132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmBundle_init start"); 4152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->config.inputCfg.accessMode = EFFECT_BUFFER_ACCESS_READ; 4172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->config.inputCfg.channels = CHANNEL_STEREO; 4182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->config.inputCfg.format = SAMPLE_FORMAT_PCM_S15; 4192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->config.inputCfg.samplingRate = 44100; 4202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->config.inputCfg.bufferProvider.getBuffer = NULL; 4212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->config.inputCfg.bufferProvider.releaseBuffer = NULL; 4222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->config.inputCfg.bufferProvider.cookie = NULL; 4232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->config.inputCfg.mask = EFFECT_CONFIG_ALL; 4242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->config.outputCfg.accessMode = EFFECT_BUFFER_ACCESS_ACCUMULATE; 4252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->config.outputCfg.channels = CHANNEL_STEREO; 4262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->config.outputCfg.format = SAMPLE_FORMAT_PCM_S15; 4272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->config.outputCfg.samplingRate = 44100; 4282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->config.outputCfg.bufferProvider.getBuffer = NULL; 4292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->config.outputCfg.bufferProvider.releaseBuffer = NULL; 4302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->config.outputCfg.bufferProvider.cookie = NULL; 4312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->config.outputCfg.mask = EFFECT_CONFIG_ALL; 4322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CHECK_ARG(pContext != NULL); 4342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pContext->pBundledContext->hInstance != NULL){ 4362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmBundle_init pContext->pBassBoost != NULL " 4372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "-> Calling pContext->pBassBoost->free()"); 4382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmEffect_free(pContext); 4402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmBundle_init pContext->pBassBoost != NULL " 4422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "-> Called pContext->pBassBoost->free()"); 4432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #ifdef LVM_BUNDLE 4462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ReturnStatus_en LvmStatus=LVM_SUCCESS; /* Function call status */ 4472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t params; /* Control Parameters */ 4482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_InstParams_t InstParams; /* Instance parameters */ 4492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_EQNB_BandDef_t BandDefs[MAX_NUM_BANDS]; /* Equaliser band definitions */ 4502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_HeadroomParams_t HeadroomParams; /* Headroom parameters */ 4512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_HeadroomBandDef_t HeadroomBandDef[LVM_HEADROOM_MAX_NBANDS]; 4522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_MemTab_t MemTab; /* Memory allocation table */ 4532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent bool bMallocFailure = LVM_FALSE; 4542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Set the capabilities */ 4562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstParams.BufferMode = LVM_MANAGED_BUFFERS; 4572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstParams.MaxBlockSize = MAX_CALL_SIZE; 4582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstParams.EQNB_NumBands = MAX_NUM_BANDS; 4592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent InstParams.PSA_Included = LVM_PSA_ON; 4602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Allocate memory, forcing alignment */ 4622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_GetMemoryTable(LVM_NULL, 4632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &MemTab, 4642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &InstParams); 4652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_GetMemoryTable", "LvmBundle_init") 4672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LvmStatus != LVM_SUCCESS) return -EINVAL; 4682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tCreateInstance Succesfully called LVM_GetMemoryTable\n"); 4702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Allocate memory */ 4722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for (int i=0; i<LVM_NR_MEMORY_REGIONS; i++){ 4732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (MemTab.Region[i].Size != 0){ 4742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent MemTab.Region[i].pBaseAddress = malloc(MemTab.Region[i].Size); 4752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (MemTab.Region[i].pBaseAddress == LVM_NULL){ 4772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : CreateInstance Failed to allocate %ld bytes for region %u\n", 4782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent MemTab.Region[i].Size, i ); 4792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent bMallocFailure = LVM_TRUE; 4802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent }else{ 4812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tCreateInstance allocated %ld bytes for region %u at %p\n", 4822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent MemTab.Region[i].Size, i, MemTab.Region[i].pBaseAddress); 4832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* If one or more of the memory regions failed to allocate, free the regions that were 4882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * succesfully allocated and return with an error 4892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 4902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(bMallocFailure == LVM_TRUE){ 4912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for (int i=0; i<LVM_NR_MEMORY_REGIONS; i++){ 4922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (MemTab.Region[i].pBaseAddress == LVM_NULL){ 4932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : CreateInstance Failed to allocate %ld bytes for region %u - Not freeing\n", 4942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent MemTab.Region[i].Size, i ); 4952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent }else{ 4962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : CreateInstance Failed: but allocated %ld bytes for region %u at %p- free\n", 4972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent MemTab.Region[i].Size, i, MemTab.Region[i].pBaseAddress); 4982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent free(MemTab.Region[i].pBaseAddress); 4992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 5002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 5012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 5022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 5032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tCreateInstance Succesfully malloc'd memory\n"); 5042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Initialise */ 5062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->hInstance = LVM_NULL; /* Initialise to NULL */ 5072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_GetInstanceHandle(&pContext->pBundledContext->hInstance,/* Init sets the instance handle */ 5092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &MemTab, 5102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &InstParams); 5112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_GetInstanceHandle", "LvmBundle_init") 5132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LvmStatus != LVM_SUCCESS) return -EINVAL; 5142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tCreateInstance Succesfully called LVM_GetInstanceHandle\n"); 5162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Set the initial process parameters */ 5182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* General parameters */ 5192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.OperatingMode = LVM_MODE_ON; 5202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.SampleRate = LVM_FS_44100; 5212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.SourceFormat = LVM_STEREO; 5222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.SpeakerType = LVM_HEADPHONES; 5232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Concert Sound parameters */ 5252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.VirtualizerOperatingMode = LVM_MODE_OFF; 5262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.VirtualizerType = LVM_CONCERTSOUND; 5272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.VirtualizerReverbLevel = 100; 5282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.CS_EffectLevel = LVM_CS_EFFECT_HIGH; 5292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* N-Band Equaliser parameters */ 5312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.EQNB_OperatingMode = LVM_EQNB_OFF; 5322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.EQNB_NBands = FIVEBAND_NUMBANDS; 5332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.pEQNB_BandDefinition = &BandDefs[0]; 5342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for (int i=0; i<FIVEBAND_NUMBANDS; i++) 5352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 5362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent BandDefs[i].Frequency = EQNB_5BandPresetsFrequencies[i]; 5372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent BandDefs[i].QFactor = EQNB_5BandPresetsQFactors[i]; 5382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent BandDefs[i].Gain = EQNB_5BandNormalPresets[i]; 5392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 5402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Volume Control parameters */ 5422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.VC_EffectLevel = 0; 5432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.VC_Balance = 0; 5442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Treble Enhancement parameters */ 5462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.TE_OperatingMode = LVM_TE_OFF; 5472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.TE_EffectLevel = 0; 5482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* PSA Control parameters */ 5502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.PSA_Enable = LVM_PSA_OFF; 5512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.PSA_PeakDecayRate = (LVM_PSA_DecaySpeed_en)0; 5522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Bass Enhancement parameters */ 5542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.BE_OperatingMode = LVM_BE_OFF; 5552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.BE_EffectLevel = 0; 5562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.BE_CentreFreq = LVM_BE_CENTRE_90Hz; 5572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.BE_HPF = LVM_BE_HPF_ON; 5582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* PSA Control parameters */ 5602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.PSA_Enable = LVM_PSA_OFF; 5612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent params.PSA_PeakDecayRate = LVM_PSA_SPEED_MEDIUM; 5622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_SetControlParameters(pContext->pBundledContext->hInstance, /* Activate the initial settings */ 5642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ¶ms); 5652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_SetControlParameters", "LvmBundle_init") 5672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LvmStatus != LVM_SUCCESS) return -EINVAL; 5682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tCreateInstance Succesfully called LVM_SetControlParameters\n"); 5702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Set the headroom parameters */ 5722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent HeadroomBandDef[0].Limit_Low = 20; 5732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent HeadroomBandDef[0].Limit_High = 4999; 5742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent HeadroomBandDef[0].Headroom_Offset = 3; 5752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent HeadroomBandDef[1].Limit_Low = 5000; 5762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent HeadroomBandDef[1].Limit_High = 24000; 5772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent HeadroomBandDef[1].Headroom_Offset = 4; 5782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent HeadroomParams.pHeadroomDefinition = &HeadroomBandDef[0]; 5792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent HeadroomParams.Headroom_OperatingMode = LVM_HEADROOM_ON; 5802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent HeadroomParams.NHeadroomBands = 2; 5812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_SetHeadroomParams(pContext->pBundledContext->hInstance, 5832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &HeadroomParams); 5842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_SetHeadroomParams", "LvmBundle_init") 5862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LvmStatus != LVM_SUCCESS) return -EINVAL; 5872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tCreateInstance Succesfully called LVM_SetHeadroomParams\n"); 5892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #endif /* end LVM_BUNDLE */ 5902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmBundle_init End"); 5922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 0; 5932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end LvmBundle_init */ 5942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 5982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// LvmBundle_process() 5992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 6002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 6012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Apply LVM Bundle effects 6022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 6032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 6042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pIn: pointer to stereo 16 bit input data 6052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pOut: pointer to stereo 16 bit output data 6062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// frameCount: Frames to process 6072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 6082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// strength strength to be applied 6092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 6102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 6112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pOut: pointer to updated stereo 16 bit output data 6122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 6132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 6142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint LvmBundle_process(LVM_INT16 *pIn, 6162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 *pOut, 6172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int frameCount, 6182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EffectContext *pContext){ 6192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t ActiveParams; /* Current control Parameters */ 6212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ReturnStatus_en LvmStatus = LVM_SUCCESS; /* Function call status */ 6222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #ifdef LVM_BUNDLE 6252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 *pOutTmp; 6262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pContext->config.outputCfg.accessMode == EFFECT_BUFFER_ACCESS_WRITE){ 6272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent //LOGV("\tprocess: mBehavior is EFFECT_BUFFER_ACCESS_WRITE %d\n", 6282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // pContext->config.outputCfg.accessMode); 6292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pOutTmp = pOut; 6302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent }else if (pContext->config.outputCfg.accessMode == EFFECT_BUFFER_ACCESS_ACCUMULATE){ 6312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent //LOGV("\tprocess: mBehavior is EFFECT_BUFFER_ACCESS_ACCUMULATE %d\n", 6322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // pContext->config.outputCfg.accessMode); 6332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pOutTmp = (LVM_INT16 *)malloc(frameCount * sizeof(LVM_INT16) * 2); 6342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pOutTmp == NULL){ 6352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : LvmBundle_process failed to allocate memory for EFFECT_BUFFER_ACCESS_ACCUMULATE mode"); 6362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 6372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 6382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent }else{ 6392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("LVM_ERROR : LvmBundle_process invalid access mode"); 6402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 6412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 6422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Process the samples */ 6442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_GetControlParameters(pContext->pBundledContext->hInstance, /* Get the current settings */ 6452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &ActiveParams); 6462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_GetControlParameters", "LvmEffect_enable") 6482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LvmStatus != LVM_SUCCESS) return -EINVAL; 6492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\t%d %d %d\n",ActiveParams.BE_OperatingMode, ActiveParams.VirtualizerOperatingMode, ActiveParams.EQNB_OperatingMode); 6502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_Process(pContext->pBundledContext->hInstance, /* Instance handle */ 6532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pIn, /* Input buffer */ 6542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pOutTmp, /* Output buffer */ 6552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_UINT16)frameCount, /* Number of samples to read */ 6562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 0); /* Audo Time */ 6572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_Process", "LvmBundle_process") 6582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LvmStatus != LVM_SUCCESS) return -EINVAL; 6592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pContext->config.outputCfg.accessMode == EFFECT_BUFFER_ACCESS_ACCUMULATE){ 6612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for (int i=0; i<frameCount*2; i++){ 6622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pOut[i] += pOutTmp[i]; 6632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 6642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent free(pOutTmp); 6652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 6662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #else 6672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent memcpy(pOut, pIn, frameCount*sizeof(LVM_INT16)*2); // 2 is for stereo input 6682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #endif /* end LVM_BUNDLE */ 6692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 0; 6702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end LvmBundle_process */ 6712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 6732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// LvmEffect_enable() 6742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 6752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: Enable the effect in the bundle 6762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 6772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 6782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 6792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 6802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 6812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 6822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 6832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint LvmEffect_enable(EffectContext *pContext){ 6852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmEffect_enable start"); 6862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #ifdef LVM_BUNDLE 6882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t ActiveParams; /* Current control Parameters */ 6892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ReturnStatus_en LvmStatus = LVM_SUCCESS; /* Function call status */ 6902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_GetControlParameters(pContext->pBundledContext->hInstance, /* Get the current settings */ 6922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &ActiveParams); 6932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_GetControlParameters", "LvmEffect_enable") 6952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LvmStatus != LVM_SUCCESS) return -EINVAL; 6962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmEffect_enable Succesfully called LVM_GetControlParameters\n"); 6972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_BASS_BOOST) { 6992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmEffect_enable : Enabling LVM_BASS_BOOST"); 7002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ActiveParams.BE_OperatingMode = LVM_BE_ON; 7012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_VIRTUALIZER) { 7032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmEffect_enable : Enabling LVM_VIRTUALIZER"); 7042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ActiveParams.VirtualizerOperatingMode = LVM_MODE_ON; 7052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_EQUALIZER) { 7072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmEffect_enable : Enabling LVM_EQUALIZER"); 7082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ActiveParams.EQNB_OperatingMode = LVM_EQNB_ON; 7092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_VOLUME) { 7112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmEffect_enable : Enabling LVM_VOLUME"); 7122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_SetControlParameters(pContext->pBundledContext->hInstance, &ActiveParams); 7152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_SetControlParameters", "LvmEffect_enable") 7162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LvmStatus != LVM_SUCCESS) return -EINVAL; 7172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmEffect_enable Succesfully called LVM_SetControlParameters\n"); 7182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #endif /* end LVM_BUNDLE */ 7192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmEffect_enable end"); 7212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 0; 7222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 7232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 7262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// LvmEffect_disable() 7272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 7282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: Disable the effect in the bundle 7292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 7302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 7312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 7322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 7332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 7342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 7352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 7362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint LvmEffect_disable(EffectContext *pContext){ 7382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmEffect_disable start"); 7392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #ifdef LVM_BUNDLE 7412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t ActiveParams; /* Current control Parameters */ 7422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ReturnStatus_en LvmStatus = LVM_SUCCESS; /* Function call status */ 7432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_GetControlParameters(pContext->pBundledContext->hInstance, /* Get the current settings */ 7452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &ActiveParams); 7462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_GetControlParameters", "LvmEffect_disable") 7482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LvmStatus != LVM_SUCCESS) return -EINVAL; 7492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmEffect_disable Succesfully called LVM_GetControlParameters\n"); 7502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_BASS_BOOST) { 7522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmEffect_disable : Disabling LVM_BASS_BOOST"); 7532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ActiveParams.BE_OperatingMode = LVM_BE_OFF; 7542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_VIRTUALIZER) { 7562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmEffect_enable : Enabling LVM_VIRTUALIZER"); 7572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ActiveParams.VirtualizerOperatingMode = LVM_MODE_OFF; 7582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_EQUALIZER) { 7602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmEffect_enable : Enabling LVM_EQUALIZER"); 7612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ActiveParams.EQNB_OperatingMode = LVM_EQNB_OFF; 7622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_VOLUME) { 7642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmEffect_enable : Enabling LVM_VOLUME"); 7652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_SetControlParameters(pContext->pBundledContext->hInstance, &ActiveParams); 7682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_SetControlParameters", "LvmEffect_disable") 7692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LvmStatus != LVM_SUCCESS) return -EINVAL; 7702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmEffect_enable Succesfully called LVM_SetControlParameters\n"); 7712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #endif /* end LVM_BUNDLE */ 7722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLvmEffect_enable end"); 7742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 0; 7752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 7762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 7792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// LvmEffect_free() 7802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 7812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: Free all memory associated with the Bundle. 7822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 7832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 7842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 7852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 7862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 7872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 7882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 7892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LvmEffect_free(EffectContext *pContext){ 7912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #ifdef LVM_BUNDLE 7922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ReturnStatus_en LvmStatus=LVM_SUCCESS; /* Function call status */ 7932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t params; /* Control Parameters */ 7942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_MemTab_t MemTab; 7952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Free the algorithm memory */ 7972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_GetMemoryTable(pContext->pBundledContext->hInstance, 7982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &MemTab, 7992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_NULL); 8002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_GetMemoryTable", "LvmEffect_free") 8022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for (int i=0; i<LVM_NR_MEMORY_REGIONS; i++){ 8042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (MemTab.Region[i].Size != 0){ 8052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (MemTab.Region[i].pBaseAddress != NULL){ 8062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tfree() - START freeing %ld bytes for region %u at %p\n", 8072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent MemTab.Region[i].Size, i, MemTab.Region[i].pBaseAddress); 8082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent free(MemTab.Region[i].pBaseAddress); 8102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tfree() - END freeing %ld bytes for region %u at %p\n", 8122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent MemTab.Region[i].Size, i, MemTab.Region[i].pBaseAddress); 8132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent }else{ 8142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : free() - trying to free with NULL pointer %ld bytes " 8152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "for region %u at %p ERROR\n", 8162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent MemTab.Region[i].Size, i, MemTab.Region[i].pBaseAddress); 8172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 8182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 8192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 8202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #endif /* end LVM_BUNDLE */ 8212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end LvmEffect_free */ 8222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 8242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Effect_configure() 8252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 8262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: Set input and output audio configuration. 8272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 8282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 8292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 8302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pConfig: pointer to effect_config_t structure holding input and output 8312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// configuration parameters 8322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 8332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 8342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 8352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 8362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint Effect_configure(EffectContext *pContext, effect_config_t *pConfig){ 8382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_configure start"); 8392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CHECK_ARG(pContext != NULL); 8412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CHECK_ARG(pConfig != NULL); 8422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CHECK_ARG(pConfig->inputCfg.samplingRate == pConfig->outputCfg.samplingRate); 8442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CHECK_ARG(pConfig->inputCfg.channels == pConfig->outputCfg.channels); 8452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CHECK_ARG(pConfig->inputCfg.format == pConfig->outputCfg.format); 8462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CHECK_ARG(pConfig->inputCfg.channels == CHANNEL_STEREO); 8472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CHECK_ARG(pConfig->outputCfg.accessMode == EFFECT_BUFFER_ACCESS_WRITE 8482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent || pConfig->outputCfg.accessMode == EFFECT_BUFFER_ACCESS_ACCUMULATE); 8492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CHECK_ARG(pConfig->inputCfg.format == SAMPLE_FORMAT_PCM_S15); 8502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_configure calling memcpy"); 8522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent memcpy(&pContext->config, pConfig, sizeof(effect_config_t)); 8532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_configure End"); 8542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 0; 8552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end Effect_configure */ 8562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 8822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// BassGetStrength() 8832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 8842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 8852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// get the effect strength currently being used, what is actually returned is the strengh that was 8862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// previously used in the set, this is because the app uses a strength in the range 0-1000 while 8872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// the bassboost uses 1-15, so to avoid a quantisation the original set value is used. However the 8882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// actual used value is checked to make sure it corresponds to the one being returned 8892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 8902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 8912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 8922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 8932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 8942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentuint32_t BassGetStrength(EffectContext *pContext){ 8962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tBassGetStrength() (0-1000) -> %d\n", pContext->pBundledContext->BassStrengthSaved); 8972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #ifdef LVM_BUNDLE 8992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t ActiveParams; /* Current control Parameters */ 9002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ReturnStatus_en LvmStatus = LVM_SUCCESS; /* Function call status */ 9012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_GetControlParameters(pContext->pBundledContext->hInstance, /* Get the current settings */ 9032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &ActiveParams); 9042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_GetControlParameters", "BassGetStrength") 9062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LvmStatus != LVM_SUCCESS) return -EINVAL; 9072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tBassGetStrength Succesfully returned from LVM_GetControlParameters\n"); 9092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Check that the strength returned matches the strength that was set earlier */ 9112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(ActiveParams.BE_EffectLevel != (LVM_INT16)((15*pContext->pBundledContext->BassStrengthSaved)/1000)){ 9122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : BassGetStrength module strength does not match savedStrength %d %d\n", 9132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ActiveParams.BE_EffectLevel, pContext->pBundledContext->BassStrengthSaved); 9142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 9152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 9162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tBassGetStrength() (0-15) -> %d\n", ActiveParams.BE_EffectLevel ); 9182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #endif /* end LVM_BUNDLE */ 9192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tBassGetStrength() (saved) -> %d\n", pContext->pBundledContext->BassStrengthSaved ); 9212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return pContext->pBundledContext->BassStrengthSaved; 9222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end BassGetStrength */ 9232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 9252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// BassSetStrength() 9262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 9272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 9282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Apply the strength to the BassBosst. Must first be converted from the range 0-1000 to 1-15 9292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 9302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 9312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 9322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// strength strength to be applied 9332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 9342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 9352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid BassSetStrength(EffectContext *pContext, uint32_t strength){ 9372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tBassSetStrength(%d)", strength); 9382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->BassStrengthSaved = (int)strength; 9402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #ifdef LVM_BUNDLE 9422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t ActiveParams; /* Current control Parameters */ 9432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ReturnStatus_en LvmStatus=LVM_SUCCESS; /* Function call status */ 9442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Get the current settings */ 9462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_GetControlParameters(pContext->pBundledContext->hInstance, 9472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &ActiveParams); 9482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_GetControlParameters", "BassSetStrength") 9502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tsetStrength Succesfully returned from LVM_GetControlParameters\n"); 9512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Bass Enhancement parameters */ 9532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// ActiveParams.BE_OperatingMode = LVM_BE_ON; 9542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ActiveParams.BE_EffectLevel = (LVM_INT16)((15*strength)/1000); 9552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ActiveParams.BE_CentreFreq = LVM_BE_CENTRE_90Hz; 9562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tBassSetStrength() (0-15) -> %d\n", ActiveParams.BE_EffectLevel ); 9582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Activate the initial settings */ 9602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_SetControlParameters(pContext->pBundledContext->hInstance, &ActiveParams); 9612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_SetControlParameters", "BassSetStrength") 9632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tBassSetStrength Succesfully called LVM_SetControlParameters\n"); 9642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #endif /* end LVM_BUNDLE */ 9652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end BassSetStrength */ 9662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 9682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// VirtualizerGetStrength() 9692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 9702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 9712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// get the effect strength currently being used, what is actually returned is the strengh that was 9722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// previously used in the set, this is because the app uses a strength in the range 0-1000 while 9732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// the Virtualizer uses 1-100, so to avoid a quantisation the original set value is used. However the 9742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// actual used value is checked to make sure it corresponds to the one being returned 9752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 9762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 9772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 9782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 9792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 9802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentuint32_t VirtualizerGetStrength(EffectContext *pContext){ 9822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizerGetStrength() (0-1000) -> %d\n", pContext->pBundledContext->VirtStrengthSaved ); 9832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #ifdef LVM_BUNDLE 9852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t ActiveParams; /* Current control Parameters */ 9862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ReturnStatus_en LvmStatus = LVM_SUCCESS; /* Function call status */ 9872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_GetControlParameters(pContext->pBundledContext->hInstance, &ActiveParams); 9892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_GetControlParameters", "VirtualizerGetStrength") 9912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LvmStatus != LVM_SUCCESS) return -EINVAL; 9922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizerGetStrength Succesfully returned from LVM_GetControlParameters\n"); 9942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizerGetStrength() (0-100) -> %d\n", ActiveParams.VirtualizerReverbLevel*10); 9952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #endif /* end LVM_BUNDLE */ 9962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return ActiveParams.VirtualizerReverbLevel*10; 9982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end getStrength */ 9992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 10012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// VirtualizerSetStrength() 10022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 10032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 10042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Apply the strength to the Virtualizer. Must first be converted from the range 0-1000 to 1-15 10052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 10062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 10072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 10082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// strength strength to be applied 10092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 10102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 10112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid VirtualizerSetStrength(EffectContext *pContext, uint32_t strength){ 10132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizerSetStrength(%d)", strength); 10142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->VirtStrengthSaved = (int)strength; 10162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #ifdef LVM_BUNDLE 10182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t ActiveParams; /* Current control Parameters */ 10192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ReturnStatus_en LvmStatus=LVM_SUCCESS; /* Function call status */ 10202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Get the current settings */ 10222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_GetControlParameters(pContext->pBundledContext->hInstance,&ActiveParams); 10232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_GetControlParameters", "VirtualizerSetStrength") 10252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizerSetStrength Succesfully returned from LVM_GetControlParameters\n"); 10262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Virtualizer parameters */ 10282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ActiveParams.VirtualizerReverbLevel = (LVM_INT16)(strength/10); 10292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizerSetStrength() (0-1000) -> %d\n", strength ); 10312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizerSetStrength() (0- 100) -> %d\n", ActiveParams.VirtualizerReverbLevel ); 10322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Activate the initial settings */ 10342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_SetControlParameters(pContext->pBundledContext->hInstance, &ActiveParams); 10352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_SetControlParameters", "VirtualizerSetStrength") 10362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizerSetStrength Succesfully called LVM_SetControlParameters\n"); 10372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #endif /* end LVM_BUNDLE */ 10382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end setStrength */ 10392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 10412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// EqualizerGetBandLevel() 10422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 10432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: Retrieve the gain currently being used for the band passed in 10442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 10452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 10462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// band: band number 10472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 10482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 10492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 10502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 10512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 10522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint32_t EqualizerGetBandLevel(EffectContext *pContext, int32_t band){ 10532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t Gain =0; 10552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #ifdef LVM_BUNDLE 10572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t ActiveParams; /* Current control Parameters */ 10582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ReturnStatus_en LvmStatus = LVM_SUCCESS; /* Function call status */ 10592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_EQNB_BandDef_t *BandDef; 10602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_GetControlParameters(pContext->pBundledContext->hInstance, /* Get the current settings */ 10622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &ActiveParams); 10632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_GetControlParameters", "getBandLevel") 10652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent BandDef = ActiveParams.pEQNB_BandDefinition; 10672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Gain = (int32_t)BandDef[band].Gain*100; // Convert to millibels 10682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tgetBandLevel() -> %d\n", Gain ); 10702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tgetBandLevel Succesfully returned from LVM_GetControlParameters\n"); 10712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #endif /* end LVM_BUNDLE */ 10722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return Gain; 10742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 10752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 10772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// EqualizerSetBandLevel() 10782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 10792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 10802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Sets gain value for the given band. 10812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 10822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 10832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// band: band number 10842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Gain: Gain to be applied in millibels 10852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 10862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 10872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 10882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 10892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//--------------------------------------------------------------------------- 10902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid EqualizerSetBandLevel(EffectContext *pContext, int band, int Gain){ 10912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int gainRounded; 10922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(Gain > 0){ 10932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent gainRounded = (int)((Gain+50)/100); 10942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent }else{ 10952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent gainRounded = (int)((Gain-50)/100); 10962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 10972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tsetBandLevel(%d)->(%d)", Gain, gainRounded); 10982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #ifdef LVM_BUNDLE 11002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t ActiveParams; /* Current control Parameters */ 11012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ReturnStatus_en LvmStatus=LVM_SUCCESS; /* Function call status */ 11022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_EQNB_BandDef_t *BandDef; 11032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 11042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Get the current settings */ 11052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_GetControlParameters(pContext->pBundledContext->hInstance, &ActiveParams); 11062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_GetControlParameters", "setBandLevel") 11072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tsetBandLevel Succesfully returned from LVM_GetControlParameters\n"); 11082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tsetBandLevel() just Got -> %d\n", ActiveParams.pEQNB_BandDefinition[band].Gain); 11092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 11102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Set local EQ parameters */ 11112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent BandDef = ActiveParams.pEQNB_BandDefinition; 11122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ActiveParams.pEQNB_BandDefinition[band].Gain = gainRounded; 11132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 11142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Activate the initial settings */ 11152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_SetControlParameters(pContext->pBundledContext->hInstance, &ActiveParams); 11162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_SetControlParameters", "setBandLevel") 11172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tsetBandLevel() just Set -> %d\n", ActiveParams.pEQNB_BandDefinition[band].Gain); 11182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 11192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Get the current settings to check they were applied ok, might not work as process not called*/ 11202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_GetControlParameters(pContext->pBundledContext->hInstance, &ActiveParams); 11212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_GetControlParameters", "setBandLevel") 11222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : remove this test setBandLevel Succesfully returned from LVM_GetControlParameters\n"); 11232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tsetBandLevel() just Got -> %d\n", ActiveParams.pEQNB_BandDefinition[band].Gain); 11242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tsetBandLevel Succesfully called LVM_SetControlParameters\n"); 11252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #endif /* end LVM_BUNDLE */ 11262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 11272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->CurPreset = PRESET_CUSTOM; 11282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return; 11292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 11302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 11312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// EqualizerGetCentreFrequency() 11322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 11332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: Retrieve the frequency being used for the band passed in 11342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 11352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 11362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// band: band number 11372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 11382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 11392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 11402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 11412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 11422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint32_t EqualizerGetCentreFrequency(EffectContext *pContext, int32_t band){ 11432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t Frequency =0; 11442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 11452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #ifdef LVM_BUNDLE 11462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t ActiveParams; /* Current control Parameters */ 11472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ReturnStatus_en LvmStatus = LVM_SUCCESS; /* Function call status */ 11482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_EQNB_BandDef_t *BandDef; 11492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 11502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_GetControlParameters(pContext->pBundledContext->hInstance, /* Get the current settings */ 11512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &ActiveParams); 11522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 11532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_GetControlParameters", "getCentreFrequency") 11542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 11552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent BandDef = ActiveParams.pEQNB_BandDefinition; 11562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Frequency = (int32_t)BandDef[band].Frequency*1000; // Convert to millibels 11572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 11582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tgetCentreFrequency() -> %d\n", Frequency ); 11592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tgetCentreFrequency Succesfully returned from LVM_GetControlParameters\n"); 11602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #endif /* end LVM_BUNDLE */ 11612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 11622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return Frequency; 11632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 11642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 11652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 11662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// EqualizerGetBandFreqRange( 11672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 11682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 11692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 11702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Gets lower and upper boundaries of a band. 11712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// For the high shelf, the low bound is the band frequency and the high 11722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// bound is Nyquist. 11732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// For the peaking filters, they are the gain[dB]/2 points. 11742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 11752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 11762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// band: band number 11772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 11782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 11792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 11802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pLow: lower band range 11812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pLow: upper band range 11822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 11832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint32_t EqualizerGetBandFreqRange(EffectContext *pContext, int32_t band, uint32_t *pLow, uint32_t *pHi){ 11842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pLow = bandFreqRange[band][0]; 11852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pHi = bandFreqRange[band][1]; 11862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 0; 11872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 11882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 11892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 11902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// EqualizerGetBand( 11912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 11922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 11932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 11942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Returns the band with the maximum influence on a given frequency. 11952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Result is unaffected by whether EQ is enabled or not, or by whether 11962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// changes have been committed or not. 11972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 11982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 11992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// targetFreq The target frequency, in millihertz. 12002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 12012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 12022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 12032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pLow: lower band range 12042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pLow: upper band range 12052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 12062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint32_t EqualizerGetBand(EffectContext *pContext, uint32_t targetFreq){ 12072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int band = 0; 12082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 12092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(targetFreq < bandFreqRange[0][0]){ 12102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 12112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent }else if(targetFreq == bandFreqRange[0][0]){ 12122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 0; 12132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 12142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for(int i=0; i<FIVEBAND_NUMBANDS;i++){ 12152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((targetFreq > bandFreqRange[i][0])&&(targetFreq <= bandFreqRange[i][1])){ 12162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent band = i; 12172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 12182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 12192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return band; 12202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 12212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 12222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 12232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// EqualizerGetPreset( 12242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 12252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 12262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 12272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Gets the currently set preset ID. 12282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Will return PRESET_CUSTOM in case the EQ parameters have been modified 12292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// manually since a preset was set. 12302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 12312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 12322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 12332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 12342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 12352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint32_t EqualizerGetPreset(EffectContext *pContext){ 12362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return pContext->pBundledContext->CurPreset; 12372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 12382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 12392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 12402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// EqualizerSetPreset( 12412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 12422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 12432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 12442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Sets the current preset by ID. 12452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// All the band parameters will be overridden. 12462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 12472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 12482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 12492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// preset The preset ID. 12502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 12512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 12522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid EqualizerSetPreset(EffectContext *pContext, int preset){ 12532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 12542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tsetPreset(%d)", preset); 12552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->CurPreset = preset; 12562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 12572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #ifdef LVM_BUNDLE 12582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t ActiveParams; /* Current control Parameters */ 12592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ReturnStatus_en LvmStatus=LVM_SUCCESS; /* Function call status */ 12602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 12612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Get the current settings */ 12622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_GetControlParameters(pContext->pBundledContext->hInstance, &ActiveParams); 12632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_GetControlParameters", "setPreset") 12642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tsetPreset Succesfully returned from LVM_GetControlParameters\n"); 12652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 12662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent //ActiveParams.pEQNB_BandDefinition = &BandDefs[0]; 12672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for (int i=0; i<FIVEBAND_NUMBANDS; i++) 12682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 12692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ActiveParams.pEQNB_BandDefinition[i].Frequency = EQNB_5BandPresetsFrequencies[i]; 12702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ActiveParams.pEQNB_BandDefinition[i].QFactor = EQNB_5BandPresetsQFactors[i]; 12712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ActiveParams.pEQNB_BandDefinition[i].Gain 12722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent = EQNB_5BandNormalPresets[i + preset * FIVEBAND_NUMBANDS]; 12732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 12742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Activate the new settings */ 12752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_SetControlParameters(pContext->pBundledContext->hInstance, &ActiveParams); 12762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_SetControlParameters", "setPreset") 12772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tsetPreset Succesfully called LVM_SetControlParameters\n"); 12782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #endif /* end LVM_BUNDLE */ 12792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 12802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return; 12812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 12822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint32_t EqualizerGetNumPresets(){ 12832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 10; 12842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 12852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 12862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 12872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// EqualizerGetPresetName( 12882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 12892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 12902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Gets a human-readable name for a preset ID. Will return "Custom" if 12912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// PRESET_CUSTOM is passed. 12922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 12932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 12942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// preset The preset ID. Must be less than number of presets. 12952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 12962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//------------------------------------------------------------------------- 12972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentconst char * EqualizerGetPresetName(int32_t preset){ 12982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizerGetPresetName start(%d)", preset); 12992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (preset == PRESET_CUSTOM) { 13002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return "Custom"; 13012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } else { 13022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return gEqualizerPresets[preset].name; 13032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 13042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizerGetPresetName end(%d)", preset); 13052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 0; 13062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 13072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 13092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// VolumeSetVolumeLevel() 13102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 13112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 13122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 13132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 13142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 13152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// level level to be applied 13162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 13172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 13182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint VolumeSetVolumeLevel(EffectContext *pContext, int16_t level){ 13202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolumeSetVolumeLevel start(%d)", level); 13212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #ifdef LVM_BUNDLE 13232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t ActiveParams; /* Current control Parameters */ 13242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ReturnStatus_en LvmStatus=LVM_SUCCESS; /* Function call status */ 13252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Get the current settings */ 13272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_GetControlParameters(pContext->pBundledContext->hInstance, &ActiveParams); 13282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_GetControlParameters", "VolumeSetVolumeLevel") 13292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LvmStatus != LVM_SUCCESS) return -EINVAL; 13302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolumeSetVolumeLevel Succesfully returned from LVM_GetControlParameters\n"); 13312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Volume parameters */ 13332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ActiveParams.VC_EffectLevel = (LVM_INT16)(level/100); 13342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolumeSetVolumeLevel() (-96dB -> 0dB) -> %d\n", ActiveParams.VC_EffectLevel ); 13352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Activate the initial settings */ 13372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_SetControlParameters(pContext->pBundledContext->hInstance, &ActiveParams); 13382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_SetControlParameters", "VolumeSetVolumeLevel") 13392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LvmStatus != LVM_SUCCESS) return -EINVAL; 13402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolumeSetVolumeLevel Succesfully called LVM_SetControlParameters\n"); 13422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolumeSetVolumeLevel end"); 13432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #endif /* end LVM_BUNDLE */ 13442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 0; 13452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end setVolumeLevel */ 13462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 13482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// VolumeGetVolumeLevel() 13492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 13502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 13512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 13522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 13532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 13542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 13552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 13562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint VolumeGetVolumeLevel(EffectContext *pContext, int16_t *level){ 13582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolumeGetVolumeLevel start"); 13602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #ifdef LVM_BUNDLE 13612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t ActiveParams; /* Current control Parameters */ 13622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ReturnStatus_en LvmStatus = LVM_SUCCESS; /* Function call status */ 13632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_GetControlParameters(pContext->pBundledContext->hInstance, &ActiveParams); 13652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_GetControlParameters", "VolumeGetVolumeLevel") 13662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LvmStatus != LVM_SUCCESS) return -EINVAL; 13672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolumeGetVolumeLevel() (-96dB -> 0dB) -> %d\n", ActiveParams.VC_EffectLevel ); 13692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolumeGetVolumeLevel Succesfully returned from LVM_GetControlParameters\n"); 13702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #endif /* end LVM_BUNDLE */ 13712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *level = ActiveParams.VC_EffectLevel*100; // Convert dB to millibels 13732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolumeGetVolumeLevel end"); 13742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 0; 13752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end VolumeGetVolumeLevel */ 13762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 13782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// VolumeSetMute() 13792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 13802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 13812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 13822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 13832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 13842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// mute: enable/disable flag 13852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 13862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 13872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint32_t VolumeSetMute(EffectContext *pContext, uint32_t mute){ 13892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolumeSetMute start()"); 13902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->bMuteEnabled = mute; 13922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #ifdef LVM_BUNDLE 13942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t ActiveParams; /* Current control Parameters */ 13952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ReturnStatus_en LvmStatus=LVM_SUCCESS; /* Function call status */ 13962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Get the current settings */ 13982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_GetControlParameters(pContext->pBundledContext->hInstance, &ActiveParams); 13992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_GetControlParameters", "VolumeSetMute") 14002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LvmStatus != LVM_SUCCESS) return -EINVAL; 14012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolumeSetMute Succesfully returned from LVM_GetControlParameters\n"); 14032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolumeSetMute() to %d, level was %d\n", mute, ActiveParams.BE_EffectLevel ); 14042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Set appropriate volume level */ 14062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->pBundledContext->bMuteEnabled == LVM_TRUE){ 14072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->levelSaved = ActiveParams.VC_EffectLevel; 14082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ActiveParams.VC_EffectLevel = -96; 14092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent }else{ 14102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ActiveParams.VC_EffectLevel = pContext->pBundledContext->levelSaved; 14112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 14122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Activate the initial settings */ 14142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LvmStatus = LVM_SetControlParameters(pContext->pBundledContext->hInstance, &ActiveParams); 14152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ERROR_CHECK(LvmStatus, "LVM_SetControlParameters", "VolumeSetMute") 14162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LvmStatus != LVM_SUCCESS) return -EINVAL; 14172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolumeSetMute Succesfully called LVM_SetControlParameters\n"); 14192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent #endif /* end LVM_BUNDLE */ 14202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolumeSetMute start()"); 14212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 0; 14222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end setMute */ 14232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 14252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// VolumeSetMute() 14262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 14272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 14282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 14292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 14302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pContext: effect engine context 14312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 14322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Ourputs: 14332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// mute: enable/disable flag 14342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 14352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint32_t VolumeGetMute(EffectContext *pContext, uint32_t *mute){ 14372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolumeGetMute start"); 14382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((pContext->pBundledContext->bMuteEnabled == LVM_FALSE)||(pContext->pBundledContext->bMuteEnabled == LVM_TRUE)){ 14392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *mute = pContext->pBundledContext->bMuteEnabled; 14402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 0; 14412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent }else{ 14422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : VolumeGetMute read an invalid value from context %d", pContext->pBundledContext->bMuteEnabled); 14432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 14442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 14452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolumeGetMute start"); 14462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end getMute */ 14472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 14642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// BassBoost_getParameter() 14652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 14662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 14672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Get a BassBoost parameter 14682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 14692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 14702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pBassBoost - handle to instance data 14712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pParam - pointer to parameter 14722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pValue - pointer to variable to hold retrieved value 14732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pValueSize - pointer to value size: maximum size as input 14742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 14752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 14762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// *pValue updated with parameter value 14772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// *pValueSize updated with actual value size 14782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 14792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 14802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Side Effects: 14812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 14822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 14832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint BassBoost_getParameter(EffectContext *pContext, 14852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t *pParam, 14862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent size_t *pValueSize, 14872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent void *pValue){ 14882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int status = 0; 14892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t param = *pParam++; 14902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t param2; 14912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent char *name; 14922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tBassBoost_getParameter start"); 14942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent switch (param){ 14962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case BASSBOOST_PARAM_STRENGTH_SUP: 14972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent //if (*pValueSize != sizeof(uint32_t)){ 14982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // LOGV("\tLVM_ERROR : BassBoost_getParameter() invalid pValueSize1 %d", *pValueSize); 14992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // return -EINVAL; 15002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent //} 15012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent //*pValueSize = sizeof(uint32_t); 15022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent //break; 15032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case BASSBOOST_PARAM_STRENGTH: 15042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (*pValueSize != sizeof(int16_t)){ 15052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : BassBoost_getParameter() invalid pValueSize2 %d", *pValueSize); 15062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 15072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 15082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pValueSize = sizeof(int16_t); 15092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 15102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 15112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent default: 15122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : BassBoost_getParameter() invalid param %d", param); 15132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 15142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 15152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 15162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent switch (param){ 15172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case BASSBOOST_PARAM_STRENGTH_SUP: 15182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(uint32_t *)pValue = 1; 15192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 15202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tBassBoost_getParameter() BASSBOOST_PARAM_STRENGTH_SUP Value is %d", 15212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(uint32_t *)pValue); 15222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 15232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 15242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case BASSBOOST_PARAM_STRENGTH: 15252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)pValue = BassGetStrength(pContext); 15262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 15272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tBassBoost_getParameter() BASSBOOST_PARAM_STRENGTH Value is %d", 15282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)pValue); 15292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 15302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 15312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent default: 15322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : BassBoost_getParameter() invalid param %d", param); 15332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent status = -EINVAL; 15342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 15352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 15362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 15372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tBassBoost_getParameter end"); 15382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return status; 15392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end BassBoost_getParameter */ 15402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 15412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 15422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 15432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// BassBoost_setParameter() 15442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 15452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 15462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Set a BassBoost parameter 15472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 15482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 15492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pBassBoost - handle to instance data 15502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pParam - pointer to parameter 15512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pValue - pointer to value 15522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 15532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 15542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 15552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 15562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 15572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint BassBoost_setParameter (EffectContext *pContext, int32_t *pParam, void *pValue){ 15582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int status = 0; 15592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int16_t strength; 15602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 15612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tBassBoost_setParameter start"); 15622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 15632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent switch (*pParam){ 15642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case BASSBOOST_PARAM_STRENGTH: 15652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent strength = *(int16_t *)pValue; 15662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tBassBoost_setParameter() BASSBOOST_PARAM_STRENGTH value is %d", strength); 15672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tBassBoost_setParameter() Calling pBassBoost->BassSetStrength"); 15682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent BassSetStrength(pContext, (int32_t)strength); 15692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tBassBoost_setParameter() Called pBassBoost->BassSetStrength"); 15702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 15712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent default: 15722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : BassBoost_setParameter() invalid param %d", *pParam); 15732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 15742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 15752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 15762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tBassBoost_setParameter end"); 15772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return status; 15782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end BassBoost_setParameter */ 15792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 15802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 15812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Virtualizer_getParameter() 15822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 15832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 15842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Get a Virtualizer parameter 15852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 15862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 15872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pVirtualizer - handle to instance data 15882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pParam - pointer to parameter 15892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pValue - pointer to variable to hold retrieved value 15902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pValueSize - pointer to value size: maximum size as input 15912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 15922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 15932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// *pValue updated with parameter value 15942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// *pValueSize updated with actual value size 15952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 15962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 15972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Side Effects: 15982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 15992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 16002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 16012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint Virtualizer_getParameter(EffectContext *pContext, 16022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t *pParam, 16032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent size_t *pValueSize, 16042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent void *pValue){ 16052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int status = 0; 16062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t param = *pParam++; 16072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t param2; 16082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent char *name; 16092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 16102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizer_getParameter start"); 16112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 16122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent switch (param){ 16132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VIRTUALIZER_PARAM_STRENGTH_SUP: 16142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent //if (*pValueSize != sizeof(uint32_t)){ 16152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // LOGV("\tLVM_ERROR : Virtualizer_getParameter() invalid pValueSize1 %d", *pValueSize); 16162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // return -EINVAL; 16172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent //} 16182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent //*pValueSize = sizeof(uint32_t); 16192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent //break; 16202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VIRTUALIZER_PARAM_STRENGTH: 16212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (*pValueSize != sizeof(int16_t)){ 16222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Virtualizer_getParameter() invalid pValueSize2 %d", *pValueSize); 16232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 16242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 16252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pValueSize = sizeof(int16_t); 16262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 16272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 16282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent default: 16292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Virtualizer_getParameter() invalid param %d", param); 16302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 16312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 16322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 16332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent switch (param){ 16342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VIRTUALIZER_PARAM_STRENGTH_SUP: 16352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(uint32_t *)pValue = 1; 16362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 16372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizer_getParameter() VIRTUALIZER_PARAM_STRENGTH_SUP Value is %d", 16382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(uint32_t *)pValue); 16392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 16402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 16412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VIRTUALIZER_PARAM_STRENGTH: 16422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)pValue = VirtualizerGetStrength(pContext); 16432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 16442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizer_getParameter() VIRTUALIZER_PARAM_STRENGTH Value is %d", 16452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)pValue); 16462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 16472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 16482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent default: 16492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Virtualizer_getParameter() invalid param %d", param); 16502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent status = -EINVAL; 16512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 16522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 16532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 16542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizer_getParameter end"); 16552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return status; 16562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end Virtualizer_getParameter */ 16572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 16582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 16592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 16602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Virtualizer_setParameter() 16612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 16622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 16632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Set a Virtualizer parameter 16642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 16652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 16662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pVirtualizer - handle to instance data 16672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pParam - pointer to parameter 16682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pValue - pointer to value 16692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 16702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 16712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 16722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 16732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 16742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint Virtualizer_setParameter (EffectContext *pContext, int32_t *pParam, void *pValue){ 16752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int status = 0; 16762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int16_t strength; 16772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 16782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizer_setParameter start"); 16792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 16802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent switch (*pParam){ 16812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VIRTUALIZER_PARAM_STRENGTH: 16822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent strength = *(int16_t *)pValue; 16832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizer_setParameter() VIRTUALIZER_PARAM_STRENGTH value is %d", strength); 16842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizer_setParameter() Calling pVirtualizer->setStrength"); 16852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent VirtualizerSetStrength(pContext, (int32_t)strength); 16862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizer_setParameter() Called pVirtualizer->setStrength"); 16872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 16882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent default: 16892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Virtualizer_setParameter() invalid param %d", *pParam); 16902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 16912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 16922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 16932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizer_setParameter end"); 16942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return status; 16952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end Virtualizer_setParameter */ 16962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 16972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 16982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Equalizer_getParameter() 16992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 17002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 17012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Get a Equalizer parameter 17022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 17032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 17042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pEqualizer - handle to instance data 17052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pParam - pointer to parameter 17062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pValue - pointer to variable to hold retrieved value 17072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pValueSize - pointer to value size: maximum size as input 17082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 17092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 17102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// *pValue updated with parameter value 17112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// *pValueSize updated with actual value size 17122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 17132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 17142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Side Effects: 17152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 17162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 17172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint Equalizer_getParameter(EffectContext *pContext, 17182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t *pParam, 17192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent size_t *pValueSize, 17202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent void *pValue){ 17212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int status = 0; 17222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int bMute = 0; 17232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t param = *pParam++; 17242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t param2; 17252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent char *name; 17262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 17272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_getParameter start"); 17282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 17292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent switch (param) { 17302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_NUM_BANDS: 17312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_CUR_PRESET: 17322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_GET_NUM_OF_PRESETS: 17332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (*pValueSize < sizeof(int16_t)) { 17342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Equalizer_getParameter() invalid pValueSize 1 %d", *pValueSize); 17352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 17362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 17372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pValueSize = sizeof(int16_t); 17382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 17392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 17402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_LEVEL_RANGE: 17412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_BAND_FREQ_RANGE: 17422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (*pValueSize < 2 * sizeof(int32_t)) { 17432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Equalizer_getParameter() invalid pValueSize 2 %d", *pValueSize); 17442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 17452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 17462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pValueSize = 2 * sizeof(int32_t); 17472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 17482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_BAND_LEVEL: 17492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_GET_BAND: 17502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_CENTER_FREQ: 17512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (*pValueSize < sizeof(int32_t)) { 17522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Equalizer_getParameter() invalid pValueSize 1 %d", *pValueSize); 17532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 17542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 17552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pValueSize = sizeof(int32_t); 17562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 17572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 17582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_GET_PRESET_NAME: 17592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 17602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 17612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent default: 17622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Equalizer_getParameter unknown param %d", param); 17632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 17642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 17652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 17662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent switch (param) { 17672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_NUM_BANDS: 17682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)pValue = FIVEBAND_NUMBANDS; 17692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_getParameter() EQ_PARAM_NUM_BANDS %d", *(int16_t *)pValue); 17702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 17712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 17722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_LEVEL_RANGE: 17732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int32_t *)pValue = -1500; 17742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *((int32_t *)pValue + 1) = 1500; 17752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_getParameter() EQ_PARAM_LEVEL_RANGE min %d, max %d", *(int32_t *)pValue, *((int32_t *)pValue + 1)); 17762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 17772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 17782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_BAND_LEVEL: 17792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent param2 = *pParam; 17802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (param2 >= FIVEBAND_NUMBANDS) { 17812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent status = -EINVAL; 17822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 17832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 17842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int32_t *)pValue = EqualizerGetBandLevel(pContext, param2); 17852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_getParameter() EQ_PARAM_BAND_LEVEL band %d, level %d", param2, *(int32_t *)pValue); 17862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 17872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 17882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_CENTER_FREQ: 17892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent param2 = *pParam; 17902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (param2 >= FIVEBAND_NUMBANDS) { 17912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent status = -EINVAL; 17922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 17932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 17942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int32_t *)pValue = EqualizerGetCentreFrequency(pContext, param2); 17952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_getParameter() EQ_PARAM_CENTER_FREQ band %d, frequency %d", param2, *(int32_t *)pValue); 17962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 17972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 17982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_BAND_FREQ_RANGE: 17992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent param2 = *pParam; 18002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (param2 >= FIVEBAND_NUMBANDS) { 18012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent status = -EINVAL; 18022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 18032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 18042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EqualizerGetBandFreqRange(pContext, param2, (uint32_t *)pValue, ((uint32_t *)pValue + 1)); 18052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_getParameter() EQ_PARAM_BAND_FREQ_RANGE band %d, min %d, max %d", param2, *(int32_t *)pValue, *((int32_t *)pValue + 1)); 18062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 18072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 18082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_GET_BAND: 18092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent param2 = *pParam; 18102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int32_t *)pValue = EqualizerGetBand(pContext, param2); 18112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_getParameter() EQ_PARAM_GET_BAND frequency %d, band %d", param2, *(int32_t *)pValue); 18122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 18132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 18142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_CUR_PRESET: 18152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)pValue = EqualizerGetPreset(pContext); 18162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_getParameter() EQ_PARAM_CUR_PRESET %d", *(int32_t *)pValue); 18172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 18182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 18192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_GET_NUM_OF_PRESETS: 18202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)pValue = EqualizerGetNumPresets(); 18212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_getParameter() EQ_PARAM_GET_NUM_OF_PRESETS %d", *(int16_t *)pValue); 18222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 18232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 18242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_GET_PRESET_NAME: 18252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent param2 = *pParam; 18262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (param2 >= EqualizerGetNumPresets()) { 18272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent //if (param2 >= 20) { // AGO FIX 18282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent status = -EINVAL; 18292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 18302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 18312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent name = (char *)pValue; 18322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent strncpy(name, EqualizerGetPresetName(param2), *pValueSize - 1); 18332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent name[*pValueSize - 1] = 0; 18342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pValueSize = strlen(name) + 1; 18352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_getParameter() EQ_PARAM_GET_PRESET_NAME preset %d, name %s len %d", param2, gEqualizerPresets[param2].name, *pValueSize); 18362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 18372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 18382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent default: 18392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Equalizer_getParameter() invalid param %d", param); 18402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent status = -EINVAL; 18412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 18422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 18432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 18442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_getParameter end"); 18452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return status; 18462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end Equalizer_getParameter */ 18472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 18482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 18492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Equalizer_setParameter() 18502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 18512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 18522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Set a Equalizer parameter 18532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 18542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 18552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pEqualizer - handle to instance data 18562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pParam - pointer to parameter 18572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pValue - pointer to value 18582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 18592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 18602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 18612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 18622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint Equalizer_setParameter (EffectContext *pContext, int32_t *pParam, void *pValue){ 18632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int status = 0; 18642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t preset; 18652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t band; 18662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t level; 18672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t param = *pParam++; 18682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 18692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_setParameter start"); 18702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent switch (param) { 18712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_CUR_PRESET: 18722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent preset = *(int16_t *)pValue; 18732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 18742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_setParameter() EQ_PARAM_CUR_PRESET %d", preset); 18752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((preset >= EqualizerGetNumPresets())||(preset < 0)) { 18762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent status = -EINVAL; 18772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 18782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 18792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EqualizerSetPreset(pContext, preset); 18802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 18812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EQ_PARAM_BAND_LEVEL: 18822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent band = *pParam; 18832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent level = *(int32_t *)pValue; 18842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_setParameter() EQ_PARAM_BAND_LEVEL band %d, level %d", band, level); 18852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (band >= FIVEBAND_NUMBANDS) { 18862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent status = -EINVAL; 18872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 18882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 18892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EqualizerSetBandLevel(pContext, band, level); 18902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 18912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent default: 18922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : setParameter() invalid param %d", param); 18932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 18942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 18952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 18962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_setParameter end"); 18972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return status; 18982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end Equalizer_setParameter */ 18992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 19002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 19012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Volume_getParameter() 19022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 19032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 19042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Get a Volume parameter 19052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 19062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 19072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pVolume - handle to instance data 19082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pParam - pointer to parameter 19092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pValue - pointer to variable to hold retrieved value 19102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pValueSize - pointer to value size: maximum size as input 19112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 19122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 19132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// *pValue updated with parameter value 19142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// *pValueSize updated with actual value size 19152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 19162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 19172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Side Effects: 19182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 19192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 19202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 19212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint Volume_getParameter(EffectContext *pContext, 19222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t *pParam, 19232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent size_t *pValueSize, 19242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent void *pValue){ 19252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int status = 0; 19262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int bMute = 0; 19272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t param = *pParam++; 19282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int32_t param2; 19292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent char *name; 19302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 19312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_getParameter start"); 19322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 19332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent switch (param){ 19342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VOLUME_PARAM_LEVEL: 19352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VOLUME_PARAM_MAXLEVEL: 19362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VOLUME_PARAM_STEREOPOSITION: 19372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (*pValueSize < sizeof(int16_t)){ 19382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Volume_getParameter() invalid pValueSize 1 %d", *pValueSize); 19392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 19402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 19412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pValueSize = sizeof(int16_t); 19422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 19432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 19442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VOLUME_PARAM_MUTE: 19452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VOLUME_PARAM_ENABLESTEREOPOSITION: 19462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (*pValueSize < sizeof(int32_t)){ 19472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Volume_getParameter() invalid pValueSize 2 %d", *pValueSize); 19482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 19492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 19502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pValueSize = sizeof(int32_t); 19512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 19522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 19532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent default: 19542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : EVolume_getParameter unknown param %d", param); 19552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 19562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 19572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 19582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent switch (param){ 19592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VOLUME_PARAM_LEVEL: 19602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent status = VolumeGetVolumeLevel(pContext, (int16_t *)(pValue)); 19612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_getParameter() VOLUME_PARAM_LEVEL Value is %d", 19622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)pValue); 19632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 19642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 19652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VOLUME_PARAM_MAXLEVEL: 19662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)pValue = 0; 19672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_getParameter() VOLUME_PARAM_MAXLEVEL Value is %d", 19682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)pValue); 19692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 19702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 19712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VOLUME_PARAM_STEREOPOSITION: 19722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)pValue = 0; 19732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_getParameter() VOLUME_PARAM_STEREOPOSITION Value is %d", 19742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)pValue); 19752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 19762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 19772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VOLUME_PARAM_MUTE: 19782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent status = VolumeGetMute(pContext, (uint32_t *)pValue); 19792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_getParameter() VOLUME_PARAM_MUTE Value is %d", 19802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(uint32_t *)pValue); 19812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 19822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 19832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VOLUME_PARAM_ENABLESTEREOPOSITION: 19842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int32_t *)pValue = 0; 19852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_getParameter() VOLUME_PARAM_ENABLESTEREOPOSITION Value is %d", 19862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(uint32_t *)pValue); 19872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 19882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 19892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent default: 19902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Volume_getParameter() invalid param %d", param); 19912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent status = -EINVAL; 19922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 19932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 19942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 19952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_getParameter end"); 19962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return status; 19972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end Volume_getParameter */ 19982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 19992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 20012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Volume_setParameter() 20022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 20032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Purpose: 20042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Set a Volume parameter 20052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 20062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Inputs: 20072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pVolume - handle to instance data 20082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pParam - pointer to parameter 20092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// pValue - pointer to value 20102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 20112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Outputs: 20122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// 20132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent//---------------------------------------------------------------------------- 20142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentint Volume_setParameter (EffectContext *pContext, int32_t *pParam, void *pValue){ 20162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int status = 0; 20172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int16_t level; 20182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent uint32_t mute; 20192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_setParameter start"); 20212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent switch (*pParam){ 20232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VOLUME_PARAM_LEVEL: 20242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent level = *(int16_t *)pValue; 20252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_setParameter() VOLUME_PARAM_LEVEL value is %d", level); 20262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_setParameter() Calling pVolume->setVolumeLevel"); 20272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent status = VolumeSetVolumeLevel(pContext, (int16_t)level); 20282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_setParameter() Called pVolume->setVolumeLevel"); 20292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 20302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VOLUME_PARAM_MUTE: 20322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent mute = *(uint32_t *)pValue; 20332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_setParameter() Calling pVolume->setMute, mute is %d", mute); 20342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_setParameter() Calling pVolume->setMute"); 20352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent status = VolumeSetMute(pContext, mute); 20362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_setParameter() Called pVolume->setMute"); 20372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 20382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VOLUME_PARAM_ENABLESTEREOPOSITION: 20402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_setParameter() VOLUME_PARAM_ENABLESTEREOPOSITION called"); 20412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 20422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case VOLUME_PARAM_STEREOPOSITION: 20442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_setParameter() VOLUME_PARAM_STEREOPOSITION called"); 20452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 20462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent default: 20482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Volume_setParameter() invalid param %d", *pParam); 20492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 20502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 20512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_setParameter end"); 20532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return status; 20542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end Volume_setParameter */ 20552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} // namespace 20562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} // namespace 20572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Effect Control Interface Implementation: Process */ 20792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentextern "C" int Effect_process(effect_interface_t self, 20802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent audio_buffer_t *inBuffer, 20812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent audio_buffer_t *outBuffer){ 20822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EffectContext * pContext = (EffectContext *) self; 20832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int status = 0; 20842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent //LOGV("\tIn Effect_process"); 20862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pContext == NULL){ 20882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Effect_process() ERROR pContext == NULL"); 20892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 20902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 20912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (inBuffer == NULL || inBuffer->raw == NULL || 20922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent outBuffer == NULL || outBuffer->raw == NULL || 20932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent inBuffer->frameCount != outBuffer->frameCount){ 20942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Effect_process() ERROR NULL INPUT POINTER OR FRAME COUNT IS WRONG"); 20952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 20962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 20972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 20982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((pContext->pBundledContext->bBassEnabled == LVM_FALSE)&&(pContext->EffectType == LVM_BASS_BOOST)){ 20992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Effect_process() ERROR LVM_BASS_BOOST Effect is not enabled"); 21002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -ENODATA; 21012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 21022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((pContext->pBundledContext->bVolumeEnabled == LVM_FALSE)&&(pContext->EffectType == LVM_VOLUME)){ 21032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Effect_process() ERROR LVM_VOLUME Effect is not enabled"); 21042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -ENODATA; 21052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 21062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((pContext->pBundledContext->bEqualizerEnabled == LVM_FALSE)&&(pContext->EffectType == LVM_EQUALIZER)){ 21072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Effect_process() ERROR LVM_EQUALIZER Effect is not enabled"); 21082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -ENODATA; 21092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 21102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((pContext->pBundledContext->bVirtualizerEnabled == LVM_FALSE)&&(pContext->EffectType == LVM_VIRTUALIZER)){ 21112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Effect_process() ERROR LVM_VIRTUALIZER Effect is not enabled"); 21122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -ENODATA; 21132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 21142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 21152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->NumberEffectsCalled++; 21162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 21172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->pBundledContext->NumberEffectsCalled == pContext->pBundledContext->NumberEffectsEnabled){ 21182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_process() Calling process with %d frames, %d effects enabled, %d called: Effect %d", outBuffer->frameCount, pContext->pBundledContext->NumberEffectsEnabled, pContext->pBundledContext->NumberEffectsCalled, pContext->EffectType); 21192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->NumberEffectsCalled = 0; 21202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Process all the available frames, block processing is handled internalLY by the LVM bundle */ 21212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent status = android::LvmBundle_process( (LVM_INT16 *)inBuffer->raw, 21222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_INT16 *)outBuffer->raw, 21232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent outBuffer->frameCount, 21242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext); 21252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent //LOGV("\tEffect_process() Called process with %d frames, %d effects enabled, %d called: Effect %d", outBuffer->frameCount, pContext->pBundledContext->NumberEffectsEnabled, pContext->pBundledContext->NumberEffectsCalled, pContext->EffectType); 21262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent }else{ 21272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_process() Not Calling process with %d frames, %d effects enabled, %d called: Effect %d", outBuffer->frameCount, pContext->pBundledContext->NumberEffectsEnabled, pContext->pBundledContext->NumberEffectsCalled, pContext->EffectType); 21282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent memcpy(outBuffer->raw, inBuffer->raw, outBuffer->frameCount*sizeof(LVM_INT16)*2); // 2 is for stereo input 21292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 21302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return status; 21312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end Effect_process */ 21322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 21332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Effect Control Interface Implementation: Command */ 21342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentextern "C" int Effect_command(effect_interface_t self, 21352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int cmdCode, 21362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int cmdSize, 21372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent void *pCmdData, 21382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int *replySize, 21392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent void *pReplyData){ 21402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EffectContext * pContext = (EffectContext *) self; 21412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int retsize; 21422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int status = 0; 21432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 21442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\t\nEffect_command start"); 21452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 21462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_BASS_BOOST){ 21472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command setting command for LVM_BASS_BOOST"); 21482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 21492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_VIRTUALIZER){ 21502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command setting command for LVM_VIRTUALIZER"); 21512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 21522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_EQUALIZER){ 21532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command setting command for LVM_EQUALIZER"); 21542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 21552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_VOLUME){ 21562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command setting command for LVM_VOLUME"); 21572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 21582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 21592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pContext == NULL){ 21602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Effect_command ERROR pContext == NULL"); 21612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 21622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 21632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 21642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command INPUTS are: command %d cmdSize %d",cmdCode, cmdSize); 21652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 21662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Incase we disable an effect, next time process is called the number of effect called could be greater 21672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->NumberEffectsCalled = 0; 21682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 21692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command NumberEffectsCalled = %d, NumberEffectsEnabled = %d", pContext->pBundledContext->NumberEffectsCalled, pContext->pBundledContext->NumberEffectsEnabled); 21702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 21712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent switch (cmdCode){ 21722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EFFECT_CMD_INIT: 21732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_INIT start"); 21742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_BASS_BOOST){ 21752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_INIT for LVM_BASS_BOOST"); 21762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 21772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pReplyData == NULL || *replySize != sizeof(int)){ 21782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : BassBoost_command cmdCode Case: " 21792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_INIT: ERROR"); 21802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 21812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 21822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 21832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent android::BassSetStrength(pContext, 0); 21842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 21852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_VIRTUALIZER){ 21862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_INIT for LVM_VIRTUALIZER"); 21872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 21882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pReplyData == NULL || *replySize != sizeof(int)){ 21892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Virtualizer_command cmdCode Case: " 21902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_INIT: ERROR"); 21912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 21922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 21932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 21942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent android::VirtualizerSetStrength(pContext, 0); 21952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 21962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_EQUALIZER){ 21972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_INIT for LVM_EQUALIZER"); 21982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 21992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pReplyData == NULL || *replySize != sizeof(int)){ 22002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Equalizer_command cmdCode Case: " 22012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_INIT: ERROR"); 22022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 22032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 22042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent android::EqualizerSetPreset(pContext, 0); 22062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 22072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_VOLUME){ 22082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: " 22092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_INIT start"); 22102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pReplyData == NULL || *replySize != sizeof(int)){ 22122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Volume_command cmdCode Case: " 22132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_INIT: ERROR"); 22142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 22152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 22162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent status = android::VolumeSetVolumeLevel(pContext, 0); 22182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(status == -EINVAL){ 22192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 22202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 22212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 22222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 22232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EFFECT_CMD_CONFIGURE: 22252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_CONFIGURE start"); 22262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pCmdData == NULL|| 22272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent cmdSize != sizeof(effect_config_t)|| 22282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pReplyData == NULL|| 22292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *replySize != sizeof(int)){ 22302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Effect_command cmdCode Case: " 22312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_CONFIGURE: ERROR"); 22322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 22332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 22342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int *) pReplyData = android::Effect_configure(pContext, (effect_config_t *) pCmdData); 22352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_CONFIGURE end"); 22362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 22372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EFFECT_CMD_RESET: 22392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_RESET start"); 22402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent android::Effect_configure(pContext, &pContext->config); 22412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_RESET end"); 22422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 22432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EFFECT_CMD_GET_PARAM:{ 22452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_GET_PARAM start"); 22462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_BASS_BOOST){ 22482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pCmdData == NULL || cmdSize < (int)(sizeof(effect_param_t) + sizeof(int32_t)) || 22492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pReplyData == NULL ||*replySize < (int) (sizeof(effect_param_t) + sizeof(int32_t))){ 22502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : BassBoost_command cmdCode Case: " 22512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_GET_PARAM: ERROR"); 22522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 22532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 22542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent effect_param_t *p = (effect_param_t *)pCmdData; 22552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent memcpy(pReplyData, pCmdData, sizeof(effect_param_t) + p->psize); 22572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent p = (effect_param_t *)pReplyData; 22592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int voffset = ((p->psize - 1) / sizeof(int32_t) + 1) * sizeof(int32_t); 22612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent p->status = android::BassBoost_getParameter(pContext, 22632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (int32_t *)p->data, 22642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (size_t *)&p->vsize, 22652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent p->data + voffset); 22662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *replySize = sizeof(effect_param_t) + voffset + p->vsize; 22682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tBassBoost_command EFFECT_CMD_GET_PARAM " 22702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "*pCmdData %d, *replySize %d, *pReplyData %d ", 22712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int32_t *)((char *)pCmdData + sizeof(effect_param_t)), 22722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *replySize, 22732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)((char *)pReplyData + sizeof(effect_param_t) + voffset)); 22742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 22752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_VIRTUALIZER){ 22772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pCmdData == NULL || cmdSize < (int)(sizeof(effect_param_t) + sizeof(int32_t)) || 22782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pReplyData == NULL ||*replySize < (int) (sizeof(effect_param_t) + sizeof(int32_t))){ 22792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Virtualizer_command cmdCode Case: " 22802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_GET_PARAM: ERROR"); 22812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 22822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 22832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent effect_param_t *p = (effect_param_t *)pCmdData; 22842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent memcpy(pReplyData, pCmdData, sizeof(effect_param_t) + p->psize); 22862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent p = (effect_param_t *)pReplyData; 22882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int voffset = ((p->psize - 1) / sizeof(int32_t) + 1) * sizeof(int32_t); 22902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent p->status = android::Virtualizer_getParameter(pContext, 22922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (int32_t *)p->data, 22932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (size_t *)&p->vsize, 22942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent p->data + voffset); 22952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *replySize = sizeof(effect_param_t) + voffset + p->vsize; 22972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 22982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizer_command EFFECT_CMD_GET_PARAM " 22992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "*pCmdData %d, *replySize %d, *pReplyData %d ", 23002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int32_t *)((char *)pCmdData + sizeof(effect_param_t)), 23012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *replySize, 23022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)((char *)pReplyData + sizeof(effect_param_t) + voffset)); 23032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 23042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_EQUALIZER){ 23052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_command cmdCode Case: " 23062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_GET_PARAM start"); 23072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pCmdData == NULL || cmdSize < (int)(sizeof(effect_param_t) + sizeof(int32_t)) || 23082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pReplyData == NULL || *replySize < (int) (sizeof(effect_param_t) + sizeof(int32_t))) { 23092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Equalizer_command cmdCode Case: " 23102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_GET_PARAM"); 23112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 23122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 23132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent effect_param_t *p = (effect_param_t *)pCmdData; 23142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 23152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent memcpy(pReplyData, pCmdData, sizeof(effect_param_t) + p->psize); 23162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 23172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent p = (effect_param_t *)pReplyData; 23182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 23192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int voffset = ((p->psize - 1) / sizeof(int32_t) + 1) * sizeof(int32_t); 23202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 23212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent p->status = android::Equalizer_getParameter(pContext, (int32_t *)p->data, &p->vsize, 23222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent p->data + voffset); 23232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 23242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *replySize = sizeof(effect_param_t) + voffset + p->vsize; 23252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 23262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_command EFFECT_CMD_GET_PARAM *pCmdData %d, *replySize %d, *pReplyData %08x %08x", 23272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int32_t *)((char *)pCmdData + sizeof(effect_param_t)), *replySize, 23282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int32_t *)((char *)pReplyData + sizeof(effect_param_t) + voffset), 23292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int32_t *)((char *)pReplyData + sizeof(effect_param_t) + voffset + sizeof(int32_t))); 23302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 23312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_VOLUME){ 23322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_command cmdCode Case: " 23332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_GET_PARAM start"); 23342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pCmdData == NULL || cmdSize < (int)(sizeof(effect_param_t) + sizeof(int32_t)) || 23352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pReplyData == NULL ||*replySize < (int) (sizeof(effect_param_t) + sizeof(int32_t))){ 23362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Volume_command cmdCode Case: " 23372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_GET_PARAM: ERROR"); 23382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 23392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 23402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent effect_param_t *p = (effect_param_t *)pCmdData; 23412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 23422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent memcpy(pReplyData, pCmdData, sizeof(effect_param_t) + p->psize); 23432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 23442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent p = (effect_param_t *)pReplyData; 23452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 23462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int voffset = ((p->psize - 1) / sizeof(int32_t) + 1) * sizeof(int32_t); 23472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 23482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent p->status = android::Volume_getParameter(pContext, 23492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (int32_t *)p->data, 23502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (size_t *)&p->vsize, 23512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent p->data + voffset); 23522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 23532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *replySize = sizeof(effect_param_t) + voffset + p->vsize; 23542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 23552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_command EFFECT_CMD_GET_PARAM " 23562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "*pCmdData %d, *replySize %d, *pReplyData %d ", 23572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int32_t *)((char *)pCmdData + sizeof(effect_param_t)), 23582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *replySize, 23592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)((char *)pReplyData + sizeof(effect_param_t) + voffset)); 23602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 23612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_GET_PARAM end"); 23622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } break; 23632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EFFECT_CMD_SET_PARAM:{ 23642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_SET_PARAM start"); 23652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_BASS_BOOST){ 23662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tBassBoost_command EFFECT_CMD_SET_PARAM param %d, *replySize %d, value %d ", 23672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int32_t *)((char *)pCmdData + sizeof(effect_param_t)), 23682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *replySize, 23692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)((char *)pCmdData + sizeof(effect_param_t) + sizeof(int32_t))); 23702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 23712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ( pCmdData == NULL|| 23722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent cmdSize != (int)(sizeof(effect_param_t) + sizeof(int32_t) + sizeof(int16_t))|| 23732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pReplyData == NULL|| 23742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *replySize != sizeof(int32_t)){ 23752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : BassBoost_command cmdCode Case: " 23762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_SET_PARAM: ERROR"); 23772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 23782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 23792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent effect_param_t *p = (effect_param_t *) pCmdData; 23802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 23812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (p->psize != sizeof(int32_t)){ 23822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : BassBoost_command cmdCode Case: " 23832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_SET_PARAM: ERROR, psize is not sizeof(int32_t)"); 23842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 23852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 23862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 23872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tnBassBoost_command cmdSize is %d\n" 23882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "\tsizeof(effect_param_t) is %d\n" 23892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "\tp->psize is %d\n" 23902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "\tp->vsize is %d" 23912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "\n", 23922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent cmdSize, sizeof(effect_param_t), p->psize, p->vsize ); 23932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 23942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int *)pReplyData = android::BassBoost_setParameter(pContext, 23952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (int32_t *)p->data, 23962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent p->data + p->psize); 23972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 23982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_VIRTUALIZER){ 23992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVirtualizer_command EFFECT_CMD_SET_PARAM param %d, *replySize %d, value %d ", 24002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int32_t *)((char *)pCmdData + sizeof(effect_param_t)), 24012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *replySize, 24022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)((char *)pCmdData + sizeof(effect_param_t) + sizeof(int32_t))); 24032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 24042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ( pCmdData == NULL|| 24052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent cmdSize != (int)(sizeof(effect_param_t) + sizeof(int32_t) + sizeof(int16_t))|| 24062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pReplyData == NULL|| 24072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *replySize != sizeof(int32_t)){ 24082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Virtualizer_command cmdCode Case: " 24092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_SET_PARAM: ERROR"); 24102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 24112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 24122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent effect_param_t *p = (effect_param_t *) pCmdData; 24132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 24142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (p->psize != sizeof(int32_t)){ 24152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Virtualizer_command cmdCode Case: " 24162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_SET_PARAM: ERROR, psize is not sizeof(int32_t)"); 24172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 24182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 24192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 24202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tnVirtualizer_command cmdSize is %d\n" 24212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "\tsizeof(effect_param_t) is %d\n" 24222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "\tp->psize is %d\n" 24232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "\tp->vsize is %d" 24242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "\n", 24252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent cmdSize, sizeof(effect_param_t), p->psize, p->vsize ); 24262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 24272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int *)pReplyData = android::Virtualizer_setParameter(pContext, 24282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (int32_t *)p->data, 24292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent p->data + p->psize); 24302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 24312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_EQUALIZER){ 24322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_command cmdCode Case: " 24332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_SET_PARAM start"); 24342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEqualizer_command EFFECT_CMD_SET_PARAM param %d, *replySize %d, value %d ", 24352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int32_t *)((char *)pCmdData + sizeof(effect_param_t)), 24362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *replySize, 24372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)((char *)pCmdData + sizeof(effect_param_t) + sizeof(int32_t))); 24382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 24392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pCmdData == NULL || cmdSize < (int)(sizeof(effect_param_t) + sizeof(int32_t)) || 24402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pReplyData == NULL || *replySize != sizeof(int32_t)) { 24412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Equalizer_command cmdCode Case: " 24422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_SET_PARAM: ERROR"); 24432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 24442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 24452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent effect_param_t *p = (effect_param_t *) pCmdData; 24462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 24472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int *)pReplyData = android::Equalizer_setParameter(pContext, 24482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (int32_t *)p->data, 24492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent p->data + p->psize); 24502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 24512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->EffectType == LVM_VOLUME){ 24522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_command cmdCode Case: " 24532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_SET_PARAM start"); 24542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tVolume_command EFFECT_CMD_SET_PARAM param %d, *replySize %d, value %d ", 24552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int32_t *)((char *)pCmdData + sizeof(effect_param_t)), 24562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *replySize, 24572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int16_t *)((char *)pCmdData + sizeof(effect_param_t) + sizeof(int32_t))); 24582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 24592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ( pCmdData == NULL|| 24602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent cmdSize < (int)(sizeof(effect_param_t) + sizeof(int32_t))|| 24612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pReplyData == NULL|| 24622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *replySize != sizeof(int32_t)){ 24632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Volume_command cmdCode Case: " 24642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_SET_PARAM: ERROR"); 24652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 24662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 24672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent effect_param_t *p = (effect_param_t *) pCmdData; 24682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 24692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int *)pReplyData = android::Volume_setParameter(pContext, 24702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (int32_t *)p->data, 24712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent p->data + p->psize); 24722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 24732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_SET_PARAM end"); 24742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } break; 24752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 24762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EFFECT_CMD_ENABLE: 24772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_ENABLE start"); 24782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pReplyData == NULL || *replySize != sizeof(int)){ 24792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Effect_command cmdCode Case: EFFECT_CMD_ENABLE: ERROR"); 24802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 24812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 24822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent switch (pContext->EffectType){ 24832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case LVM_BASS_BOOST: 24842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->pBundledContext->bBassEnabled == LVM_TRUE){ 24852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : BassBoost_command cmdCode Case: " 24862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_ENABLE: ERROR-Effect is already enabled"); 24872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 24882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 24892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->bBassEnabled = LVM_TRUE; 24902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_ENABLE LVM_BASS_BOOST enabled"); 24912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 24922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case LVM_EQUALIZER: 24932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->pBundledContext->bEqualizerEnabled == LVM_TRUE){ 24942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Equalizer_command cmdCode Case: " 24952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_ENABLE: ERROR-Effect is already enabled"); 24962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 24972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 24982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->bEqualizerEnabled = LVM_TRUE; 24992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_ENABLE LVM_EQUALIZER enabled"); 25002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 25012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case LVM_VIRTUALIZER: 25022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->pBundledContext->bVirtualizerEnabled == LVM_TRUE){ 25032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Virtualizer_command cmdCode Case: " 25042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_ENABLE: ERROR-Effect is already enabled"); 25052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 25062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 25072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->bVirtualizerEnabled = LVM_TRUE; 25082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_ENABLE LVM_VIRTUALIZER enabled"); 25092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 25102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case LVM_VOLUME: 25112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->pBundledContext->bVolumeEnabled == LVM_TRUE){ 25122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Volume_command cmdCode Case: " 25132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_ENABLE: ERROR-Effect is already enabled"); 25142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 25152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 25162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->bVolumeEnabled = LVM_TRUE; 25172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_ENABLE LVM_VOLUME enabled"); 25182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 25192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent default: 25202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Effect_command cmdCode Case: " 25212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_ENABLE: ERROR, invalid Effect Type"); 25222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 25232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 25242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int *)pReplyData = 0; 25252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->NumberEffectsEnabled++; 25262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent android::LvmEffect_enable(pContext); 25272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_ENABLE NumberEffectsEnabled = %d", pContext->pBundledContext->NumberEffectsEnabled); 25282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_ENABLE end"); 25292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 25302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 25312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EFFECT_CMD_DISABLE: 25322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_DISABLE start"); 25332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pReplyData == NULL || *replySize != sizeof(int)){ 25342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Effect_command cmdCode Case: EFFECT_CMD_DISABLE: ERROR"); 25352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 25362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 25372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent switch (pContext->EffectType){ 25382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case LVM_BASS_BOOST: 25392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->pBundledContext->bBassEnabled == LVM_FALSE){ 25402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : BassBoost_command cmdCode Case: " 25412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_DISABLE: ERROR-Effect is not yet enabled"); 25422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 25432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 25442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->bBassEnabled = LVM_FALSE; 25452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_DISABLE LVM_BASS_BOOST disabled"); 25462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 25472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case LVM_EQUALIZER: 25482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->pBundledContext->bEqualizerEnabled == LVM_FALSE){ 25492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Equalizer_command cmdCode Case: " 25502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_DISABLE: ERROR-Effect is not yet enabled"); 25512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 25522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 25532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->bEqualizerEnabled = LVM_FALSE; 25542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_DISABLE LVM_EQUALIZER disabled"); 25552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 25562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case LVM_VIRTUALIZER: 25572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->pBundledContext->bVirtualizerEnabled == LVM_FALSE){ 25582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Virtualizer_command cmdCode Case: " 25592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_DISABLE: ERROR-Effect is not yet enabled"); 25602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 25612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 25622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->bVirtualizerEnabled = LVM_FALSE; 25632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_DISABLE LVM_VIRTUALIZER disabled"); 25642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 25652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case LVM_VOLUME: 25662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pContext->pBundledContext->bVolumeEnabled == LVM_FALSE){ 25672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Volume_command cmdCode Case: " 25682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_DISABLE: ERROR-Effect is not yet enabled"); 25692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 25702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 25712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->bVolumeEnabled = LVM_FALSE; 25722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_DISABLE LVM_VOLUME disabled"); 25732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 25742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 25752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent default: 25762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Effect_command cmdCode Case: " 25772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_DISABLE: ERROR, invalid Effect Type"); 25782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 25792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 25802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *(int *)pReplyData = 0; 25812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pContext->pBundledContext->NumberEffectsEnabled--; 25822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent android::LvmEffect_disable(pContext); 25832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_DISABLE NumberEffectsEnabled = %d", pContext->pBundledContext->NumberEffectsEnabled); 25842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: EFFECT_CMD_DISABLE end"); 25852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 25862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 25872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EFFECT_CMD_SET_DEVICE: 25882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case EFFECT_CMD_SET_VOLUME: 25892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// case EFFECT_CMD_SET_AUDIO_MODE:// AGO add this 25902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command cmdCode Case: " 25912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent "EFFECT_CMD_SET_DEVICE/EFFECT_CMD_SET_VOLUME/EFFECT_CMD_SET_AUDIO_MODE start"); 25922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 25932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 25942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent default: 25952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tLVM_ERROR : Effect_command cmdCode Case: DEFAULT start %d ERROR",cmdCode); 25962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return -EINVAL; 25972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 25982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 25992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LOGV("\tEffect_command end...\n\n"); 26002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 0; 26012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} /* end Effect_command */ 26022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 26032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// effect_interface_t interface implementation for effect 26042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentconst struct effect_interface_s gLvmEffectInterface = { 26052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Effect_process, 26062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Effect_command 26072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}; /* end gLvmEffectInterface */ 26082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 26092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2610