1*aef9bcd9SKiyoung Kim /* 2*aef9bcd9SKiyoung Kim * Copyright (C) 2003 - 2016 Sony Corporation 3*aef9bcd9SKiyoung Kim * 4*aef9bcd9SKiyoung Kim * Licensed under the Apache License, Version 2.0 (the "License"); 5*aef9bcd9SKiyoung Kim * you may not use this file except in compliance with the License. 6*aef9bcd9SKiyoung Kim * You may obtain a copy of the License at 7*aef9bcd9SKiyoung Kim * 8*aef9bcd9SKiyoung Kim * http://www.apache.org/licenses/LICENSE-2.0 9*aef9bcd9SKiyoung Kim * 10*aef9bcd9SKiyoung Kim * Unless required by applicable law or agreed to in writing, software 11*aef9bcd9SKiyoung Kim * distributed under the License is distributed on an "AS IS" BASIS, 12*aef9bcd9SKiyoung Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*aef9bcd9SKiyoung Kim * See the License for the specific language governing permissions and 14*aef9bcd9SKiyoung Kim * limitations under the License. 15*aef9bcd9SKiyoung Kim */ 16*aef9bcd9SKiyoung Kim 17*aef9bcd9SKiyoung Kim #include "ldac.h" 18*aef9bcd9SKiyoung Kim 19*aef9bcd9SKiyoung Kim 20*aef9bcd9SKiyoung Kim /******************************************************************************* 21*aef9bcd9SKiyoung Kim Subfunction: Check Saturation 22*aef9bcd9SKiyoung Kim *******************************************************************************/ check_sature_ldac(INT64 val)23*aef9bcd9SKiyoung Kim__inline static INT32 check_sature_ldac( 24*aef9bcd9SKiyoung Kim INT64 val) 25*aef9bcd9SKiyoung Kim { 26*aef9bcd9SKiyoung Kim 27*aef9bcd9SKiyoung Kim return (INT32)val; 28*aef9bcd9SKiyoung Kim } 29*aef9bcd9SKiyoung Kim 30*aef9bcd9SKiyoung Kim /******************************************************************************* 31*aef9bcd9SKiyoung Kim Shift and Round 32*aef9bcd9SKiyoung Kim *******************************************************************************/ sftrnd_ldac(INT32 in,int shift)33*aef9bcd9SKiyoung KimDECLFUNC INT32 sftrnd_ldac( 34*aef9bcd9SKiyoung Kim INT32 in, 35*aef9bcd9SKiyoung Kim int shift) 36*aef9bcd9SKiyoung Kim { 37*aef9bcd9SKiyoung Kim INT64 out; 38*aef9bcd9SKiyoung Kim 39*aef9bcd9SKiyoung Kim if (shift > 0) { 40*aef9bcd9SKiyoung Kim out = ((INT64)in + ((INT64)1 << (shift-1))) >> shift; 41*aef9bcd9SKiyoung Kim } 42*aef9bcd9SKiyoung Kim else { 43*aef9bcd9SKiyoung Kim out = (INT64)in << (-shift); 44*aef9bcd9SKiyoung Kim } 45*aef9bcd9SKiyoung Kim 46*aef9bcd9SKiyoung Kim return check_sature_ldac(out); 47*aef9bcd9SKiyoung Kim } 48*aef9bcd9SKiyoung Kim 49*aef9bcd9SKiyoung Kim 50*aef9bcd9SKiyoung Kim /******************************************************************************* 51*aef9bcd9SKiyoung Kim Get Bit Length of Value 52*aef9bcd9SKiyoung Kim *******************************************************************************/ get_bit_length_ldac(INT32 val)53*aef9bcd9SKiyoung KimDECLFUNC int get_bit_length_ldac( 54*aef9bcd9SKiyoung Kim INT32 val) 55*aef9bcd9SKiyoung Kim { 56*aef9bcd9SKiyoung Kim int len; 57*aef9bcd9SKiyoung Kim 58*aef9bcd9SKiyoung Kim len = 0; 59*aef9bcd9SKiyoung Kim while (val > 0) { 60*aef9bcd9SKiyoung Kim val >>= 1; 61*aef9bcd9SKiyoung Kim len++; 62*aef9bcd9SKiyoung Kim } 63*aef9bcd9SKiyoung Kim 64*aef9bcd9SKiyoung Kim return len; 65*aef9bcd9SKiyoung Kim } 66*aef9bcd9SKiyoung Kim 67*aef9bcd9SKiyoung Kim /******************************************************************************* 68*aef9bcd9SKiyoung Kim Get Maximum Absolute Value 69*aef9bcd9SKiyoung Kim *******************************************************************************/ get_absmax_ldac(INT32 * p_x,int num)70*aef9bcd9SKiyoung KimDECLFUNC INT32 get_absmax_ldac( 71*aef9bcd9SKiyoung Kim INT32 *p_x, 72*aef9bcd9SKiyoung Kim int num) 73*aef9bcd9SKiyoung Kim { 74*aef9bcd9SKiyoung Kim int i; 75*aef9bcd9SKiyoung Kim INT32 abmax, val; 76*aef9bcd9SKiyoung Kim 77*aef9bcd9SKiyoung Kim abmax = abs(p_x[0]); 78*aef9bcd9SKiyoung Kim for (i = 1; i < num; i++) { 79*aef9bcd9SKiyoung Kim val = abs(p_x[i]); 80*aef9bcd9SKiyoung Kim if (abmax < val) { 81*aef9bcd9SKiyoung Kim abmax = val; 82*aef9bcd9SKiyoung Kim } 83*aef9bcd9SKiyoung Kim } 84*aef9bcd9SKiyoung Kim 85*aef9bcd9SKiyoung Kim return abmax; 86*aef9bcd9SKiyoung Kim } 87*aef9bcd9SKiyoung Kim 88