Git init
[external/opencore-amr.git] / opencore / codecs_v2 / audio / gsm_amr / amr_nb / common / src / negate.cpp
1 /* ------------------------------------------------------------------
2  * Copyright (C) 1998-2009 PacketVideo
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13  * express or implied.
14  * See the License for the specific language governing permissions
15  * and limitations under the License.
16  * -------------------------------------------------------------------
17  */
18 /****************************************************************************************
19 Portions of this file are derived from the following 3GPP standard:
20
21     3GPP TS 26.073
22     ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec
23     Available from http://www.3gpp.org
24
25 (C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC)
26 Permission to distribute, modify and use this file under the standard license
27 terms listed above has been obtained from the copyright holder.
28 ****************************************************************************************/
29 /*
30
31  Filename: negate.cpp
32
33 ------------------------------------------------------------------------------
34  INPUT AND OUTPUT DEFINITIONS
35
36  Inputs:
37     var1 = 16 bit short signed integer (Word16) whose value falls in
38            the range : 0xffff 8000 <= var1 <= 0x0000 7fff.
39
40  Local Stores/Buffers/Pointers Needed:
41     None
42
43  Global Stores/Buffers/Pointers Needed:
44     None
45
46  Outputs:
47     var1 = negated value of input (Word16)
48
49  Pointers and Buffers Modified:
50     None
51
52  Local Stores Modified:
53     None
54
55  Global Stores Modified:
56     None
57
58 ------------------------------------------------------------------------------
59  FUNCTION DESCRIPTION
60
61  This function negates var1 with saturation; saturate in the case where input
62  is -32768: negate(var1) = sub(0,var1).
63
64 ------------------------------------------------------------------------------
65  REQUIREMENTS
66
67  None
68
69 ------------------------------------------------------------------------------
70  REFERENCES
71
72  [1] basicop2.c, ETS Version 2.0.0, February 8, 1999
73
74 ------------------------------------------------------------------------------
75  PSEUDO-CODE
76
77 Word16 negate (Word16 var1)
78 {
79     Word16 var_out;
80
81     var_out = (var1 == MIN_16) ? MAX_16 : -var1;
82 #if (WMOPS)
83     multiCounter[currCounter].negate++;
84 #endif
85     return (var_out);
86 }
87
88 ------------------------------------------------------------------------------
89 */
90
91
92 /*----------------------------------------------------------------------------
93 ; INCLUDES
94 ----------------------------------------------------------------------------*/
95 #include    "negate.h"
96
97 /*----------------------------------------------------------------------------
98 ; MACROS
99 ; Define module specific macros here
100 ----------------------------------------------------------------------------*/
101
102 /*----------------------------------------------------------------------------
103 ; DEFINES
104 ; Include all pre-processor statements here. Include conditional
105 ; compile variables also.
106 ----------------------------------------------------------------------------*/
107
108 /*----------------------------------------------------------------------------
109 ; LOCAL FUNCTION DEFINITIONS
110 ; Function Prototype declaration
111 ----------------------------------------------------------------------------*/
112
113 /*----------------------------------------------------------------------------
114 ; LOCAL STORE/BUFFER/POINTER DEFINITIONS
115 ; Variable declaration - defined here and used outside this module
116 ----------------------------------------------------------------------------*/
117
118 /*----------------------------------------------------------------------------
119 ; EXTERNAL FUNCTION REFERENCES
120 ; Declare functions defined elsewhere and referenced in this module
121 ----------------------------------------------------------------------------*/
122
123 /*----------------------------------------------------------------------------
124 ; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
125 ; Declare variables used in this module but defined elsewhere
126 ----------------------------------------------------------------------------*/
127
128 /*----------------------------------------------------------------------------
129 ; FUNCTION CODE
130 ----------------------------------------------------------------------------*/
131 Word16 negate(register Word16 var1)
132 {
133     /*----------------------------------------------------------------------------
134     ; Define all local variables
135     ----------------------------------------------------------------------------*/
136
137     /*----------------------------------------------------------------------------
138     ; Function body here
139     ----------------------------------------------------------------------------*/
140     var1 = (var1 == MIN_16) ? MAX_16 : -var1;
141
142     /*----------------------------------------------------------------------------
143     ; Return nothing or data or data pointer
144     ----------------------------------------------------------------------------*/
145     return (var1);
146 }