LVCS_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 2009d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent $Author: beq06068 $ 2109d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent $Revision: 1307 $ 2209d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent $Date: 2010-07-22 17:41:25 +0200 (Thu, 22 Jul 2010) $ 232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent*************************************************************************************/ 252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Includes */ 292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVCS.h" 332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVCS_Private.h" 342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVCS_Tables.h" 352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVCS_GetParameters */ 392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Request the Concert Sound parameters. The current parameter set is returned */ 422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* via the parameter pointer. */ 432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance handle */ 462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pParams Pointer to an empty parameter structure */ 472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVCS_Success Always succeeds */ 502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function may be interrupted by the LVCS_Process function */ 532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 562c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVCS_ReturnStatus_en LVCS_GetParameters(LVCS_Handle_t hInstance, 572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Params_t *pParams) 582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Instance_t *pInstance =(LVCS_Instance_t *)hInstance; 612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *pParams = pInstance->Params; 632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVCS_SUCCESS); 652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVCS_Control */ 712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Sets or changes the Concert Sound parameters. */ 742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance handle */ 772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pParams Pointer to a parameter structure */ 782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVCS_Success Succeeded */ 812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 1. This function must not be interrupted by the LVCS_Process function */ 842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/************************************************************************************/ 862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 872c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVCS_ReturnStatus_en LVCS_Control(LVCS_Handle_t hInstance, 882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Params_t *pParams) 892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 Offset; 912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Instance_t *pInstance =(LVCS_Instance_t *)hInstance; 922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_ReturnStatus_en err; 932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Modes_en OperatingModeSave = pInstance->Params.OperatingMode; 942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pParams->SampleRate != pInstance->Params.SampleRate) 962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->TimerParams.SamplingRate = LVCS_SampleRateTable[pParams->SampleRate]; 982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * If the reverb level has changed 1022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstance->Params.ReverbLevel != pParams->ReverbLevel) 1042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_ReverbGeneratorInit(hInstance,pParams); 1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * If the sample rate or speaker has changed then perform a full re-initialisation 1102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((pInstance->Params.SampleRate != pParams->SampleRate) || 1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstance->Params.SpeakerType != pParams->SpeakerType)) 1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const LVCS_VolCorrect_t *pLVCS_VolCorrectTable; 1152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Output device 1182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->OutputDevice = LVCS_HEADPHONE; 1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Get the volume correction parameters 1232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Use internal coefficient table */ 1252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pLVCS_VolCorrectTable = (LVCS_VolCorrect_t*)&LVCS_VolCorrectTable[0]; 1262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Offset = (LVM_INT16)(pParams->SpeakerType + pParams->SourceFormat*(1+LVCS_EX_HEADPHONES)); 1272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VolCorrect = pLVCS_VolCorrectTable[Offset]; 1292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 13009d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVC_Mixer_Init(&pInstance->BypassMix.Mixer_Instance.MixerStream[0],0,0); 13109d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent 13209d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent 13309d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent { 13409d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVM_UINT32 Gain; 13509d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent const Gain_t *pOutputGainTable = (Gain_t*)&LVCS_OutputGainTable[0]; 13609d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent Gain = (LVM_UINT32)(pOutputGainTable[Offset].Loss * LVM_MAXINT_16); 13709d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent Gain = (LVM_UINT32)pOutputGainTable[Offset].UnprocLoss * (Gain >> 15); 13809d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent Gain=Gain>>15; 13909d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent /* 14009d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent * Apply the gain correction and shift, note the result is in Q3.13 format 14109d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent */ 14209d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent Gain = (Gain * pInstance->VolCorrect.GainMin) >>12; 14309d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent 14409d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVC_Mixer_Init(&pInstance->BypassMix.Mixer_Instance.MixerStream[1],0,Gain); 14509d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->BypassMix.Mixer_Instance.MixerStream[0], 14609d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVCS_BYPASS_MIXER_TC,pParams->SampleRate,2); 14709d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->BypassMix.Mixer_Instance.MixerStream[1], 14809d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent LVCS_BYPASS_MIXER_TC,pParams->SampleRate,2); 14909d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent 15009d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent } 15109d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent 15209d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent 1532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_SEnhancerInit(hInstance, 1542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_ReverbGeneratorInit(hInstance, 1572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_EqualiserInit(hInstance, 1602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_BypassMixInit(hInstance, 1632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Check if the effect level or source format has changed 1702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else if ((pInstance->Params.EffectLevel != pParams->EffectLevel) || 1722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstance->Params.SourceFormat != pParams->SourceFormat)) 1732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const LVCS_VolCorrect_t *pLVCS_VolCorrectTable; 1752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Get the volume correction parameters 1782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Use internal coefficient table */ 1802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pLVCS_VolCorrectTable = (LVCS_VolCorrect_t*)&LVCS_VolCorrectTable[0]; 1812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Offset = (LVM_INT16)(pParams->SpeakerType + pParams->SourceFormat*(1+LVCS_EX_HEADPHONES)); 1822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->VolCorrect = pLVCS_VolCorrectTable[Offset]; 1842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Update the effect level and alpha-mixer gains */ 1862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_BypassMixInit(hInstance, 1872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 1882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(err != LVCS_SUCCESS) 1902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return err; 1922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 1952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params = *pParams; 1972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Update the instance parameters 2012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params = *pParams; 2032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Stay on the current operating mode until the transition is done */ 2052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((pParams->OperatingMode != OperatingModeSave) || 2062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (pInstance->bInOperatingModeTransition == LVM_TRUE)){ 2072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Set the reverb delay timeout */ 2092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstance->bInOperatingModeTransition != LVM_TRUE){ 2102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->bTimerDone = LVM_FALSE; 2112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->TimerParams.TimeInMs = (LVM_INT16)(((pInstance->Reverberation.DelaySize << 2)/pInstance->TimerParams.SamplingRate) + 1); 2122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Timer_Init ( &pInstance->TimerInstance, 2132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &pInstance->TimerParams); 2142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Update the effect level and alpha-mixer gains */ 2172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent err=LVCS_BypassMixInit(hInstance, 2182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pParams); 2192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Change transition bypass mixer settings if needed depending on transition type */ 2212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pParams->OperatingMode != LVCS_OFF){ 22209d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent pInstance->MSTarget0=LVM_MAXINT_16; 22309d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent pInstance->MSTarget1=0; 2242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 2262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 2272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->Params.OperatingMode = OperatingModeSave; 22809d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent pInstance->MSTarget1=LVM_MAXINT_16; 22909d5ca3766d4bab91cdaad7206716a5747ebad77Eric Laurent pInstance->MSTarget0=0; 2302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Set transition flag */ 2342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->bInOperatingModeTransition = LVM_TRUE; 2352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVCS_SUCCESS); 2382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 2392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 2412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVCS_TimerCallBack */ 2432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 2452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* CallBack function of the Timer. */ 2462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 2472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 2482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid LVCS_TimerCallBack (void* hInstance, void* pCallBackParams, LVM_INT32 CallbackParam) 2492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 2502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVCS_Instance_t *pInstance = (LVCS_Instance_t *)hInstance; 2512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* Avoid warnings because pCallBackParams and CallbackParam are not used*/ 2532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((pCallBackParams != LVM_NULL) || (CallbackParam != 0)){ 2542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pCallBackParams = hInstance; 2552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent CallbackParam = 0; 2562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return; 2572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->bTimerDone = LVM_TRUE; 2602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return; 2632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 2642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 265