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/* */ 212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Includes */ 222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVM_Private.h" 262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "VectorArithmetic.h" 272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVM_Coeffs.h" 282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* FUNCTION: LVM_Process */ 322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* DESCRIPTION: */ 342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* Process function for the LifeVibes module. */ 352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* PARAMETERS: */ 372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* hInstance Instance handle */ 382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pInData Pointer to the input data */ 392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* pOutData Pointer to the output data */ 402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NumSamples Number of samples in the input buffer */ 412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* AudioTime Audio Time of the current input buffer in ms */ 422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* RETURNS: */ 442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_SUCCESS Succeeded */ 452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_INVALIDNUMSAMPLES When the NumSamples is not a valied multiple in unmanaged */ 462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* buffer mode */ 472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_ALIGNMENTERROR When either the input our output buffers are not 32-bit */ 482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* aligned in unmanaged mode */ 492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* LVM_NULLADDRESS When one of hInstance, pInData or pOutData is NULL */ 502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* NOTES: */ 522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* */ 532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/****************************************************************************************/ 542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 552c8e5cab3faa6d360e222b7a6c40a80083d021acEric LaurentLVM_ReturnStatus_en LVM_Process(LVM_Handle_t hInstance, 562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const LVM_INT16 *pInData, 572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 *pOutData, 582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_UINT16 NumSamples, 592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_UINT32 AudioTime) 602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_Instance_t *pInstance = (LVM_Instance_t *)hInstance; 632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_UINT16 SampleCount = NumSamples; 642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 *pInput = (LVM_INT16 *)pInData; 652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 *pToProcess = (LVM_INT16 *)pInData; 662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 *pProcessed = pOutData; 672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_ReturnStatus_en Status; 682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Check if the number of samples is zero 712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (NumSamples == 0) 732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVM_SUCCESS); 752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Check valid points have been given 802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((hInstance == LVM_NULL) || (pInData == LVM_NULL) || (pOutData == LVM_NULL)) 822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return (LVM_NULLADDRESS); 842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * For unmanaged mode only 882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(pInstance->InstParams.BufferMode == LVM_UNMANAGED_BUFFERS) 902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Check if the number of samples is a good multiple (unmanaged mode only) 932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if((NumSamples % pInstance->BlickSizeMultiple) != 0) 952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVM_INVALIDNUMSAMPLES); 972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Check the buffer alignment 1012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 102b302bd5d288be2d3363b80053ca2392560b00b25Ashok Bhat if((((uintptr_t)pInData % 4) != 0) || (((uintptr_t)pOutData % 4) != 0)) 1032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVM_ALIGNMENTERROR); 1052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Update new parameters if necessary 1112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pInstance->ControlPending == LVM_TRUE) 1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Status = LVM_ApplyNewSettings(hInstance); 1152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(Status != LVM_SUCCESS) 1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return Status; 1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Convert from Mono if necessary 1252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pInstance->Params.SourceFormat == LVM_MONO) 1272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent MonoTo2I_16(pInData, /* Source */ 1292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pOutData, /* Destination */ 1302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_INT16)NumSamples); /* Number of input samples */ 1312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInput = pOutData; 1322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pToProcess = pOutData; 1332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Process the data with managed buffers 1382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent while (SampleCount != 0) 1402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Manage the input buffer and frame processing 1432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_BufferIn(hInstance, 1452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInput, 1462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &pToProcess, 1472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &pProcessed, 1482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &SampleCount); 1492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Only process data when SampleCount is none zero, a zero count can occur when 1522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * the BufferIn routine is working in managed mode. 1532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (SampleCount != 0) 1552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Apply ConcertSound if required 1592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pInstance->CS_Active == LVM_TRUE) 1612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (void)LVCS_Process(pInstance->hCSInstance, /* Concert Sound instance handle */ 1632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pToProcess, 1642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pProcessed, 1652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent SampleCount); 1662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pToProcess = pProcessed; 1672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Apply volume if required 1712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pInstance->VC_Active!=0) 1732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_MixSoft_1St_D16C31_SAT(&pInstance->VC_Volume, 1752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pToProcess, 1762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pProcessed, 1772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_INT16)(2*SampleCount)); /* Left and right*/ 1782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pToProcess = pProcessed; 1792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Call N-Band equaliser if enabled 1832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pInstance->EQNB_Active == LVM_TRUE) 1852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVEQNB_Process(pInstance->hEQNBInstance, /* N-Band equaliser instance handle */ 1872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pToProcess, 1882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pProcessed, 1892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent SampleCount); 1902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pToProcess = pProcessed; 1912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 1922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 1942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Call bass enhancement if enabled 1952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 1962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pInstance->DBE_Active == LVM_TRUE) 1972c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 1982c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVDBE_Process(pInstance->hDBEInstance, /* Dynamic Bass Enhancement instance handle */ 1992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pToProcess, 2002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pProcessed, 2012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent SampleCount); 2022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pToProcess = pProcessed; 2032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Bypass mode or everything off, so copy the input to the output 2072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pToProcess != pProcessed) 2092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 2102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Copy_16(pToProcess, /* Source */ 2112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pProcessed, /* Destination */ 2122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_INT16)(2*SampleCount)); /* Left and right */ 2132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Apply treble boost if required 2172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (pInstance->TE_Active == LVM_TRUE) 2192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 2202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Apply the filter 2222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent FO_2I_D16F32C15_LShx_TRC_WRA_01(&pInstance->pTE_State->TrebleBoost_State, 2242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pProcessed, 2252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pProcessed, 2262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_INT16)SampleCount); 2272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Volume balance 2322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVC_MixSoft_1St_2i_D16C31_SAT(&pInstance->VC_BalanceMix, 2342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pProcessed, 2352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pProcessed, 2362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent SampleCount); 2372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Perform Parametric Spectum Analysis 2402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((pInstance->Params.PSA_Enable == LVM_PSA_ON)&&(pInstance->InstParams.PSA_Included==LVM_PSA_ON)) 2422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 2432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent From2iToMono_16(pProcessed, 2442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pPSAInput, 2452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_INT16) (SampleCount)); 2462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVPSA_Process(pInstance->hPSAInstance, 2482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pInstance->pPSAInput, 2492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_UINT16) (SampleCount), 2502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent AudioTime); 2512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * DC removal 2562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent DC_2I_D16_TRC_WRA_01(&pInstance->DC_RemovalInstance, 2582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pProcessed, 2592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pProcessed, 2602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent (LVM_INT16)SampleCount); 2612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent /* 2662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Manage the output buffer 2672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 2682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_BufferOut(hInstance, 2692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent pOutData, 2702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent &SampleCount); 2712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 2732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return(LVM_SUCCESS); 2752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 276