OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2011 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 |
11 /****************************************************************** | 11 /****************************************************************** |
12 | 12 |
13 iLBC Speech Coder ANSI-C Source Code | 13 iLBC Speech Coder ANSI-C Source Code |
14 | 14 |
15 WebRtcIlbcfix_GetCbVec.c | 15 WebRtcIlbcfix_GetCbVec.c |
16 | 16 |
17 ******************************************************************/ | 17 ******************************************************************/ |
18 | 18 |
19 #include "defines.h" | 19 #include "defines.h" |
20 #include "constants.h" | 20 #include "constants.h" |
21 #include "create_augmented_vec.h" | 21 #include "create_augmented_vec.h" |
22 | 22 |
23 /*----------------------------------------------------------------* | 23 /*----------------------------------------------------------------* |
24 * Construct codebook vector for given index. | 24 * Construct codebook vector for given index. |
25 *---------------------------------------------------------------*/ | 25 *---------------------------------------------------------------*/ |
26 | 26 |
27 void WebRtcIlbcfix_GetCbVec( | 27 void WebRtcIlbcfix_GetCbVec( |
28 int16_t *cbvec, /* (o) Constructed codebook vector */ | 28 int16_t *cbvec, /* (o) Constructed codebook vector */ |
29 int16_t *mem, /* (i) Codebook buffer */ | 29 int16_t *mem, /* (i) Codebook buffer */ |
30 int16_t index, /* (i) Codebook index */ | 30 size_t index, /* (i) Codebook index */ |
31 int16_t lMem, /* (i) Length of codebook buffer */ | 31 size_t lMem, /* (i) Length of codebook buffer */ |
32 int16_t cbveclen /* (i) Codebook vector length */ | 32 size_t cbveclen /* (i) Codebook vector length */ |
33 ){ | 33 ){ |
34 int16_t k, base_size; | 34 size_t k, base_size; |
35 int16_t lag; | 35 size_t lag; |
36 /* Stack based */ | 36 /* Stack based */ |
37 int16_t tempbuff2[SUBL+5]; | 37 int16_t tempbuff2[SUBL+5]; |
38 | 38 |
39 /* Determine size of codebook sections */ | 39 /* Determine size of codebook sections */ |
40 | 40 |
41 base_size=lMem-cbveclen+1; | 41 base_size=lMem-cbveclen+1; |
42 | 42 |
43 if (cbveclen==SUBL) { | 43 if (cbveclen==SUBL) { |
44 base_size += cbveclen / 2; | 44 base_size += cbveclen / 2; |
45 } | 45 } |
46 | 46 |
47 /* No filter -> First codebook section */ | 47 /* No filter -> First codebook section */ |
48 | 48 |
49 if (index<lMem-cbveclen+1) { | 49 if (index<lMem-cbveclen+1) { |
50 | 50 |
51 /* first non-interpolated vectors */ | 51 /* first non-interpolated vectors */ |
52 | 52 |
53 k=index+cbveclen; | 53 k=index+cbveclen; |
54 /* get vector */ | 54 /* get vector */ |
55 WEBRTC_SPL_MEMCPY_W16(cbvec, mem+lMem-k, cbveclen); | 55 WEBRTC_SPL_MEMCPY_W16(cbvec, mem+lMem-k, cbveclen); |
56 | 56 |
57 } else if (index < base_size) { | 57 } else if (index < base_size) { |
58 | 58 |
59 /* Calculate lag */ | 59 /* Calculate lag */ |
60 | 60 |
61 k = (int16_t)(2 * (index - (lMem - cbveclen + 1))) + cbveclen; | 61 k = (2 * (index - (lMem - cbveclen + 1))) + cbveclen; |
62 | 62 |
63 lag = k / 2; | 63 lag = k / 2; |
64 | 64 |
65 WebRtcIlbcfix_CreateAugmentedVec(lag, mem+lMem, cbvec); | 65 WebRtcIlbcfix_CreateAugmentedVec(lag, mem+lMem, cbvec); |
66 | 66 |
67 } | 67 } |
68 | 68 |
69 /* Higher codebbok section based on filtering */ | 69 /* Higher codebbok section based on filtering */ |
70 | 70 |
71 else { | 71 else { |
72 | 72 |
73 int16_t memIndTest; | 73 size_t memIndTest; |
74 | 74 |
75 /* first non-interpolated vectors */ | 75 /* first non-interpolated vectors */ |
76 | 76 |
77 if (index-base_size<lMem-cbveclen+1) { | 77 if (index-base_size<lMem-cbveclen+1) { |
78 | 78 |
79 /* Set up filter memory, stuff zeros outside memory buffer */ | 79 /* Set up filter memory, stuff zeros outside memory buffer */ |
80 | 80 |
81 memIndTest = lMem-(index-base_size+cbveclen); | 81 memIndTest = lMem-(index-base_size+cbveclen); |
82 | 82 |
83 WebRtcSpl_MemSetW16(mem-CB_HALFFILTERLEN, 0, CB_HALFFILTERLEN); | 83 WebRtcSpl_MemSetW16(mem-CB_HALFFILTERLEN, 0, CB_HALFFILTERLEN); |
84 WebRtcSpl_MemSetW16(mem+lMem, 0, CB_HALFFILTERLEN); | 84 WebRtcSpl_MemSetW16(mem+lMem, 0, CB_HALFFILTERLEN); |
85 | 85 |
86 /* do filtering to get the codebook vector */ | 86 /* do filtering to get the codebook vector */ |
87 | 87 |
88 WebRtcSpl_FilterMAFastQ12( | 88 WebRtcSpl_FilterMAFastQ12( |
89 &mem[memIndTest+4], cbvec, (int16_t*)WebRtcIlbcfix_kCbFiltersRev, | 89 &mem[memIndTest+4], cbvec, (int16_t*)WebRtcIlbcfix_kCbFiltersRev, |
90 CB_FILTERLEN, cbveclen); | 90 CB_FILTERLEN, cbveclen); |
91 } | 91 } |
92 | 92 |
93 /* interpolated vectors */ | 93 /* interpolated vectors */ |
94 | 94 |
95 else { | 95 else { |
96 /* Stuff zeros outside memory buffer */ | 96 /* Stuff zeros outside memory buffer */ |
97 memIndTest = lMem-cbveclen-CB_FILTERLEN; | 97 memIndTest = lMem-cbveclen-CB_FILTERLEN; |
98 WebRtcSpl_MemSetW16(mem+lMem, 0, CB_HALFFILTERLEN); | 98 WebRtcSpl_MemSetW16(mem+lMem, 0, CB_HALFFILTERLEN); |
99 | 99 |
100 /* do filtering */ | 100 /* do filtering */ |
101 WebRtcSpl_FilterMAFastQ12( | 101 WebRtcSpl_FilterMAFastQ12( |
102 &mem[memIndTest+7], tempbuff2, (int16_t*)WebRtcIlbcfix_kCbFiltersRev, | 102 &mem[memIndTest+7], tempbuff2, (int16_t*)WebRtcIlbcfix_kCbFiltersRev, |
103 CB_FILTERLEN, (int16_t)(cbveclen+5)); | 103 CB_FILTERLEN, cbveclen+5); |
104 | 104 |
105 /* Calculate lag index */ | 105 /* Calculate lag index */ |
106 lag = (cbveclen<<1)-20+index-base_size-lMem-1; | 106 lag = (cbveclen<<1)-20+index-base_size-lMem-1; |
107 | 107 |
108 WebRtcIlbcfix_CreateAugmentedVec(lag, tempbuff2+SUBL+5, cbvec); | 108 WebRtcIlbcfix_CreateAugmentedVec(lag, tempbuff2+SUBL+5, cbvec); |
109 } | 109 } |
110 } | 110 } |
111 } | 111 } |
OLD | NEW |