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 INCLUDE FILES 202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent***********************************************************************************/ 212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "Mixer_private.h" 232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "LVM_Macros.h" 242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/********************************************************************************** 262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent FUNCTION CORE_MIXHARD_2ST_D32C31_SAT 272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent***********************************************************************************/ 28d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#ifdef BUILD_FLOAT 29d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katurivoid Core_MixHard_2St_D32C31_SAT( Mix_2St_Cll_FLOAT_t *pInstance, 30d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri const LVM_FLOAT *src1, 31d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri const LVM_FLOAT *src2, 32d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LVM_FLOAT *dst, 33d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LVM_INT16 n) 34d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri{ 35d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LVM_FLOAT Temp1,Temp2,Temp3; 36d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LVM_INT16 ii; 37d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LVM_FLOAT Current1Short; 38d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LVM_FLOAT Current2Short; 39d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri 40d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri Current1Short = (pInstance->Current1); 41d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri Current2Short = (pInstance->Current2); 422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 43d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri for (ii = n; ii != 0; ii--){ 44d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri Temp1 = *src1++; 45d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri Temp3 = Temp1 * Current1Short; 46d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri Temp2 = *src2++; 47d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri Temp1 = Temp2 * Current2Short; 48d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri Temp2 = (Temp1 / 2.0f) + (Temp3 / 2.0f); 49d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri if (Temp2 > 0.5f) 50d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri Temp2 = 1.0f; 51d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri else if (Temp2 < -0.5f ) 52d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri Temp2 = -1.0f; 53d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri else 54d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri Temp2 = (Temp2 * 2); 55d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri *dst++ = Temp2; 56d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri } 57d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri} 58d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#else 592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid Core_MixHard_2St_D32C31_SAT( Mix_2St_Cll_t *pInstance, 602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const LVM_INT32 *src1, 612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const LVM_INT32 *src2, 622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 *dst, 632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 n) 642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 Temp1,Temp2,Temp3; 662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 ii; 672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 Current1Short; 682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 Current2Short; 692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Current1Short = (LVM_INT16)(pInstance->Current1 >> 16); 712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Current2Short = (LVM_INT16)(pInstance->Current2 >> 16); 722c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 732c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for (ii = n; ii != 0; ii--){ 742c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Temp1=*src1++; 752c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent MUL32x16INTO32(Temp1,Current1Short,Temp3,15) 762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Temp2=*src2++; 772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent MUL32x16INTO32(Temp2,Current2Short,Temp1,15) 782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Temp2=(Temp1>>1)+(Temp3>>1); 792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if (Temp2 > 0x3FFFFFFF) 802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Temp2 = 0x7FFFFFFF; 812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else if (Temp2 < - 0x40000000) 822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Temp2 = 0x80000000; 832c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent Temp2=(Temp2<<1); 852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *dst++ = Temp2; 862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 88d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#endif 892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/**********************************************************************************/ 90