LVCS_Control.c revision d7d013446a64c6de9f0f2dfe098a721b140e0b48
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/* Includes */ 212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVCS.h" 252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVCS_Private.h" 262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVCS_Tables.h" 272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVCS_GetParameters */ 312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Request the Concert Sound parameters. The current parameter set is returned */ 342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* via the parameter pointer. */ 352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance handle */ 382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pParams Pointer to an empty parameter structure */ 392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVCS_Success Always succeeds */ 422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function may be interrupted by the LVCS_Process function */ 452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 482c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVCS_ReturnStatus_en LVCS_GetParameters(LVCS_Handle_t hInstance, 492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Params_t *pParams) 502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Instance_t *pInstance =(LVCS_Instance_t *)hInstance; 532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pParams = pInstance->Params; 552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVCS_SUCCESS); 572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVCS_Control */ 632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Sets or changes the Concert Sound parameters. */ 662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance handle */ 692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pParams Pointer to a parameter structure */ 702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVCS_Success Succeeded */ 732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function must not be interrupted by the LVCS_Process function */ 762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 792c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVCS_ReturnStatus_en LVCS_Control(LVCS_Handle_t hInstance, 802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Params_t *pParams) 812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 Offset; 832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Instance_t *pInstance =(LVCS_Instance_t *)hInstance; 842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_ReturnStatus_en err; 852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Modes_en OperatingModeSave = pInstance->Params.OperatingMode; 862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pParams->SampleRate != pInstance->Params.SampleRate) 882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->TimerParams.SamplingRate = LVCS_SampleRateTable[pParams->SampleRate]; 902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * If the reverb level has changed 942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstance->Params.ReverbLevel != pParams->ReverbLevel) 962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_ReverbGeneratorInit(hInstance,pParams); 982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * If the sample rate or speaker has changed then perform a full re-initialisation 1022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((pInstance->Params.SampleRate != pParams->SampleRate) || 1042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstance->Params.SpeakerType != pParams->SpeakerType)) 1052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const LVCS_VolCorrect_t *pLVCS_VolCorrectTable; 1072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Output device 1102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->OutputDevice = LVCS_HEADPHONE; 1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Get the volume correction parameters 1152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Use internal coefficient table */ 1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pLVCS_VolCorrectTable = (LVCS_VolCorrect_t*)&LVCS_VolCorrectTable[0]; 1182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Offset = (LVM_INT16)(pParams->SpeakerType + pParams->SourceFormat*(1+LVCS_EX_HEADPHONES)); 1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VolCorrect = pLVCS_VolCorrectTable[Offset]; 1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 122d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent pInstance->CompressGain = pInstance->VolCorrect.CompMin; 123d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#ifdef BUILD_FLOAT 124d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LVC_Mixer_Init(&pInstance->BypassMix.Mixer_Instance.MixerStream[0], 0, 0); 125d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#else 12609d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVC_Mixer_Init(&pInstance->BypassMix.Mixer_Instance.MixerStream[0],0,0); 127d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#endif 12809d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent { 129d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#ifndef BUILD_FLOAT 13009d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVM_UINT32 Gain; 13109d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent const Gain_t *pOutputGainTable = (Gain_t*)&LVCS_OutputGainTable[0]; 13209d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent Gain = (LVM_UINT32)(pOutputGainTable[Offset].Loss * LVM_MAXINT_16); 13309d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent Gain = (LVM_UINT32)pOutputGainTable[Offset].UnprocLoss * (Gain >> 15); 13409d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent Gain=Gain>>15; 13509d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent /* 13609d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent * Apply the gain correction and shift, note the result is in Q3.13 format 13709d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent */ 13809d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent Gain = (Gain * pInstance->VolCorrect.GainMin) >>12; 13909d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent 14009d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVC_Mixer_Init(&pInstance->BypassMix.Mixer_Instance.MixerStream[1],0,Gain); 14109d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->BypassMix.Mixer_Instance.MixerStream[0], 14209d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVCS_BYPASS_MIXER_TC,pParams->SampleRate,2); 14309d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->BypassMix.Mixer_Instance.MixerStream[1], 14409d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVCS_BYPASS_MIXER_TC,pParams->SampleRate,2); 145d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#else 146d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LVM_FLOAT Gain; 147d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri const Gain_t *pOutputGainTable = (Gain_t*)&LVCS_OutputGainTable[0]; 148d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri Gain = (LVM_FLOAT)(pOutputGainTable[Offset].Loss); 149d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri Gain = (LVM_FLOAT)pOutputGainTable[Offset].UnprocLoss * (Gain); 15009d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent 151d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri /* 152d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri * Apply the gain correction 153d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri */ 154d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri Gain = (Gain * pInstance->VolCorrect.GainMin); 155d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri 156d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LVC_Mixer_Init(&pInstance->BypassMix.Mixer_Instance.MixerStream[1], 0, Gain); 157d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->BypassMix.Mixer_Instance.MixerStream[0], 158d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LVCS_BYPASS_MIXER_TC, pParams->SampleRate, 2); 159d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->BypassMix.Mixer_Instance.MixerStream[1], 160d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LVCS_BYPASS_MIXER_TC, pParams->SampleRate, 2); 161d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#endif 16209d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent } 16309d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent 16409d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent 1652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_SEnhancerInit(hInstance, 1662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_ReverbGeneratorInit(hInstance, 1692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_EqualiserInit(hInstance, 1722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_BypassMixInit(hInstance, 1752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Check if the effect level or source format has changed 1822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else if ((pInstance->Params.EffectLevel != pParams->EffectLevel) || 1842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstance->Params.SourceFormat != pParams->SourceFormat)) 1852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const LVCS_VolCorrect_t *pLVCS_VolCorrectTable; 1872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Get the volume correction parameters 1902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Use internal coefficient table */ 1922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pLVCS_VolCorrectTable = (LVCS_VolCorrect_t*)&LVCS_VolCorrectTable[0]; 1932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Offset = (LVM_INT16)(pParams->SpeakerType + pParams->SourceFormat*(1+LVCS_EX_HEADPHONES)); 1942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VolCorrect = pLVCS_VolCorrectTable[Offset]; 1962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Update the effect level and alpha-mixer gains */ 1982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_BypassMixInit(hInstance, 1992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 2002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(err != LVCS_SUCCESS) 2022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 2032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return err; 2042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 2072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 2082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params = *pParams; 2092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Update the instance parameters 2132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params = *pParams; 2152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Stay on the current operating mode until the transition is done */ 2172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((pParams->OperatingMode != OperatingModeSave) || 2182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstance->bInOperatingModeTransition == LVM_TRUE)){ 2192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Set the reverb delay timeout */ 2212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstance->bInOperatingModeTransition != LVM_TRUE){ 2222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->bTimerDone = LVM_FALSE; 2232d3bf535004f7310fe04a4b5f46b6747cdb3c93fEric Laurent pInstance->TimerParams.TimeInMs = 2242d3bf535004f7310fe04a4b5f46b6747cdb3c93fEric Laurent (LVM_INT16)(((pInstance->Reverberation.DelaySize << 2) 2252d3bf535004f7310fe04a4b5f46b6747cdb3c93fEric Laurent /pInstance->TimerParams.SamplingRate) + 1); 2262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Timer_Init ( &pInstance->TimerInstance, 2272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &pInstance->TimerParams); 2282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Update the effect level and alpha-mixer gains */ 2312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_BypassMixInit(hInstance, 2322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 2332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Change transition bypass mixer settings if needed depending on transition type */ 2352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pParams->OperatingMode != LVCS_OFF){ 23609d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent pInstance->MSTarget0=LVM_MAXINT_16; 23709d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent pInstance->MSTarget1=0; 2382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 2402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 2412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.OperatingMode = OperatingModeSave; 24209d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent pInstance->MSTarget1=LVM_MAXINT_16; 24309d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent pInstance->MSTarget0=0; 2442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Set transition flag */ 2482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->bInOperatingModeTransition = LVM_TRUE; 2492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVCS_SUCCESS); 2522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 2532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 2552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVCS_TimerCallBack */ 2572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 2592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* CallBack function of the Timer. */ 2602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 2622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LVCS_TimerCallBack (void* hInstance, void* pCallBackParams, LVM_INT32 CallbackParam) 2632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 2642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Instance_t *pInstance = (LVCS_Instance_t *)hInstance; 2652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Avoid warnings because pCallBackParams and CallbackParam are not used*/ 2672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((pCallBackParams != LVM_NULL) || (CallbackParam != 0)){ 2682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pCallBackParams = hInstance; 2692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CallbackParam = 0; 2702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return; 2712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->bTimerDone = LVM_TRUE; 2742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return; 2772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 2782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 279