| /* |
| * Copyright (C) 2003 - 2016 Sony Corporation |
| * |
| * 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. |
| */ |
| |
| #include "ldac.h" |
| |
| |
| /******************************************************************************* |
| Subfunction: Check Saturation |
| *******************************************************************************/ |
| __inline static INT32 check_sature_ldac( |
| INT64 val) |
| { |
| |
| return (INT32)val; |
| } |
| |
| /******************************************************************************* |
| Shift and Round |
| *******************************************************************************/ |
| DECLFUNC INT32 sftrnd_ldac( |
| INT32 in, |
| int shift) |
| { |
| INT64 out; |
| |
| if (shift > 0) { |
| out = ((INT64)in + ((INT64)1 << (shift-1))) >> shift; |
| } |
| else { |
| out = (INT64)in << (-shift); |
| } |
| |
| return check_sature_ldac(out); |
| } |
| |
| |
| /******************************************************************************* |
| Get Bit Length of Value |
| *******************************************************************************/ |
| DECLFUNC int get_bit_length_ldac( |
| INT32 val) |
| { |
| int len; |
| |
| len = 0; |
| while (val > 0) { |
| val >>= 1; |
| len++; |
| } |
| |
| return len; |
| } |
| |
| /******************************************************************************* |
| Get Maximum Absolute Value |
| *******************************************************************************/ |
| DECLFUNC INT32 get_absmax_ldac( |
| INT32 *p_x, |
| int num) |
| { |
| int i; |
| INT32 abmax, val; |
| |
| abmax = abs(p_x[0]); |
| for (i = 1; i < num; i++) { |
| val = abs(p_x[i]); |
| if (abmax < val) { |
| abmax = val; |
| } |
| } |
| |
| return abmax; |
| } |
| |