1 /*
2  * Copyright (C) 2004-2010 NXP Software
3  * Copyright (C) 2010 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 /**********************************************************************************
19 
20      %created_by:    sra % (CM/S)
21      %name:          Mac3s_Sat_16x16.c % (CM/S)
22      %version:       1 % (CM/S)
23      %date_created:  Fri Nov 13 12:07:13 2009 % (CM/S)
24 
25 ***********************************************************************************/
26 
27 /**********************************************************************************
28    INCLUDE FILES
29 ***********************************************************************************/
30 
31 #include "VectorArithmetic.h"
32 #include "LVM_Macros.h"
33 
34 /**********************************************************************************
35    FUNCTION Mac3S_16X16
36 ***********************************************************************************/
37 
Mac3s_Sat_16x16(const LVM_INT16 * src,const LVM_INT16 val,LVM_INT16 * dst,LVM_INT16 n)38 void Mac3s_Sat_16x16( const LVM_INT16 *src,
39                      const LVM_INT16 val,
40                      LVM_INT16 *dst,
41                      LVM_INT16 n)
42 {
43     LVM_INT16 ii;
44     LVM_INT16 srcval;
45     LVM_INT32 Temp,dInVal;
46 
47 
48     for (ii = n; ii != 0; ii--)
49     {
50         srcval=*src;
51         src++;
52 
53         Temp = (srcval *val)>>15;
54 
55         dInVal  = (LVM_INT32)*dst;
56 
57         Temp = Temp + dInVal;
58 
59         if (Temp > 0x00007FFF)
60         {
61             *dst = 0x7FFF;
62         }
63         else if (Temp < -0x00008000)
64         {
65             *dst = - 0x8000;
66         }
67         else
68         {
69             *dst = (LVM_INT16)Temp;
70         }
71 
72         dst++;
73     }
74 
75     return;
76 }
77 
78 /**********************************************************************************/
79 
80 
81 
82