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 |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 | 248 |
249 for (n = 0; n < FRAMESAMPLES/8; n++) | 249 for (n = 0; n < FRAMESAMPLES/8; n++) |
250 diffQ16[n] = (CS_ptrQ9[n] * (CorrQ11[1] >> shftVal) + 2) >> 2; | 250 diffQ16[n] = (CS_ptrQ9[n] * (CorrQ11[1] >> shftVal) + 2) >> 2; |
251 for (k = 2; k < AR_ORDER; k += 2) { | 251 for (k = 2; k < AR_ORDER; k += 2) { |
252 CS_ptrQ9 = WebRtcIsacfix_kCos[k]; | 252 CS_ptrQ9 = WebRtcIsacfix_kCos[k]; |
253 for (n = 0; n < FRAMESAMPLES/8; n++) | 253 for (n = 0; n < FRAMESAMPLES/8; n++) |
254 diffQ16[n] += (CS_ptrQ9[n] * (CorrQ11[k + 1] >> shftVal) + 2) >> 2; | 254 diffQ16[n] += (CS_ptrQ9[n] * (CorrQ11[k + 1] >> shftVal) + 2) >> 2; |
255 } | 255 } |
256 | 256 |
257 for (k=0; k<FRAMESAMPLES/8; k++) { | 257 for (k=0; k<FRAMESAMPLES/8; k++) { |
258 int32_t diff_q16 = diffQ16[k] << shftVal; | 258 int32_t diff_q16 = diffQ16[k] * (1 << shftVal); |
259 CurveQ16[FRAMESAMPLES / 4 - 1 - k] = CurveQ16[k] - diff_q16; | 259 CurveQ16[FRAMESAMPLES / 4 - 1 - k] = CurveQ16[k] - diff_q16; |
260 CurveQ16[k] += diff_q16; | 260 CurveQ16[k] += diff_q16; |
261 } | 261 } |
262 } | 262 } |
263 | 263 |
264 static void CalcRootInvArSpec(const int16_t *ARCoefQ12, | 264 static void CalcRootInvArSpec(const int16_t *ARCoefQ12, |
265 const int32_t gainQ10, | 265 const int32_t gainQ10, |
266 uint16_t *CurveQ8) | 266 uint16_t *CurveQ8) |
267 { | 267 { |
268 int32_t CorrQ11[AR_ORDER+1]; | 268 int32_t CorrQ11[AR_ORDER+1]; |
(...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
857 matrix1_index_factor2 = &k; | 857 matrix1_index_factor2 = &k; |
858 } | 858 } |
859 | 859 |
860 for (j = 0; j < SUBFRAMES; j++) { | 860 for (j = 0; j < SUBFRAMES; j++) { |
861 matrix_prod_index = mid_loop_count * j; | 861 matrix_prod_index = mid_loop_count * j; |
862 for (k = 0; k < mid_loop_count; k++) { | 862 for (k = 0; k < mid_loop_count; k++) { |
863 int32_t sum32 = 0; | 863 int32_t sum32 = 0; |
864 matrix0_index = matrix0_index_factor1 * (*matrix0_index_factor2); | 864 matrix0_index = matrix0_index_factor1 * (*matrix0_index_factor2); |
865 matrix1_index = matrix1_index_factor1 * (*matrix1_index_factor2); | 865 matrix1_index = matrix1_index_factor1 * (*matrix1_index_factor2); |
866 for (n = 0; n < inner_loop_count; n++) { | 866 for (n = 0; n < inner_loop_count; n++) { |
867 sum32 += (WEBRTC_SPL_MUL_16_32_RSFT16(matrix0[matrix0_index], | 867 sum32 += WEBRTC_SPL_MUL_16_32_RSFT16( |
868 matrix1[matrix1_index] << shift)); | 868 matrix0[matrix0_index], matrix1[matrix1_index] * (1 << shift)); |
869 matrix0_index += matrix0_index_step; | 869 matrix0_index += matrix0_index_step; |
870 matrix1_index += matrix1_index_step; | 870 matrix1_index += matrix1_index_step; |
871 } | 871 } |
872 matrix_product[matrix_prod_index] = sum32; | 872 matrix_product[matrix_prod_index] = sum32; |
873 matrix_prod_index++; | 873 matrix_prod_index++; |
874 } | 874 } |
875 } | 875 } |
876 } | 876 } |
877 | 877 |
878 /* | 878 /* |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1035 /* lo band LAR coeffs */ | 1035 /* lo band LAR coeffs */ |
1036 for (n=0; n<ORDERLO; n++, pos++, poss++) { | 1036 for (n=0; n<ORDERLO; n++, pos++, poss++) { |
1037 tmp32 = WEBRTC_SPL_MUL_16_32_RSFT16(31208, tmpcoeffs_sQ17[poss]); // (Q16*
Q17)>>16 = Q17, with 1/2.1 = 0.47619047619 ~= 31208 in Q16 | 1037 tmp32 = WEBRTC_SPL_MUL_16_32_RSFT16(31208, tmpcoeffs_sQ17[poss]); // (Q16*
Q17)>>16 = Q17, with 1/2.1 = 0.47619047619 ~= 31208 in Q16 |
1038 tmp32 = tmp32 + WebRtcIsacfix_kMeansShapeQ17[model][poss]; // Q17+Q17 = Q1
7 | 1038 tmp32 = tmp32 + WebRtcIsacfix_kMeansShapeQ17[model][poss]; // Q17+Q17 = Q1
7 |
1039 LPCCoefQ17[pos] = tmp32; | 1039 LPCCoefQ17[pos] = tmp32; |
1040 } | 1040 } |
1041 | 1041 |
1042 /* hi band LAR coeffs */ | 1042 /* hi band LAR coeffs */ |
1043 for (n=0; n<ORDERHI; n++, pos++, poss++) { | 1043 for (n=0; n<ORDERHI; n++, pos++, poss++) { |
1044 // ((Q13*Q17)>>16)<<3 = Q17, with 1/0.45 = 2.222222222222 ~= 18204 in Q13 | 1044 // ((Q13*Q17)>>16)<<3 = Q17, with 1/0.45 = 2.222222222222 ~= 18204 in Q13 |
1045 tmp32 = WEBRTC_SPL_MUL_16_32_RSFT16(18204, tmpcoeffs_sQ17[poss]) << 3; | 1045 tmp32 = |
| 1046 WEBRTC_SPL_MUL_16_32_RSFT16(18204, tmpcoeffs_sQ17[poss]) * (1 << 3); |
1046 tmp32 = tmp32 + WebRtcIsacfix_kMeansShapeQ17[model][poss]; // Q17+Q17 = Q1
7 | 1047 tmp32 = tmp32 + WebRtcIsacfix_kMeansShapeQ17[model][poss]; // Q17+Q17 = Q1
7 |
1047 LPCCoefQ17[pos] = tmp32; | 1048 LPCCoefQ17[pos] = tmp32; |
1048 } | 1049 } |
1049 } | 1050 } |
1050 | 1051 |
1051 | 1052 |
1052 *outmodel=model; | 1053 *outmodel=model; |
1053 | 1054 |
1054 return 0; | 1055 return 0; |
1055 } | 1056 } |
(...skipping 969 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2025 | 2026 |
2026 index_gQQ[k] = pos2QQ + WebRtcIsacfix_kQuantMinGain[k]; //ATTN: ok? | 2027 index_gQQ[k] = pos2QQ + WebRtcIsacfix_kQuantMinGain[k]; //ATTN: ok? |
2027 if (index_gQQ[k] < 0) { | 2028 if (index_gQQ[k] < 0) { |
2028 index_gQQ[k] = 0; | 2029 index_gQQ[k] = 0; |
2029 } | 2030 } |
2030 else if (index_gQQ[k] > WebRtcIsacfix_kMaxIndGain[k]) { | 2031 else if (index_gQQ[k] > WebRtcIsacfix_kMaxIndGain[k]) { |
2031 index_gQQ[k] = WebRtcIsacfix_kMaxIndGain[k]; | 2032 index_gQQ[k] = WebRtcIsacfix_kMaxIndGain[k]; |
2032 } | 2033 } |
2033 } | 2034 } |
2034 } | 2035 } |
OLD | NEW |