Note: We no longer publish the latest version of our code here. We primarily use a kumc-bmi github organization. The heron ETL repository, in particular, is not public. Peers in the informatics community should see MultiSiteDev for details on requesting access.
source:
webrtc/webrtc/common_audio/signal_processing/ilbc_specific_functions.c
@
0:4bda6873e34c
Last change on this file since 0:4bda6873e34c was 0:4bda6873e34c, checked in by , 6 years ago | |
---|---|
File size: 3.2 KB |
Line | |
---|---|
1 | /* |
2 | * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 | * |
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 |
6 | * tree. An additional intellectual property rights grant can be found |
7 | * in the file PATENTS. All contributing project authors may |
8 | * be found in the AUTHORS file in the root of the source tree. |
9 | */ |
10 | |
11 | |
12 | /* |
13 | * This file contains implementations of the iLBC specific functions |
14 | * WebRtcSpl_ReverseOrderMultArrayElements() |
15 | * WebRtcSpl_ElementwiseVectorMult() |
16 | * WebRtcSpl_AddVectorsAndShift() |
17 | * WebRtcSpl_AddAffineVectorToVector() |
18 | * WebRtcSpl_AffineTransformVector() |
19 | * |
20 | */ |
21 | |
22 | #include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" |
23 | |
24 | void WebRtcSpl_ReverseOrderMultArrayElements(int16_t *out, const int16_t *in, |
25 | const int16_t *win, |
26 | int16_t vector_length, |
27 | int16_t right_shifts) |
28 | { |
29 | int i; |
30 | int16_t *outptr = out; |
31 | const int16_t *inptr = in; |
32 | const int16_t *winptr = win; |
33 | for (i = 0; i < vector_length; i++) |
34 | { |
35 | (*outptr++) = (int16_t)WEBRTC_SPL_MUL_16_16_RSFT(*inptr++, |
36 | *winptr--, right_shifts); |
37 | } |
38 | } |
39 | |
40 | void WebRtcSpl_ElementwiseVectorMult(int16_t *out, const int16_t *in, |
41 | const int16_t *win, int16_t vector_length, |
42 | int16_t right_shifts) |
43 | { |
44 | int i; |
45 | int16_t *outptr = out; |
46 | const int16_t *inptr = in; |
47 | const int16_t *winptr = win; |
48 | for (i = 0; i < vector_length; i++) |
49 | { |
50 | (*outptr++) = (int16_t)WEBRTC_SPL_MUL_16_16_RSFT(*inptr++, |
51 | *winptr++, right_shifts); |
52 | } |
53 | } |
54 | |
55 | void WebRtcSpl_AddVectorsAndShift(int16_t *out, const int16_t *in1, |
56 | const int16_t *in2, int16_t vector_length, |
57 | int16_t right_shifts) |
58 | { |
59 | int i; |
60 | int16_t *outptr = out; |
61 | const int16_t *in1ptr = in1; |
62 | const int16_t *in2ptr = in2; |
63 | for (i = vector_length; i > 0; i--) |
64 | { |
65 | (*outptr++) = (int16_t)(((*in1ptr++) + (*in2ptr++)) >> right_shifts); |
66 | } |
67 | } |
68 | |
69 | void WebRtcSpl_AddAffineVectorToVector(int16_t *out, int16_t *in, |
70 | int16_t gain, int32_t add_constant, |
71 | int16_t right_shifts, int vector_length) |
72 | { |
73 | int16_t *inPtr; |
74 | int16_t *outPtr; |
75 | int i; |
76 | |
77 | inPtr = in; |
78 | outPtr = out; |
79 | for (i = 0; i < vector_length; i++) |
80 | { |
81 | (*outPtr++) += (int16_t)((WEBRTC_SPL_MUL_16_16((*inPtr++), gain) |
82 | + (int32_t)add_constant) >> right_shifts); |
83 | } |
84 | } |
85 | |
86 | void WebRtcSpl_AffineTransformVector(int16_t *out, int16_t *in, |
87 | int16_t gain, int32_t add_constant, |
88 | int16_t right_shifts, int vector_length) |
89 | { |
90 | int16_t *inPtr; |
91 | int16_t *outPtr; |
92 | int i; |
93 | |
94 | inPtr = in; |
95 | outPtr = out; |
96 | for (i = 0; i < vector_length; i++) |
97 | { |
98 | (*outPtr++) = (int16_t)((WEBRTC_SPL_MUL_16_16((*inPtr++), gain) |
99 | + (int32_t)add_constant) >> right_shifts); |
100 | } |
101 | } |
Note: See TracBrowser
for help on using the repository browser.