| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 | 26 |
| 27 #include "webrtc/common_audio/signal_processing/include/signal_processing_librar
y.h" | 27 #include "webrtc/common_audio/signal_processing/include/signal_processing_librar
y.h" |
| 28 | 28 |
| 29 #include <stdlib.h> | 29 #include <stdlib.h> |
| 30 | 30 |
| 31 // TODO(bjorn/kma): Consolidate function pairs (e.g. combine | 31 // TODO(bjorn/kma): Consolidate function pairs (e.g. combine |
| 32 // WebRtcSpl_MaxAbsValueW16C and WebRtcSpl_MaxAbsIndexW16 into a single one.) | 32 // WebRtcSpl_MaxAbsValueW16C and WebRtcSpl_MaxAbsIndexW16 into a single one.) |
| 33 // TODO(kma): Move the next six functions into min_max_operations_c.c. | 33 // TODO(kma): Move the next six functions into min_max_operations_c.c. |
| 34 | 34 |
| 35 // Maximum absolute value of word16 vector. C version for generic platforms. | 35 // Maximum absolute value of word16 vector. C version for generic platforms. |
| 36 int16_t WebRtcSpl_MaxAbsValueW16C(const int16_t* vector, int length) { | 36 int16_t WebRtcSpl_MaxAbsValueW16C(const int16_t* vector, size_t length) { |
| 37 int i = 0, absolute = 0, maximum = 0; | 37 size_t i = 0; |
| 38 int absolute = 0, maximum = 0; |
| 38 | 39 |
| 39 if (vector == NULL || length <= 0) { | 40 if (vector == NULL || length == 0) { |
| 40 return -1; | 41 return -1; |
| 41 } | 42 } |
| 42 | 43 |
| 43 for (i = 0; i < length; i++) { | 44 for (i = 0; i < length; i++) { |
| 44 absolute = abs((int)vector[i]); | 45 absolute = abs((int)vector[i]); |
| 45 | 46 |
| 46 if (absolute > maximum) { | 47 if (absolute > maximum) { |
| 47 maximum = absolute; | 48 maximum = absolute; |
| 48 } | 49 } |
| 49 } | 50 } |
| 50 | 51 |
| 51 // Guard the case for abs(-32768). | 52 // Guard the case for abs(-32768). |
| 52 if (maximum > WEBRTC_SPL_WORD16_MAX) { | 53 if (maximum > WEBRTC_SPL_WORD16_MAX) { |
| 53 maximum = WEBRTC_SPL_WORD16_MAX; | 54 maximum = WEBRTC_SPL_WORD16_MAX; |
| 54 } | 55 } |
| 55 | 56 |
| 56 return (int16_t)maximum; | 57 return (int16_t)maximum; |
| 57 } | 58 } |
| 58 | 59 |
| 59 // Maximum absolute value of word32 vector. C version for generic platforms. | 60 // Maximum absolute value of word32 vector. C version for generic platforms. |
| 60 int32_t WebRtcSpl_MaxAbsValueW32C(const int32_t* vector, int length) { | 61 int32_t WebRtcSpl_MaxAbsValueW32C(const int32_t* vector, size_t length) { |
| 61 // Use uint32_t for the local variables, to accommodate the return value | 62 // Use uint32_t for the local variables, to accommodate the return value |
| 62 // of abs(0x80000000), which is 0x80000000. | 63 // of abs(0x80000000), which is 0x80000000. |
| 63 | 64 |
| 64 uint32_t absolute = 0, maximum = 0; | 65 uint32_t absolute = 0, maximum = 0; |
| 65 int i = 0; | 66 size_t i = 0; |
| 66 | 67 |
| 67 if (vector == NULL || length <= 0) { | 68 if (vector == NULL || length == 0) { |
| 68 return -1; | 69 return -1; |
| 69 } | 70 } |
| 70 | 71 |
| 71 for (i = 0; i < length; i++) { | 72 for (i = 0; i < length; i++) { |
| 72 absolute = abs((int)vector[i]); | 73 absolute = abs((int)vector[i]); |
| 73 if (absolute > maximum) { | 74 if (absolute > maximum) { |
| 74 maximum = absolute; | 75 maximum = absolute; |
| 75 } | 76 } |
| 76 } | 77 } |
| 77 | 78 |
| 78 maximum = WEBRTC_SPL_MIN(maximum, WEBRTC_SPL_WORD32_MAX); | 79 maximum = WEBRTC_SPL_MIN(maximum, WEBRTC_SPL_WORD32_MAX); |
| 79 | 80 |
| 80 return (int32_t)maximum; | 81 return (int32_t)maximum; |
| 81 } | 82 } |
| 82 | 83 |
| 83 // Maximum value of word16 vector. C version for generic platforms. | 84 // Maximum value of word16 vector. C version for generic platforms. |
| 84 int16_t WebRtcSpl_MaxValueW16C(const int16_t* vector, int length) { | 85 int16_t WebRtcSpl_MaxValueW16C(const int16_t* vector, size_t length) { |
| 85 int16_t maximum = WEBRTC_SPL_WORD16_MIN; | 86 int16_t maximum = WEBRTC_SPL_WORD16_MIN; |
| 86 int i = 0; | 87 size_t i = 0; |
| 87 | 88 |
| 88 if (vector == NULL || length <= 0) { | 89 if (vector == NULL || length == 0) { |
| 89 return maximum; | 90 return maximum; |
| 90 } | 91 } |
| 91 | 92 |
| 92 for (i = 0; i < length; i++) { | 93 for (i = 0; i < length; i++) { |
| 93 if (vector[i] > maximum) | 94 if (vector[i] > maximum) |
| 94 maximum = vector[i]; | 95 maximum = vector[i]; |
| 95 } | 96 } |
| 96 return maximum; | 97 return maximum; |
| 97 } | 98 } |
| 98 | 99 |
| 99 // Maximum value of word32 vector. C version for generic platforms. | 100 // Maximum value of word32 vector. C version for generic platforms. |
| 100 int32_t WebRtcSpl_MaxValueW32C(const int32_t* vector, int length) { | 101 int32_t WebRtcSpl_MaxValueW32C(const int32_t* vector, size_t length) { |
| 101 int32_t maximum = WEBRTC_SPL_WORD32_MIN; | 102 int32_t maximum = WEBRTC_SPL_WORD32_MIN; |
| 102 int i = 0; | 103 size_t i = 0; |
| 103 | 104 |
| 104 if (vector == NULL || length <= 0) { | 105 if (vector == NULL || length == 0) { |
| 105 return maximum; | 106 return maximum; |
| 106 } | 107 } |
| 107 | 108 |
| 108 for (i = 0; i < length; i++) { | 109 for (i = 0; i < length; i++) { |
| 109 if (vector[i] > maximum) | 110 if (vector[i] > maximum) |
| 110 maximum = vector[i]; | 111 maximum = vector[i]; |
| 111 } | 112 } |
| 112 return maximum; | 113 return maximum; |
| 113 } | 114 } |
| 114 | 115 |
| 115 // Minimum value of word16 vector. C version for generic platforms. | 116 // Minimum value of word16 vector. C version for generic platforms. |
| 116 int16_t WebRtcSpl_MinValueW16C(const int16_t* vector, int length) { | 117 int16_t WebRtcSpl_MinValueW16C(const int16_t* vector, size_t length) { |
| 117 int16_t minimum = WEBRTC_SPL_WORD16_MAX; | 118 int16_t minimum = WEBRTC_SPL_WORD16_MAX; |
| 118 int i = 0; | 119 size_t i = 0; |
| 119 | 120 |
| 120 if (vector == NULL || length <= 0) { | 121 if (vector == NULL || length == 0) { |
| 121 return minimum; | 122 return minimum; |
| 122 } | 123 } |
| 123 | 124 |
| 124 for (i = 0; i < length; i++) { | 125 for (i = 0; i < length; i++) { |
| 125 if (vector[i] < minimum) | 126 if (vector[i] < minimum) |
| 126 minimum = vector[i]; | 127 minimum = vector[i]; |
| 127 } | 128 } |
| 128 return minimum; | 129 return minimum; |
| 129 } | 130 } |
| 130 | 131 |
| 131 // Minimum value of word32 vector. C version for generic platforms. | 132 // Minimum value of word32 vector. C version for generic platforms. |
| 132 int32_t WebRtcSpl_MinValueW32C(const int32_t* vector, int length) { | 133 int32_t WebRtcSpl_MinValueW32C(const int32_t* vector, size_t length) { |
| 133 int32_t minimum = WEBRTC_SPL_WORD32_MAX; | 134 int32_t minimum = WEBRTC_SPL_WORD32_MAX; |
| 134 int i = 0; | 135 size_t i = 0; |
| 135 | 136 |
| 136 if (vector == NULL || length <= 0) { | 137 if (vector == NULL || length == 0) { |
| 137 return minimum; | 138 return minimum; |
| 138 } | 139 } |
| 139 | 140 |
| 140 for (i = 0; i < length; i++) { | 141 for (i = 0; i < length; i++) { |
| 141 if (vector[i] < minimum) | 142 if (vector[i] < minimum) |
| 142 minimum = vector[i]; | 143 minimum = vector[i]; |
| 143 } | 144 } |
| 144 return minimum; | 145 return minimum; |
| 145 } | 146 } |
| 146 | 147 |
| 147 // Index of maximum absolute value in a word16 vector. | 148 // Index of maximum absolute value in a word16 vector. |
| 148 int WebRtcSpl_MaxAbsIndexW16(const int16_t* vector, int length) { | 149 int WebRtcSpl_MaxAbsIndexW16(const int16_t* vector, size_t length) { |
| 149 // Use type int for local variables, to accomodate the value of abs(-32768). | 150 // Use type int for local variables, to accomodate the value of abs(-32768). |
| 150 | 151 |
| 151 int i = 0, absolute = 0, maximum = 0, index = 0; | 152 size_t i = 0, index = 0; |
| 153 int absolute = 0, maximum = 0; |
| 152 | 154 |
| 153 if (vector == NULL || length <= 0) { | 155 if (vector == NULL || length == 0) { |
| 154 return -1; | 156 return -1; |
| 155 } | 157 } |
| 156 | 158 |
| 157 for (i = 0; i < length; i++) { | 159 for (i = 0; i < length; i++) { |
| 158 absolute = abs((int)vector[i]); | 160 absolute = abs((int)vector[i]); |
| 159 | 161 |
| 160 if (absolute > maximum) { | 162 if (absolute > maximum) { |
| 161 maximum = absolute; | 163 maximum = absolute; |
| 162 index = i; | 164 index = i; |
| 163 } | 165 } |
| 164 } | 166 } |
| 165 | 167 |
| 166 return index; | 168 return (int)index; |
| 167 } | 169 } |
| 168 | 170 |
| 169 // Index of maximum value in a word16 vector. | 171 // Index of maximum value in a word16 vector. |
| 170 int WebRtcSpl_MaxIndexW16(const int16_t* vector, int length) { | 172 int WebRtcSpl_MaxIndexW16(const int16_t* vector, size_t length) { |
| 171 int i = 0, index = 0; | 173 size_t i = 0, index = 0; |
| 172 int16_t maximum = WEBRTC_SPL_WORD16_MIN; | 174 int16_t maximum = WEBRTC_SPL_WORD16_MIN; |
| 173 | 175 |
| 174 if (vector == NULL || length <= 0) { | 176 if (vector == NULL || length == 0) { |
| 175 return -1; | 177 return -1; |
| 176 } | 178 } |
| 177 | 179 |
| 178 for (i = 0; i < length; i++) { | 180 for (i = 0; i < length; i++) { |
| 179 if (vector[i] > maximum) { | 181 if (vector[i] > maximum) { |
| 180 maximum = vector[i]; | 182 maximum = vector[i]; |
| 181 index = i; | 183 index = i; |
| 182 } | 184 } |
| 183 } | 185 } |
| 184 | 186 |
| 185 return index; | 187 return (int)index; |
| 186 } | 188 } |
| 187 | 189 |
| 188 // Index of maximum value in a word32 vector. | 190 // Index of maximum value in a word32 vector. |
| 189 int WebRtcSpl_MaxIndexW32(const int32_t* vector, int length) { | 191 int WebRtcSpl_MaxIndexW32(const int32_t* vector, size_t length) { |
| 190 int i = 0, index = 0; | 192 size_t i = 0, index = 0; |
| 191 int32_t maximum = WEBRTC_SPL_WORD32_MIN; | 193 int32_t maximum = WEBRTC_SPL_WORD32_MIN; |
| 192 | 194 |
| 193 if (vector == NULL || length <= 0) { | 195 if (vector == NULL || length == 0) { |
| 194 return -1; | 196 return -1; |
| 195 } | 197 } |
| 196 | 198 |
| 197 for (i = 0; i < length; i++) { | 199 for (i = 0; i < length; i++) { |
| 198 if (vector[i] > maximum) { | 200 if (vector[i] > maximum) { |
| 199 maximum = vector[i]; | 201 maximum = vector[i]; |
| 200 index = i; | 202 index = i; |
| 201 } | 203 } |
| 202 } | 204 } |
| 203 | 205 |
| 204 return index; | 206 return (int)index; |
| 205 } | 207 } |
| 206 | 208 |
| 207 // Index of minimum value in a word16 vector. | 209 // Index of minimum value in a word16 vector. |
| 208 int WebRtcSpl_MinIndexW16(const int16_t* vector, int length) { | 210 int WebRtcSpl_MinIndexW16(const int16_t* vector, size_t length) { |
| 209 int i = 0, index = 0; | 211 size_t i = 0, index = 0; |
| 210 int16_t minimum = WEBRTC_SPL_WORD16_MAX; | 212 int16_t minimum = WEBRTC_SPL_WORD16_MAX; |
| 211 | 213 |
| 212 if (vector == NULL || length <= 0) { | 214 if (vector == NULL || length == 0) { |
| 213 return -1; | 215 return -1; |
| 214 } | 216 } |
| 215 | 217 |
| 216 for (i = 0; i < length; i++) { | 218 for (i = 0; i < length; i++) { |
| 217 if (vector[i] < minimum) { | 219 if (vector[i] < minimum) { |
| 218 minimum = vector[i]; | 220 minimum = vector[i]; |
| 219 index = i; | 221 index = i; |
| 220 } | 222 } |
| 221 } | 223 } |
| 222 | 224 |
| 223 return index; | 225 return (int)index; |
| 224 } | 226 } |
| 225 | 227 |
| 226 // Index of minimum value in a word32 vector. | 228 // Index of minimum value in a word32 vector. |
| 227 int WebRtcSpl_MinIndexW32(const int32_t* vector, int length) { | 229 int WebRtcSpl_MinIndexW32(const int32_t* vector, size_t length) { |
| 228 int i = 0, index = 0; | 230 size_t i = 0, index = 0; |
| 229 int32_t minimum = WEBRTC_SPL_WORD32_MAX; | 231 int32_t minimum = WEBRTC_SPL_WORD32_MAX; |
| 230 | 232 |
| 231 if (vector == NULL || length <= 0) { | 233 if (vector == NULL || length == 0) { |
| 232 return -1; | 234 return -1; |
| 233 } | 235 } |
| 234 | 236 |
| 235 for (i = 0; i < length; i++) { | 237 for (i = 0; i < length; i++) { |
| 236 if (vector[i] < minimum) { | 238 if (vector[i] < minimum) { |
| 237 minimum = vector[i]; | 239 minimum = vector[i]; |
| 238 index = i; | 240 index = i; |
| 239 } | 241 } |
| 240 } | 242 } |
| 241 | 243 |
| 242 return index; | 244 return (int)index; |
| 243 } | 245 } |
| OLD | NEW |