blob: 12b86f3f4e0bb7819cbb9dceab7e61f3b88c3d72 [file] [log] [blame]
/*
* Copyright (C) 2004-2010 NXP Software
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/************************************************************************************/
/* */
/* Includes */
/* */
/************************************************************************************/
#include <stdlib.h>
#include "LVM_Private.h"
#include "LVM_Tables.h"
#include "VectorArithmetic.h"
/****************************************************************************************/
/* */
/* FUNCTION: LVM_GetInstanceHandle */
/* */
/* DESCRIPTION: */
/* This function is used to create a bundle instance. */
/* All parameters are set to their default, inactive state. */
/* */
/* PARAMETERS: */
/* phInstance Pointer to the instance handle */
/* pInstParams Pointer to the instance parameters */
/* */
/* RETURNS: */
/* LVM_SUCCESS Initialisation succeeded */
/* LVM_NULLADDRESS One or more memory has a NULL pointer */
/* LVM_OUTOFRANGE When any of the Instance parameters are out of range */
/* */
/* NOTES: */
/* 1. This function must not be interrupted by the LVM_Process function */
/* */
/****************************************************************************************/
LVM_ReturnStatus_en LVM_GetInstanceHandle(LVM_Handle_t* phInstance, LVM_InstParams_t* pInstParams) {
LVM_ReturnStatus_en Status = LVM_SUCCESS;
LVM_Instance_t* pInstance;
LVM_INT16 i;
LVM_UINT16 InternalBlockSize;
LVM_INT32 BundleScratchSize;
/*
* Check valid points have been given
*/
if ((phInstance == LVM_NULL) || (pInstParams == LVM_NULL)) {
return (LVM_NULLADDRESS);
}
/*
* Check the instance parameters
*/
if ((pInstParams->BufferMode != LVM_MANAGED_BUFFERS) &&
(pInstParams->BufferMode != LVM_UNMANAGED_BUFFERS)) {
return (LVM_OUTOFRANGE);
}
if (pInstParams->EQNB_NumBands > 32) {
return (LVM_OUTOFRANGE);
}
if (pInstParams->BufferMode == LVM_MANAGED_BUFFERS) {
if ((pInstParams->MaxBlockSize < LVM_MIN_MAXBLOCKSIZE) ||
(pInstParams->MaxBlockSize > LVM_MANAGED_MAX_MAXBLOCKSIZE)) {
return (LVM_OUTOFRANGE);
}
} else {
if ((pInstParams->MaxBlockSize < LVM_MIN_MAXBLOCKSIZE) ||
(pInstParams->MaxBlockSize > LVM_UNMANAGED_MAX_MAXBLOCKSIZE)) {
return (LVM_OUTOFRANGE);
}
}
if (pInstParams->PSA_Included > LVM_PSA_ON) {
return (LVM_OUTOFRANGE);
}
/*
* Create the instance handle
*/
*phInstance = new LVM_Instance_t{};
pInstance = (LVM_Instance_t*)*phInstance;
pInstance->InstParams = *pInstParams;
/*
* Create the bundle scratch memory and initialse the buffer management
*/
InternalBlockSize = (LVM_UINT16)(
(pInstParams->MaxBlockSize) &
MIN_INTERNAL_BLOCKMASK); /* Force to a multiple of MIN_INTERNAL_BLOCKSIZE */
if (InternalBlockSize < MIN_INTERNAL_BLOCKSIZE) {
InternalBlockSize = MIN_INTERNAL_BLOCKSIZE;
}
/* Maximum Internal Black Size should not be more than MAX_INTERNAL_BLOCKSIZE*/
if (InternalBlockSize > MAX_INTERNAL_BLOCKSIZE) {
InternalBlockSize = MAX_INTERNAL_BLOCKSIZE;
}
pInstance->InternalBlockSize = (LVM_INT16)InternalBlockSize;
/*
* Common settings for managed and unmanaged buffers
*/
pInstance->SamplesToProcess = 0; /* No samples left to process */
BundleScratchSize =
(LVM_INT32)(3 * LVM_MAX_CHANNELS * (MIN_INTERNAL_BLOCKSIZE + InternalBlockSize) *
sizeof(LVM_FLOAT));
pInstance->pScratch = calloc(1, BundleScratchSize);
if (pInstance->pScratch == LVM_NULL) {
return LVM_NULLADDRESS;
}
if (pInstParams->BufferMode == LVM_MANAGED_BUFFERS) {
/*
* Managed buffers required
*/
pInstance->pBufferManagement =
(LVM_Buffer_t*)calloc(1, sizeof(*(pInstance->pBufferManagement)));
if (pInstance->pBufferManagement == LVM_NULL) {
return LVM_NULLADDRESS;
}
pInstance->pBufferManagement->pScratch = (LVM_FLOAT*)pInstance->pScratch;
memset(pInstance->pBufferManagement->InDelayBuffer, 0,
LVM_MAX_CHANNELS * MIN_INTERNAL_BLOCKSIZE *
sizeof(pInstance->pBufferManagement->InDelayBuffer[0]));
pInstance->pBufferManagement->InDelaySamples =
MIN_INTERNAL_BLOCKSIZE; /* Set the number of delay samples */
pInstance->pBufferManagement->OutDelaySamples = 0; /* No samples in the output buffer */
pInstance->pBufferManagement->BufferState =
LVM_FIRSTCALL; /* Set the state ready for the first call */
}
/*
* Set default parameters
*/
pInstance->Params.OperatingMode = LVM_MODE_OFF;
pInstance->Params.SampleRate = LVM_FS_8000;
pInstance->Params.SourceFormat = LVM_MONO;
pInstance->Params.SpeakerType = LVM_HEADPHONES;
pInstance->Params.VC_EffectLevel = 0;
pInstance->Params.VC_Balance = 0;
/*
* Set callback
*/
pInstance->CallBack = LVM_AlgoCallBack;
/*
* DC removal filter
*/
DC_Mc_D16_TRC_WRA_01_Init(&pInstance->DC_RemovalInstance);
/*
* Treble Enhancement
*/
pInstance->Params.TE_OperatingMode = LVM_TE_OFF;
pInstance->Params.TE_EffectLevel = 0;
pInstance->TE_Active = LVM_FALSE;
/*
* Set the volume control and initialise Current to Target
*/
pInstance->VC_Volume.MixerStream[0].CallbackParam = 0;
pInstance->VC_Volume.MixerStream[0].CallbackSet = 0;
pInstance->VC_Volume.MixerStream[0].pCallbackHandle = pInstance;
pInstance->VC_Volume.MixerStream[0].pCallBack = LVM_VCCallBack;
/* In managed buffering, start with low signal level as delay in buffer management causes a
* click*/
if (pInstParams->BufferMode == LVM_MANAGED_BUFFERS) {
LVC_Mixer_Init(&pInstance->VC_Volume.MixerStream[0], 0, 0);
} else {
LVC_Mixer_Init(&pInstance->VC_Volume.MixerStream[0], LVM_MAXFLOAT, LVM_MAXFLOAT);
}
LVC_Mixer_SetTimeConstant(&pInstance->VC_Volume.MixerStream[0], 0, LVM_FS_8000, 2);
pInstance->VC_VolumedB = 0;
pInstance->VC_AVLFixedVolume = 0;
pInstance->VC_Active = LVM_FALSE;
pInstance->VC_BalanceMix.MixerStream[0].CallbackParam = 0;
pInstance->VC_BalanceMix.MixerStream[0].CallbackSet = 0;
pInstance->VC_BalanceMix.MixerStream[0].pCallbackHandle = pInstance;
pInstance->VC_BalanceMix.MixerStream[0].pCallBack = LVM_VCCallBack;
LVC_Mixer_Init(&pInstance->VC_BalanceMix.MixerStream[0], LVM_MAXFLOAT, LVM_MAXFLOAT);
LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->VC_BalanceMix.MixerStream[0], LVM_VC_MIXER_TIME,
LVM_FS_8000, 2);
pInstance->VC_BalanceMix.MixerStream[1].CallbackParam = 0;
pInstance->VC_BalanceMix.MixerStream[1].CallbackSet = 0;
pInstance->VC_BalanceMix.MixerStream[1].pCallbackHandle = pInstance;
pInstance->VC_BalanceMix.MixerStream[1].pCallBack = LVM_VCCallBack;
LVC_Mixer_Init(&pInstance->VC_BalanceMix.MixerStream[1], LVM_MAXFLOAT, LVM_MAXFLOAT);
LVC_Mixer_VarSlope_SetTimeConstant(&pInstance->VC_BalanceMix.MixerStream[1], LVM_VC_MIXER_TIME,
LVM_FS_8000, 2);
/*
* Create the default EQNB pre-gain and pointer to the band definitions
*/
pInstance->pEQNB_BandDefs = (LVM_EQNB_BandDef_t*)calloc(pInstParams->EQNB_NumBands,
sizeof(*(pInstance->pEQNB_BandDefs)));
if (pInstance->pEQNB_BandDefs == LVM_NULL) {
return LVM_NULLADDRESS;
}
pInstance->pEQNB_UserDefs = (LVM_EQNB_BandDef_t*)calloc(pInstParams->EQNB_NumBands,
sizeof(*(pInstance->pEQNB_UserDefs)));
if (pInstance->pEQNB_UserDefs == LVM_NULL) {
return LVM_NULLADDRESS;
}
/*
* Initialise the Concert Sound module
*/
{
LVCS_Handle_t hCSInstance; /* Instance handle */
LVCS_Capabilities_t CS_Capabilities; /* Initial capabilities */
LVCS_ReturnStatus_en LVCS_Status; /* Function call status */
/*
* Set default parameters
*/
pInstance->Params.VirtualizerReverbLevel = 100;
pInstance->Params.VirtualizerType = LVM_CONCERTSOUND;
pInstance->Params.VirtualizerOperatingMode = LVM_MODE_OFF;
pInstance->CS_Active = LVM_FALSE;
/*
* Set the initialisation capabilities
*/
CS_Capabilities.MaxBlockSize = (LVM_UINT16)InternalBlockSize;
CS_Capabilities.CallBack = pInstance->CallBack;
CS_Capabilities.pBundleInstance = (void*)pInstance;
/*
* Initialise the Concert Sound instance and save the instance handle
*/
hCSInstance = LVM_NULL; /* Set to NULL to return handle */
LVCS_Status = LVCS_Init(&hCSInstance, /* Create and initiailse */
&CS_Capabilities, pInstance->pScratch);
if (LVCS_Status != LVCS_SUCCESS) return ((LVM_ReturnStatus_en)LVCS_Status);
pInstance->hCSInstance = hCSInstance; /* Save the instance handle */
}
/*
* Initialise the Bass Enhancement module
*/
{
LVDBE_Handle_t hDBEInstance; /* Instance handle */
LVDBE_Capabilities_t DBE_Capabilities; /* Initial capabilities */
LVDBE_ReturnStatus_en LVDBE_Status; /* Function call status */
/*
* Set the initialisation parameters
*/
pInstance->Params.BE_OperatingMode = LVM_BE_OFF;
pInstance->Params.BE_CentreFreq = LVM_BE_CENTRE_55Hz;
pInstance->Params.BE_EffectLevel = 0;
pInstance->Params.BE_HPF = LVM_BE_HPF_OFF;
pInstance->DBE_Active = LVM_FALSE;
/*
* Set the initialisation capabilities
*/
DBE_Capabilities.SampleRate = LVDBE_CAP_FS_8000 | LVDBE_CAP_FS_11025 | LVDBE_CAP_FS_12000 |
LVDBE_CAP_FS_16000 | LVDBE_CAP_FS_22050 | LVDBE_CAP_FS_24000 |
LVDBE_CAP_FS_32000 | LVDBE_CAP_FS_44100 | LVDBE_CAP_FS_48000 |
LVDBE_CAP_FS_88200 | LVDBE_CAP_FS_96000 |
LVDBE_CAP_FS_176400 | LVDBE_CAP_FS_192000;
DBE_Capabilities.CentreFrequency = LVDBE_CAP_CENTRE_55Hz | LVDBE_CAP_CENTRE_55Hz |
LVDBE_CAP_CENTRE_66Hz | LVDBE_CAP_CENTRE_78Hz |
LVDBE_CAP_CENTRE_90Hz;
DBE_Capabilities.MaxBlockSize = (LVM_UINT16)InternalBlockSize;
/*
* Initialise the Dynamic Bass Enhancement instance and save the instance handle
*/
hDBEInstance = LVM_NULL; /* Set to NULL to return handle */
LVDBE_Status = LVDBE_Init(&hDBEInstance, /* Create and initiailse */
&DBE_Capabilities, pInstance->pScratch);
if (LVDBE_Status != LVDBE_SUCCESS) return ((LVM_ReturnStatus_en)LVDBE_Status);
pInstance->hDBEInstance = hDBEInstance; /* Save the instance handle */
}
/*
* Initialise the N-Band Equaliser module
*/
{
LVEQNB_Handle_t hEQNBInstance; /* Instance handle */
LVEQNB_Capabilities_t EQNB_Capabilities; /* Initial capabilities */
LVEQNB_ReturnStatus_en LVEQNB_Status; /* Function call status */
/*
* Set the initialisation parameters
*/
pInstance->Params.EQNB_OperatingMode = LVM_EQNB_OFF;
pInstance->Params.EQNB_NBands = 0;
pInstance->Params.pEQNB_BandDefinition = LVM_NULL;
pInstance->EQNB_Active = LVM_FALSE;
/*
* Set the initialisation capabilities
*/
EQNB_Capabilities.SampleRate =
LVEQNB_CAP_FS_8000 | LVEQNB_CAP_FS_11025 | LVEQNB_CAP_FS_12000 |
LVEQNB_CAP_FS_16000 | LVEQNB_CAP_FS_22050 | LVEQNB_CAP_FS_24000 |
LVEQNB_CAP_FS_32000 | LVEQNB_CAP_FS_44100 | LVEQNB_CAP_FS_48000 |
LVEQNB_CAP_FS_88200 | LVEQNB_CAP_FS_96000 | LVEQNB_CAP_FS_176400 |
LVEQNB_CAP_FS_192000;
EQNB_Capabilities.MaxBlockSize = (LVM_UINT16)InternalBlockSize;
EQNB_Capabilities.MaxBands = pInstParams->EQNB_NumBands;
EQNB_Capabilities.SourceFormat = LVEQNB_CAP_STEREO | LVEQNB_CAP_MONOINSTEREO;
EQNB_Capabilities.CallBack = pInstance->CallBack;
EQNB_Capabilities.pBundleInstance = (void*)pInstance;
/*
* Initialise the Dynamic Bass Enhancement instance and save the instance handle
*/
hEQNBInstance = LVM_NULL; /* Set to NULL to return handle */
LVEQNB_Status = LVEQNB_Init(&hEQNBInstance, /* Create and initiailse */
&EQNB_Capabilities, pInstance->pScratch);
if (LVEQNB_Status != LVEQNB_SUCCESS) return ((LVM_ReturnStatus_en)LVEQNB_Status);
pInstance->hEQNBInstance = hEQNBInstance; /* Save the instance handle */
}
/*
* Headroom management memory allocation
*/
{
pInstance->pHeadroom_BandDefs = (LVM_HeadroomBandDef_t*)calloc(
LVM_HEADROOM_MAX_NBANDS, sizeof(*(pInstance->pHeadroom_BandDefs)));
if (pInstance->pHeadroom_BandDefs == LVM_NULL) {
return LVM_NULLADDRESS;
}
pInstance->pHeadroom_UserDefs = (LVM_HeadroomBandDef_t*)calloc(
LVM_HEADROOM_MAX_NBANDS, sizeof(*(pInstance->pHeadroom_UserDefs)));
if (pInstance->pHeadroom_UserDefs == LVM_NULL) {
return LVM_NULLADDRESS;
}
/* Headroom management parameters initialisation */
pInstance->NewHeadroomParams.NHeadroomBands = 2;
pInstance->NewHeadroomParams.pHeadroomDefinition = pInstance->pHeadroom_BandDefs;
pInstance->NewHeadroomParams.pHeadroomDefinition[0].Limit_Low = 20;
pInstance->NewHeadroomParams.pHeadroomDefinition[0].Limit_High = 4999;
pInstance->NewHeadroomParams.pHeadroomDefinition[0].Headroom_Offset = 3;
pInstance->NewHeadroomParams.pHeadroomDefinition[1].Limit_Low = 5000;
pInstance->NewHeadroomParams.pHeadroomDefinition[1].Limit_High = 24000;
pInstance->NewHeadroomParams.pHeadroomDefinition[1].Headroom_Offset = 4;
pInstance->NewHeadroomParams.Headroom_OperatingMode = LVM_HEADROOM_ON;
pInstance->Headroom = 0;
}
/*
* Initialise the PSA module
*/
{
pLVPSA_Handle_t hPSAInstance = LVM_NULL; /* Instance handle */
LVPSA_RETURN PSA_Status; /* Function call status */
LVPSA_FilterParam_t FiltersParams[9];
if (pInstParams->PSA_Included == LVM_PSA_ON) {
pInstance->PSA_InitParams.SpectralDataBufferDuration = (LVM_UINT16)500;
pInstance->PSA_InitParams.MaxInputBlockSize = (LVM_UINT16)2048;
pInstance->PSA_InitParams.nBands = (LVM_UINT16)9;
pInstance->PSA_InitParams.pFiltersParams = &FiltersParams[0];
for (i = 0; i < pInstance->PSA_InitParams.nBands; i++) {
FiltersParams[i].CenterFrequency = (LVM_UINT16)1000;
FiltersParams[i].QFactor = (LVM_UINT16)100;
FiltersParams[i].PostGain = (LVM_INT16)0;
}
/*Initialise PSA instance and save the instance handle*/
pInstance->PSA_ControlParams.Fs = LVM_FS_48000;
pInstance->PSA_ControlParams.LevelDetectionSpeed = LVPSA_SPEED_MEDIUM;
pInstance->pPSAInput = (LVM_FLOAT*)calloc(MAX_INTERNAL_BLOCKSIZE, sizeof(LVM_FLOAT));
if (pInstance->pPSAInput == LVM_NULL) {
return LVM_NULLADDRESS;
}
PSA_Status = LVPSA_Init(&hPSAInstance, &pInstance->PSA_InitParams,
&pInstance->PSA_ControlParams, pInstance->pScratch);
if (PSA_Status != LVPSA_OK) {
return ((LVM_ReturnStatus_en)LVM_ALGORITHMPSA);
}
pInstance->hPSAInstance = hPSAInstance; /* Save the instance handle */
pInstance->PSA_GainOffset = 0;
} else {
pInstance->hPSAInstance = LVM_NULL;
}
/*
* Set the initialisation parameters.
*/
pInstance->Params.PSA_PeakDecayRate = LVM_PSA_SPEED_MEDIUM;
pInstance->Params.PSA_Enable = LVM_PSA_OFF;
}
/*
* Copy the initial parameters to the new parameters for correct readback of
* the settings.
*/
pInstance->NewParams = pInstance->Params;
/*
* Create configuration number
*/
pInstance->ConfigurationNumber = 0x00000000;
pInstance->ConfigurationNumber += LVM_CS_MASK;
pInstance->ConfigurationNumber += LVM_EQNB_MASK;
pInstance->ConfigurationNumber += LVM_DBE_MASK;
pInstance->ConfigurationNumber += LVM_VC_MASK;
pInstance->ConfigurationNumber += LVM_PSA_MASK;
if (((pInstance->ConfigurationNumber & LVM_CS_MASK) != 0) ||
((pInstance->ConfigurationNumber & LVM_DBE_MASK) != 0) ||
((pInstance->ConfigurationNumber & LVM_EQNB_MASK) != 0) ||
((pInstance->ConfigurationNumber & LVM_TE_MASK) != 0) ||
((pInstance->ConfigurationNumber & LVM_VC_MASK) != 0)) {
pInstance->BlickSizeMultiple = 4;
} else {
pInstance->BlickSizeMultiple = 1;
}
return (Status);
}
/****************************************************************************************/
/* */
/* FUNCTION: LVM_DelInstanceHandle */
/* */
/* DESCRIPTION: */
/* This function is used to create a bundle instance. It returns the created instance */
/* handle through phInstance. All parameters are set to their default, inactive state. */
/* */
/* PARAMETERS: */
/* phInstance Pointer to the instance handle */
/* */
/* NOTES: */
/* 1. This function must not be interrupted by the LVM_Process function */
/* */
/****************************************************************************************/
void LVM_DelInstanceHandle(LVM_Handle_t* phInstance) {
LVM_Instance_t* pInstance = (LVM_Instance_t*)*phInstance;
if (pInstance->pScratch != LVM_NULL) {
free(pInstance->pScratch);
pInstance->pScratch = LVM_NULL;
}
if (pInstance->InstParams.BufferMode == LVM_MANAGED_BUFFERS) {
/*
* Managed buffers required
*/
if (pInstance->pBufferManagement != LVM_NULL) {
free(pInstance->pBufferManagement);
pInstance->pBufferManagement = LVM_NULL;
}
}
/*
* Treble Enhancement
*/
/*
* Free the default EQNB pre-gain and pointer to the band definitions
*/
if (pInstance->pEQNB_BandDefs != LVM_NULL) {
free(pInstance->pEQNB_BandDefs);
pInstance->pEQNB_BandDefs = LVM_NULL;
}
if (pInstance->pEQNB_UserDefs != LVM_NULL) {
free(pInstance->pEQNB_UserDefs);
pInstance->pEQNB_UserDefs = LVM_NULL;
}
/*
* De-initialise the Concert Sound module
*/
if (pInstance->hCSInstance != LVM_NULL) {
LVCS_DeInit(&pInstance->hCSInstance);
}
/*
* De-initialise the Bass Enhancement module
*/
if (pInstance->hDBEInstance != LVM_NULL) {
LVDBE_DeInit(&pInstance->hDBEInstance);
}
/*
* De-initialise the N-Band Equaliser module
*/
if (pInstance->hEQNBInstance != LVM_NULL) {
LVEQNB_DeInit(&pInstance->hEQNBInstance);
}
/*
* Free Headroom management memory.
*/
if (pInstance->pHeadroom_BandDefs != LVM_NULL) {
free(pInstance->pHeadroom_BandDefs);
pInstance->pHeadroom_BandDefs = LVM_NULL;
}
if (pInstance->pHeadroom_UserDefs != LVM_NULL) {
free(pInstance->pHeadroom_UserDefs);
pInstance->pHeadroom_UserDefs = LVM_NULL;
}
/*
* De-initialise the PSA module
*/
if (pInstance->hPSAInstance != LVM_NULL) {
LVPSA_DeInit(&pInstance->hPSAInstance);
}
if (pInstance->pPSAInput != LVM_NULL) {
free(pInstance->pPSAInput);
pInstance->pPSAInput = LVM_NULL;
}
delete pInstance;
return;
}
/****************************************************************************************/
/* */
/* FUNCTION: LVM_ClearAudioBuffers */
/* */
/* DESCRIPTION: */
/* This function is used to clear the internal audio buffers of the bundle. */
/* */
/* PARAMETERS: */
/* hInstance Instance handle */
/* */
/* RETURNS: */
/* LVM_SUCCESS Initialisation succeeded */
/* LVM_NULLADDRESS Instance or scratch memory has a NULL pointer */
/* */
/* NOTES: */
/* 1. This function must not be interrupted by the LVM_Process function */
/* */
/****************************************************************************************/
LVM_ReturnStatus_en LVM_ClearAudioBuffers(LVM_Handle_t hInstance) {
LVM_InstParams_t InstParams; /* Instance parameters */
LVM_ControlParams_t Params; /* Control Parameters */
LVM_Instance_t* pInstance = (LVM_Instance_t*)hInstance; /* Pointer to Instance */
LVM_HeadroomParams_t HeadroomParams;
if (hInstance == LVM_NULL) {
return LVM_NULLADDRESS;
}
/* Save the control parameters */ /* coverity[unchecked_value] */ /* Do not check return value
internal function calls */
LVM_GetControlParameters(hInstance, &Params);
/*Save the headroom parameters*/
LVM_GetHeadroomParams(hInstance, &HeadroomParams);
/* Save the instance parameters */
InstParams = pInstance->InstParams;
/* Call LVM_GetInstanceHandle to re-initialise the bundle */
/* Restore control parameters */ /* coverity[unchecked_value] */ /* Do not check return value
internal function calls */
LVM_SetControlParameters(hInstance, &Params);
/*Restore the headroom parameters*/
LVM_SetHeadroomParams(hInstance, &HeadroomParams);
/* DC removal filter */
DC_Mc_D16_TRC_WRA_01_Init(&pInstance->DC_RemovalInstance);
return LVM_SUCCESS;
}