LVM_Control.c revision 09d5ca3766d4bab91cdaad7206716a5747ebad77
12c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 22c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copyright (C) 2004-2010 NXP Software 32c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copyright (C) 2010 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/**************************************************************************************** 192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent $Author: nxp007753 $ 2109d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent $Revision: 1316 $ 2209d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent $Date: 2010-07-23 11:53:24 +0200 (Fri, 23 Jul 2010) $ 232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent*****************************************************************************************/ 252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Includes */ 302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "VectorArithmetic.h" 342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "ScalarArithmetic.h" 352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVM_Coeffs.h" 362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVM_Tables.h" 372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVM_Private.h" 382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVM_SetControlParameters */ 422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Sets or changes the LifeVibes module parameters. */ 452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance handle */ 482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pParams Pointer to a parameter structure */ 492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_SUCCESS Succeeded */ 522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_NULLADDRESS When hInstance, pParams or any control pointers are NULL */ 532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_OUTOFRANGE When any of the control parameters are out of range */ 542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function may be interrupted by the LVM_Process function */ 572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 602c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVM_ReturnStatus_en LVM_SetControlParameters(LVM_Handle_t hInstance, 612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t *pParams) 622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Instance_t *pInstance =(LVM_Instance_t *)hInstance; 642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((pParams == LVM_NULL) || (hInstance == LVM_NULL)) 672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_NULLADDRESS); 692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->NewParams = *pParams; 722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if( 742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* General parameters */ 752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ((pParams->OperatingMode != LVM_MODE_OFF) && (pParams->OperatingMode != LVM_MODE_ON)) || 762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ((pParams->SampleRate != LVM_FS_8000) && (pParams->SampleRate != LVM_FS_11025) && (pParams->SampleRate != LVM_FS_12000) && 772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pParams->SampleRate != LVM_FS_16000) && (pParams->SampleRate != LVM_FS_22050) && (pParams->SampleRate != LVM_FS_24000) && 782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pParams->SampleRate != LVM_FS_32000) && (pParams->SampleRate != LVM_FS_44100) && (pParams->SampleRate != LVM_FS_48000)) || 792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ((pParams->SourceFormat != LVM_STEREO) && (pParams->SourceFormat != LVM_MONOINSTEREO) && (pParams->SourceFormat != LVM_MONO)) || 802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pParams->SpeakerType > LVM_EX_HEADPHONES)) 812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Cinema Sound parameters 872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((pParams->VirtualizerOperatingMode != LVM_MODE_OFF) && (pParams->VirtualizerOperatingMode != LVM_MODE_ON)) 892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pParams->VirtualizerType != LVM_CONCERTSOUND) 942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pParams->VirtualizerReverbLevel > LVM_VIRTUALIZER_MAX_REVERB_LEVEL) 992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 1012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pParams->CS_EffectLevel < LVM_CS_MIN_EFFECT_LEVEL) 1042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * N-Band Equalizer 1102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pParams->EQNB_NBands > pInstance->InstParams.EQNB_NumBands) 1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 1142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Definition pointer */ 1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((pParams->pEQNB_BandDefinition == LVM_NULL) && 1182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pParams->EQNB_NBands != 0)) 1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_NULLADDRESS); 1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copy the filter definitions for the Equaliser 1252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 i; 1282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pParams->EQNB_NBands != 0) 1302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for (i=0; i<pParams->EQNB_NBands; i++) 1322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pEQNB_BandDefs[i] = pParams->pEQNB_BandDefinition[i]; 1342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->NewParams.pEQNB_BandDefinition = pInstance->pEQNB_BandDefs; 1362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if( /* N-Band Equaliser parameters */ 1392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ((pParams->EQNB_OperatingMode != LVM_EQNB_OFF) && (pParams->EQNB_OperatingMode != LVM_EQNB_ON)) || 1402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pParams->EQNB_NBands > pInstance->InstParams.EQNB_NumBands)) 1412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 1432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Band parameters*/ 1452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 i; 1472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for(i = 0; i < pParams->EQNB_NBands; i++) 1482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(((pParams->pEQNB_BandDefinition[i].Frequency < LVM_EQNB_MIN_BAND_FREQ) || 1502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pParams->pEQNB_BandDefinition[i].Frequency > LVM_EQNB_MAX_BAND_FREQ)) || 1512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ((pParams->pEQNB_BandDefinition[i].Gain < LVM_EQNB_MIN_BAND_GAIN) || 1522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pParams->pEQNB_BandDefinition[i].Gain > LVM_EQNB_MAX_BAND_GAIN)) || 1532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ((pParams->pEQNB_BandDefinition[i].QFactor < LVM_EQNB_MIN_QFACTOR) || 1542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pParams->pEQNB_BandDefinition[i].QFactor > LVM_EQNB_MAX_QFACTOR))) 1552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 1572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Bass Enhancement parameters 1632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(((pParams->BE_OperatingMode != LVM_BE_OFF) && (pParams->BE_OperatingMode != LVM_BE_ON)) || 1652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ((pParams->BE_EffectLevel < LVM_BE_MIN_EFFECTLEVEL ) || (pParams->BE_EffectLevel > LVM_BE_MAX_EFFECTLEVEL ))|| 1662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ((pParams->BE_CentreFreq != LVM_BE_CENTRE_55Hz) && (pParams->BE_CentreFreq != LVM_BE_CENTRE_66Hz) && 1672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pParams->BE_CentreFreq != LVM_BE_CENTRE_78Hz) && (pParams->BE_CentreFreq != LVM_BE_CENTRE_90Hz)) || 1682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ((pParams->BE_HPF != LVM_BE_HPF_OFF) && (pParams->BE_HPF != LVM_BE_HPF_ON))) 1692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 1712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Volume Control parameters 1752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((pParams->VC_EffectLevel < LVM_VC_MIN_EFFECTLEVEL ) || (pParams->VC_EffectLevel > LVM_VC_MAX_EFFECTLEVEL )) 1772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 1792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((pParams->VC_Balance < LVM_VC_BALANCE_MIN ) || (pParams->VC_Balance > LVM_VC_BALANCE_MAX )) 1812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 1832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * PSA parameters 1872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if( (pParams->PSA_PeakDecayRate > LVPSA_SPEED_HIGH) || 1892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pParams->PSA_Enable > LVM_PSA_ON)) 1902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_OUTOFRANGE); 1922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the flag to indicate there are new parameters to use 1972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * 1982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Protect the copy of the new parameters from interrupts to avoid possible problems 1992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * with loss control parameters. This problem can occur if this control function is called more 2002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * than once before a call to the process function. If the process function interrupts 2012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * the copy to NewParams then one frame may have mixed parameters, some old and some new. 2022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->ControlPending = LVM_TRUE; 2042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->NoSmoothVolume = LVM_FALSE; 2052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVM_SUCCESS); 2072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 2082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 2112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVM_GetControlParameters */ 2132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 2152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Request the LifeVibes module parameters. The current parameter set is returned */ 2162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* via the parameter pointer. */ 2172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 2192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance handle */ 2202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pParams Pointer to an empty parameter structure */ 2212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 2232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_SUCCESS Succeeded */ 2242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_NULLADDRESS when any of hInstance or pParams is NULL */ 2252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 2272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function may be interrupted by the LVM_Process function */ 2282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 2302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2312c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVM_ReturnStatus_en LVM_GetControlParameters(LVM_Handle_t hInstance, 2322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t *pParams) 2332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 2342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Instance_t *pInstance =(LVM_Instance_t *)hInstance; 2352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Check pointer 2392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((pParams == LVM_NULL) || (hInstance == LVM_NULL)) 2412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 2422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_NULLADDRESS); 2432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pParams = pInstance->NewParams; 2452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copy the filter definitions for the Equaliser 2482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 2502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 i; 2512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pInstance->NewParams.EQNB_NBands != 0) 2532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for (i=0; i<pInstance->NewParams.EQNB_NBands; i++) 2542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 2552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pEQNB_UserDefs[i] = pInstance->pEQNB_BandDefs[i]; 2562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams->pEQNB_BandDefinition = pInstance->pEQNB_UserDefs; 2582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVM_SUCCESS); 2612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 2622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 2652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVM_SetTrebleBoost */ 2672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 2692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Enable the treble boost when the settings are appropriate, i.e. non-zero gain */ 2702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* and the sample rate is high enough for the effect to be heard. */ 2712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 2732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pInstance Pointer to the instance structure */ 2742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pParams Pointer to the parameters to use */ 2752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 2772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LVM_SetTrebleBoost(LVM_Instance_t *pInstance, 2782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t *pParams) 2792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 2802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent extern FO_C16_LShx_Coefs_t LVM_TrebleBoostCoefs[]; 2812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 Offset; 2822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 EffectLevel = 0; 2832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Load the coefficients 2862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((pParams->TE_OperatingMode == LVM_TE_ON) && 2882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pParams->SampleRate >= TrebleBoostMinRate) && 2892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pParams->OperatingMode == LVM_MODE_ON) && 2902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pParams->TE_EffectLevel > 0)) 2912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 2922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((pParams->TE_EffectLevel == LVM_TE_LOW_MIPS) && 2932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent ((pParams->SpeakerType == LVM_HEADPHONES)|| 2942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pParams->SpeakerType == LVM_EX_HEADPHONES))) 2952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 2962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->TE_Active = LVM_FALSE; 2972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 2992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 3002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EffectLevel = pParams->TE_EffectLevel; 3012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->TE_Active = LVM_TRUE; 3022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstance->TE_Active == LVM_TRUE) 3052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 3062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 3072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Load the coefficients and enabled the treble boost 3082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 3092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Offset = (LVM_INT16)(EffectLevel - 1 + TrebleBoostSteps * (pParams->SampleRate - TrebleBoostMinRate)); 3102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent FO_2I_D16F32Css_LShx_TRC_WRA_01_Init(&pInstance->pTE_State->TrebleBoost_State, 3112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &pInstance->pTE_Taps->TrebleBoost_Taps, 3122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &LVM_TrebleBoostCoefs[Offset]); 3132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 3152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Clear the taps 3162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 31709d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LoadConst_16((LVM_INT16)0, /* Value */ 31809d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent (void *)&pInstance->pTE_Taps->TrebleBoost_Taps, /* Destination.\ 31909d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent Cast to void: no dereferencing in function */ 3202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_UINT16)(sizeof(pInstance->pTE_Taps->TrebleBoost_Taps)/sizeof(LVM_INT16))); /* Number of words */ 3212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 3242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 3252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 3262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Disable the treble boost 3272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 3282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->TE_Active = LVM_FALSE; 3292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return; 3322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 3332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 3362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 3372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVM_SetVolume */ 3382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 3392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 3402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Converts the input volume demand from dBs to linear. */ 3412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 3422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 3432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pInstance Pointer to the instance */ 3442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pParams Initialisation parameters */ 3452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 3462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 3472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LVM_SetVolume(LVM_Instance_t *pInstance, 3482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t *pParams) 3492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 3502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_UINT16 dBShifts; /* 6dB shifts */ 3522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_UINT16 dBOffset; /* Table offset */ 3532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 Volume = 0; /* Required volume in dBs */ 3542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 3562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Limit the gain to the maximum allowed 3572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 3582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pParams->VC_EffectLevel > 0) 3592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 3602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Volume = 0; 3612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 3632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 3642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Volume = pParams->VC_EffectLevel; 3652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Compensate this volume in PSA plot */ 3682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(Volume > -60) /* Limit volume loss to PSA Limits*/ 3692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->PSA_GainOffset=(LVM_INT16)(-Volume);/* Loss is compensated by Gain*/ 3702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 3712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->PSA_GainOffset=(LVM_INT16)60;/* Loss is compensated by Gain*/ 3722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_AVLFixedVolume = 0; 3742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 3762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set volume control and AVL volumes according to headroom and volume user setting 3772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 3782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pParams->OperatingMode == LVM_MODE_ON) 3792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 3802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Default Situation with no AVL and no RS */ 3812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pParams->EQNB_OperatingMode == LVM_EQNB_ON) 3822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 3832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(Volume > -pInstance->Headroom) 3842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Volume = (LVM_INT16)-pInstance->Headroom; 3852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 3882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 3892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Activate volume control if necessary 3902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 3912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_Active = LVM_TRUE; 3922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (Volume != 0) 3932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 3942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_VolumedB = Volume; 3952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 3962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 3972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 3982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_VolumedB = 0; 3992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 4022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Calculate the required gain and shifts 4032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 4042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent dBOffset = (LVM_UINT16)((-Volume) % 6); /* Get the dBs 0-5 */ 4052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent dBShifts = (LVM_UINT16)(Volume / -6); /* Get the 6dB shifts */ 4062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 4092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the parameters 4102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 4112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(dBShifts == 0) 4122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_SetTarget(&pInstance->VC_Volume.MixerStream[0], 4142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_INT32)LVM_VolumeTable[dBOffset]); 4152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 4172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_SetTarget(&pInstance->VC_Volume.MixerStream[0], 4192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (((LVM_INT32)LVM_VolumeTable[dBOffset])>>dBShifts)); 4202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_Volume.MixerStream[0].CallbackSet = 1; 4222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstance->NoSmoothVolume == LVM_TRUE) 4232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_SetTimeConstant(&pInstance->VC_Volume.MixerStream[0],0,pInstance->Params.SampleRate,2); 4252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 4272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->VC_Volume.MixerStream[0],LVM_VC_MIXER_TIME,pInstance->Params.SampleRate,2); 4292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 4312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 4342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 4352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVM_SetHeadroom */ 4362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 4372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 4382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Find suitable headroom based on EQ settings. */ 4392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 4402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 4412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pInstance Pointer to the instance */ 4422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pParams Initialisation parameters */ 4432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 4442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 4452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* void Nothing */ 4462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 4472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 4482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 4492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 4502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LVM_SetHeadroom(LVM_Instance_t *pInstance, 4512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t *pParams) 4522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 4532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 ii, jj; 4542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 Headroom = 0; 4552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 MaxGain = 0; 4562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((pParams->EQNB_OperatingMode == LVEQNB_ON) && (pInstance->HeadroomParams.Headroom_OperatingMode == LVM_HEADROOM_ON)) 4592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Find typical headroom value */ 4612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for(jj = 0; jj < pInstance->HeadroomParams.NHeadroomBands; jj++) 4622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent MaxGain = 0; 4642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for( ii = 0; ii < pParams->EQNB_NBands; ii++) 4652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((pParams->pEQNB_BandDefinition[ii].Frequency >= pInstance->HeadroomParams.pHeadroomDefinition[jj].Limit_Low) && 4672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pParams->pEQNB_BandDefinition[ii].Frequency <= pInstance->HeadroomParams.pHeadroomDefinition[jj].Limit_High)) 4682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pParams->pEQNB_BandDefinition[ii].Gain > MaxGain) 4702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 4712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent MaxGain = pParams->pEQNB_BandDefinition[ii].Gain; 4722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((MaxGain - pInstance->HeadroomParams.pHeadroomDefinition[jj].Headroom_Offset) > Headroom){ 4772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Headroom = (LVM_INT16)(MaxGain - pInstance->HeadroomParams.pHeadroomDefinition[jj].Headroom_Offset); 4782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Saturate */ 4822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(Headroom < 0) 4832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Headroom = 0; 4842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 4852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Headroom = (LVM_UINT16)Headroom ; 4862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 4882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 4912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 4922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVM_ApplyNewSettings */ 4932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 4942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 4952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Applies changes to parametres. This function makes no assumptions about what */ 4962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* each module needs for initialisation and hence passes all parameters to all the */ 4972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* the modules in turn. */ 4982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 4992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 5002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 5012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance handle */ 5022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 5032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 5042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_Success Succeeded */ 5052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 5062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 5072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5082c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVM_ReturnStatus_en LVM_ApplyNewSettings(LVM_Handle_t hInstance) 5092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 5102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Instance_t *pInstance =(LVM_Instance_t *)hInstance; 5112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ControlParams_t LocalParams; 5122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 Count = 5; 5132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 5162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copy the new parameters but make sure they didn't change while copying 5172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 5182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent do 5192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 5202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->ControlPending = LVM_FALSE; 5212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LocalParams = pInstance->NewParams; 5222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->HeadroomParams = pInstance->NewHeadroomParams; 5232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Count--; 5242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } while ((pInstance->ControlPending != LVM_FALSE) && 5252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (Count > 0)); 5262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Clear all internal data if format change*/ 5282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LocalParams.SourceFormat != pInstance->Params.SourceFormat) 5292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 5302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ClearAudioBuffers(pInstance); 5312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->ControlPending = LVM_FALSE; 5322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 5332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 5352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Update the treble boost if required 5362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 5372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((pInstance->Params.SampleRate != LocalParams.SampleRate) || 5382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstance->Params.TE_EffectLevel != LocalParams.TE_EffectLevel) || 5392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstance->Params.TE_OperatingMode != LocalParams.TE_OperatingMode) || 5402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstance->Params.OperatingMode != LocalParams.OperatingMode) || 5412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstance->Params.SpeakerType != LocalParams.SpeakerType)) 5422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 5432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_SetTrebleBoost(pInstance, 5442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &LocalParams); 5452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 5462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 5482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Update the headroom if required 5492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 5502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_SetHeadroom(pInstance, /* Instance pointer */ 5512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &LocalParams); /* New parameters */ 5522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 5542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Update the volume if required 5552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 5562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 5572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_SetVolume(pInstance, /* Instance pointer */ 5582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &LocalParams); /* New parameters */ 5592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 5602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Apply balance changes*/ 5612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstance->Params.VC_Balance != LocalParams.VC_Balance) 5622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 5632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Configure Mixer module for gradual changes to volume*/ 5642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LocalParams.VC_Balance < 0) 5652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 5662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 Target; 5672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Drop in right channel volume*/ 5682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Target = LVM_MAXINT_16; 5692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_SetTarget(&pInstance->VC_BalanceMix.MixerStream[0],Target); 5702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->VC_BalanceMix.MixerStream[0],LVM_VC_MIXER_TIME,LocalParams.SampleRate,1); 5712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Target = dB_to_Lin32((LVM_INT16)(LocalParams.VC_Balance<<4)); 5732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_SetTarget(&pInstance->VC_BalanceMix.MixerStream[1],Target); 5742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->VC_BalanceMix.MixerStream[1],LVM_VC_MIXER_TIME,LocalParams.SampleRate,1); 5752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 5762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else if(LocalParams.VC_Balance >0) 5772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 5782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 Target; 5792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Drop in left channel volume*/ 5802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Target = dB_to_Lin32((LVM_INT16)((-LocalParams.VC_Balance)<<4)); 5812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_SetTarget(&pInstance->VC_BalanceMix.MixerStream[0],Target); 5822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->VC_BalanceMix.MixerStream[0],LVM_VC_MIXER_TIME,LocalParams.SampleRate,1); 5832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Target = LVM_MAXINT_16; 5852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_SetTarget(&pInstance->VC_BalanceMix.MixerStream[1],Target); 5862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->VC_BalanceMix.MixerStream[1],LVM_VC_MIXER_TIME,LocalParams.SampleRate,1); 5872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 5882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 5892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 5902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 Target; 5912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* No drop*/ 5922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Target = LVM_MAXINT_16; 5932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_SetTarget(&pInstance->VC_BalanceMix.MixerStream[0],Target); 5942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->VC_BalanceMix.MixerStream[0],LVM_VC_MIXER_TIME,LocalParams.SampleRate,1); 5952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 5962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_SetTarget(&pInstance->VC_BalanceMix.MixerStream[1],Target); 5972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->VC_BalanceMix.MixerStream[1],LVM_VC_MIXER_TIME,LocalParams.SampleRate,1); 5982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 5992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 6002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 6012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Update the bass enhancement 6022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 6032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 6042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_ReturnStatus_en DBE_Status; 6052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_Params_t DBE_Params; 6062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_Handle_t *hDBEInstance = pInstance->hDBEInstance; 6072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 6102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the new parameters 6112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 6122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LocalParams.OperatingMode == LVM_MODE_OFF) 6132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 6142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_Params.OperatingMode = LVDBE_OFF; 6152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 6162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 6172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 6182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_Params.OperatingMode = (LVDBE_Mode_en)LocalParams.BE_OperatingMode; 6192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 6202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_Params.SampleRate = (LVDBE_Fs_en)LocalParams.SampleRate; 6212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_Params.EffectLevel = LocalParams.BE_EffectLevel; 6222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_Params.CentreFrequency = (LVDBE_CentreFreq_en)LocalParams.BE_CentreFreq; 6232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_Params.HPFSelect = (LVDBE_FilterSelect_en)LocalParams.BE_HPF; 6242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_Params.HeadroomdB = 0; 6252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_Params.VolumeControl = LVDBE_VOLUME_OFF; 6262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_Params.VolumedB = 0; 6272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 6292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Make the changes 6302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 6312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DBE_Status = LVDBE_Control(hDBEInstance, 6322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &DBE_Params); 6332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 6362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Quit if the changes were not accepted 6372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 6382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (DBE_Status != LVDBE_SUCCESS) 6392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 6402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return((LVM_ReturnStatus_en)DBE_Status); 6412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 6422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 6452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the control flag 6462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 6472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->DBE_Active = LVM_TRUE; 6482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 6492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 6512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Update the N-Band Equaliser 6522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 6532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 6542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVEQNB_ReturnStatus_en EQNB_Status; 6552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVEQNB_Params_t EQNB_Params; 6562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVEQNB_Handle_t *hEQNBInstance = pInstance->hEQNBInstance; 6572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 6602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the new parameters 6612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 6622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LocalParams.OperatingMode == LVM_MODE_OFF) 6642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 6652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Params.OperatingMode = LVEQNB_BYPASS; 6662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 6672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 6682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 6692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Params.OperatingMode = (LVEQNB_Mode_en)LocalParams.EQNB_OperatingMode; 6702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 6712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Params.SampleRate = (LVEQNB_Fs_en)LocalParams.SampleRate; 6732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Params.NBands = LocalParams.EQNB_NBands; 6742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Params.pBandDefinition = (LVEQNB_BandDef_t *)LocalParams.pEQNB_BandDefinition; 6752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (LocalParams.SourceFormat == LVM_STEREO) /* Mono format not supported */ 6762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 6772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Params.SourceFormat = LVEQNB_STEREO; 6782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 6792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 6802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 6812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Params.SourceFormat = LVEQNB_MONOINSTEREO; /* Force to Mono-in-Stereo mode */ 6822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 6832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 6862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the control flag 6872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 6882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((LocalParams.OperatingMode == LVM_MODE_ON) && 6892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LocalParams.EQNB_OperatingMode == LVM_EQNB_ON)) 6902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 6912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->EQNB_Active = LVM_TRUE; 6922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 6932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 6942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 6952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Params.OperatingMode = LVEQNB_BYPASS; 6962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 6972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 6992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Make the changes 7002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 7012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent EQNB_Status = LVEQNB_Control(hEQNBInstance, 7022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &EQNB_Params); 7032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 7062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Quit if the changes were not accepted 7072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 7082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (EQNB_Status != LVEQNB_SUCCESS) 7092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 7102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return((LVM_ReturnStatus_en)EQNB_Status); 7112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 7172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Update concert sound 7182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 7192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 7202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_ReturnStatus_en CS_Status; 7212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Params_t CS_Params; 7222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Handle_t *hCSInstance = pInstance->hCSInstance; 7232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Mode_en CompressorMode=LVM_MODE_ON; 7242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 7262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the new parameters 7272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 7282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(LocalParams.VirtualizerOperatingMode == LVM_MODE_ON) 7292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 7302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_Params.OperatingMode = LVCS_ON; 7312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 7332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 7342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_Params.OperatingMode = LVCS_OFF; 7352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((LocalParams.TE_OperatingMode == LVM_TE_ON) && (LocalParams.TE_EffectLevel == LVM_TE_LOW_MIPS)) 7382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 7392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_Params.SpeakerType = LVCS_EX_HEADPHONES; 7402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 7422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 7432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_Params.SpeakerType = LVCS_HEADPHONES; 7442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (LocalParams.SourceFormat == LVM_STEREO) /* Mono format not supported */ 7472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 7482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_Params.SourceFormat = LVCS_STEREO; 7492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 7512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 7522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_Params.SourceFormat = LVCS_MONOINSTEREO; /* Force to Mono-in-Stereo mode */ 7532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_Params.SampleRate = LocalParams.SampleRate; 7552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_Params.ReverbLevel = LocalParams.VirtualizerReverbLevel; 7562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_Params.EffectLevel = LocalParams.CS_EffectLevel; 7572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 7602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the control flag 7612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 7622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((LocalParams.OperatingMode == LVM_MODE_ON) && 7632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LocalParams.VirtualizerOperatingMode != LVCS_OFF)) 7642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 7652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->CS_Active = LVM_TRUE; 7662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 7682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 7692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_Params.OperatingMode = LVCS_OFF; 7702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_Params.CompressorMode=CompressorMode; 7732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 7752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Make the changes 7762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 7772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CS_Status = LVCS_Control(hCSInstance, 7782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &CS_Params); 7792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 7822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Quit if the changes were not accepted 7832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 7842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (CS_Status != LVCS_SUCCESS) 7852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 7862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return((LVM_ReturnStatus_en)CS_Status); 7872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 7902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 7922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Update the Power Spectrum Analyser 7932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 7942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 7952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVPSA_RETURN PSA_Status; 7962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVPSA_ControlParams_t PSA_Params; 7972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pLVPSA_Handle_t *hPSAInstance = pInstance->hPSAInstance; 7982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 7992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 8012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Set the new parameters 8022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 8032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_Params.Fs = LocalParams.SampleRate; 8042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_Params.LevelDetectionSpeed = (LVPSA_LevelDetectSpeed_en)LocalParams.PSA_PeakDecayRate; 8052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 8072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Make the changes 8082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 8092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstance->InstParams.PSA_Included==LVM_PSA_ON) 8102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 8112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_Status = LVPSA_Control(hPSAInstance, 8122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &PSA_Params); 8132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (PSA_Status != LVPSA_OK) 8152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 8162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return((LVM_ReturnStatus_en)PSA_Status); 8172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 8182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 8202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Apply new settings 8212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 8222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent PSA_Status = LVPSA_ApplyNewSettings ((LVPSA_InstancePr_t*)hPSAInstance); 8232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(PSA_Status != LVPSA_OK) 8242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 8252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return((LVM_ReturnStatus_en)PSA_Status); 8262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 8272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 8282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 8292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 8312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Update the parameters and clear the flag 8322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 8332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params = LocalParams; 8342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVM_SUCCESS); 8372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 8382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 8412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 8422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVM_SetHeadroomParams */ 8432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 8442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 8452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* This function is used to set the automatiuc headroom management parameters. */ 8462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 8472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 8482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance Handle */ 8492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pHeadroomParams Pointer to headroom parameter structure */ 8502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 8512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 8522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_Success Succeeded */ 8532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 8542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 8552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function may be interrupted by the LVM_Process function */ 8562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 8572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 8582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8592c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVM_ReturnStatus_en LVM_SetHeadroomParams(LVM_Handle_t hInstance, 8602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_HeadroomParams_t *pHeadroomParams) 8612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 8622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Instance_t *pInstance =(LVM_Instance_t *)hInstance; 8632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_UINT16 ii, NBands; 8642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Check for NULL pointers */ 8662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((hInstance == LVM_NULL) || (pHeadroomParams == LVM_NULL)) 8672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 8682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_NULLADDRESS); 8692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 8702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((pHeadroomParams->NHeadroomBands != 0) && (pHeadroomParams->pHeadroomDefinition == LVM_NULL)) 8712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 8722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_NULLADDRESS); 8732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 8742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Consider only the LVM_HEADROOM_MAX_NBANDS first bands*/ 8762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pHeadroomParams->NHeadroomBands > LVM_HEADROOM_MAX_NBANDS) 8772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 8782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent NBands = LVM_HEADROOM_MAX_NBANDS; 8792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 8802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 8812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 8822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent NBands = pHeadroomParams->NHeadroomBands; 8832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 8842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->NewHeadroomParams.NHeadroomBands = NBands; 8852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Copy settings in memory */ 8872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for(ii = 0; ii < NBands; ii++) 8882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 8892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pHeadroom_BandDefs[ii] = pHeadroomParams->pHeadroomDefinition[ii]; 8902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 8912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->NewHeadroomParams.pHeadroomDefinition = pInstance->pHeadroom_BandDefs; 8932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->NewHeadroomParams.Headroom_OperatingMode = pHeadroomParams->Headroom_OperatingMode; 8942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->ControlPending = LVM_TRUE; 8952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVM_SUCCESS); 8972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 8982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 9002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 9012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVM_GetHeadroomParams */ 9022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 9032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 9042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* This function is used to get the automatic headroom management parameters. */ 9052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 9062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 9072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance Handle */ 9082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pHeadroomParams Pointer to headroom parameter structure (output) */ 9092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 9102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 9112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_SUCCESS Succeeded */ 9122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_NULLADDRESS When hInstance or pHeadroomParams are NULL */ 9132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 9142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 9152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function may be interrupted by the LVM_Process function */ 9162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 9172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 9182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9192c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVM_ReturnStatus_en LVM_GetHeadroomParams(LVM_Handle_t hInstance, 9202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_HeadroomParams_t *pHeadroomParams) 9212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 9222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Instance_t *pInstance =(LVM_Instance_t *)hInstance; 9232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_UINT16 ii; 9242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Check for NULL pointers */ 9262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((hInstance == LVM_NULL) || (pHeadroomParams == LVM_NULL)) 9272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 9282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_NULLADDRESS); 9292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 9302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pHeadroomParams->NHeadroomBands = pInstance->NewHeadroomParams.NHeadroomBands; 9322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Copy settings in memory */ 9352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for(ii = 0; ii < pInstance->NewHeadroomParams.NHeadroomBands; ii++) 9362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 9372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pHeadroom_UserDefs[ii] = pInstance->pHeadroom_BandDefs[ii]; 9382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 9392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pHeadroomParams->pHeadroomDefinition = pInstance->pHeadroom_UserDefs; 9422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pHeadroomParams->Headroom_OperatingMode = pInstance->NewHeadroomParams.Headroom_OperatingMode; 9432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVM_SUCCESS); 9442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 9452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 9472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 9482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVM_AlgoCallBack */ 9492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 9502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 9512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* This is the callback function of the algorithm. */ 9522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 9532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 9542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pBundleHandle Pointer to the Instance Handle */ 9552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pData Pointer to the data */ 9562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* callbackId ID of the callback */ 9572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 9582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 9592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function may be interrupted by the LVM_Process function */ 9602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 9612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 9622c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVM_INT32 LVM_AlgoCallBack( void *pBundleHandle, 9632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent void *pData, 9642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 callbackId) 9652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 9662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Instance_t *pInstance =(LVM_Instance_t *)pBundleHandle; 9672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (void) pData; 9692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent switch(callbackId & 0xFF00){ 9712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case ALGORITHM_CS_ID: 9722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent switch(callbackId & 0x00FF) 9732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 9742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case LVCS_EVENT_ALGOFF: 9752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->CS_Active = LVM_FALSE; 9762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 9772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent default: 9782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 9792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 9802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 9812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case ALGORITHM_EQNB_ID: 9822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent switch(callbackId & 0x00FF) 9832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 9842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent case LVEQNB_EVENT_ALGOFF: 9852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->EQNB_Active = LVM_FALSE; 9862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 9872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent default: 9882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 9892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 9902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 9912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent default: 9922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent break; 9932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 9942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 0; 9962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 9972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 9982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 9992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 10002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVM_VCCallBack */ 10012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 10022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 10032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* This is the callback function of the Volume control. */ 10042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 10052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 10062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pBundleHandle Pointer to the Instance Handle */ 10072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pGeneralPurpose Pointer to the data */ 10082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* CallBackParam ID of the callback */ 10092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 10102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 10112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function may be interrupted by the LVM_Process function */ 10122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 10132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 10142c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVM_INT32 LVM_VCCallBack(void* pBundleHandle, 10152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent void* pGeneralPurpose, 10162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent short CallBackParam) 10172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 10182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Instance_t *pInstance =(LVM_Instance_t *)pBundleHandle; 10192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 Target; 10202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (void) pGeneralPurpose; 10222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (void) CallBackParam; 10232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* When volume mixer has reached 0 dB target then stop it to avoid 10252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent unnecessary processing. */ 10262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Target = LVC_Mixer_GetTarget(&pInstance->VC_Volume.MixerStream[0]); 10272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(Target == 0x7FFF) 10292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 10302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VC_Active = LVM_FALSE; 10312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 10322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return 1; 10332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 1034