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 18 matching lines...) Expand all Loading... |
29 int16_t dec_order; | 29 int16_t dec_order; |
30 int16_t dec_target_scale_factor; /* Q29 */ | 30 int16_t dec_target_scale_factor; /* Q29 */ |
31 int16_t dec_used_scale_factor; /* Q29 */ | 31 int16_t dec_used_scale_factor; /* Q29 */ |
32 int16_t target_scale_factor; /* Q13 */ | 32 int16_t target_scale_factor; /* Q13 */ |
33 int16_t errorcode; | 33 int16_t errorcode; |
34 int16_t initflag; | 34 int16_t initflag; |
35 } WebRtcCngDecoder; | 35 } WebRtcCngDecoder; |
36 | 36 |
37 typedef struct WebRtcCngEncoder_ { | 37 typedef struct WebRtcCngEncoder_ { |
38 int16_t enc_nrOfCoefs; | 38 int16_t enc_nrOfCoefs; |
39 uint16_t enc_sampfreq; | 39 int enc_sampfreq; |
40 int16_t enc_interval; | 40 int16_t enc_interval; |
41 int16_t enc_msSinceSID; | 41 int16_t enc_msSinceSID; |
42 int32_t enc_Energy; | 42 int32_t enc_Energy; |
43 int16_t enc_reflCoefs[WEBRTC_CNG_MAX_LPC_ORDER + 1]; | 43 int16_t enc_reflCoefs[WEBRTC_CNG_MAX_LPC_ORDER + 1]; |
44 int32_t enc_corrVector[WEBRTC_CNG_MAX_LPC_ORDER + 1]; | 44 int32_t enc_corrVector[WEBRTC_CNG_MAX_LPC_ORDER + 1]; |
45 uint32_t enc_seed; | 45 uint32_t enc_seed; |
46 int16_t errorcode; | 46 int16_t errorcode; |
47 int16_t initflag; | 47 int16_t initflag; |
48 } WebRtcCngEncoder; | 48 } WebRtcCngEncoder; |
49 | 49 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 * - fs : 8000 for narrowband and 16000 for wideband | 135 * - fs : 8000 for narrowband and 16000 for wideband |
136 * - interval : generate SID data every interval ms | 136 * - interval : generate SID data every interval ms |
137 * - quality : TBD | 137 * - quality : TBD |
138 * | 138 * |
139 * Output: | 139 * Output: |
140 * - cng_inst : Initialized instance | 140 * - cng_inst : Initialized instance |
141 * | 141 * |
142 * Return value : 0 - Ok | 142 * Return value : 0 - Ok |
143 * -1 - Error | 143 * -1 - Error |
144 */ | 144 */ |
145 int16_t WebRtcCng_InitEnc(CNG_enc_inst* cng_inst, uint16_t fs, int16_t interval, | 145 int WebRtcCng_InitEnc(CNG_enc_inst* cng_inst, int fs, int16_t interval, |
146 int16_t quality) { | 146 int16_t quality) { |
147 int i; | 147 int i; |
148 WebRtcCngEncoder* inst = (WebRtcCngEncoder*) cng_inst; | 148 WebRtcCngEncoder* inst = (WebRtcCngEncoder*) cng_inst; |
149 memset(inst, 0, sizeof(WebRtcCngEncoder)); | 149 memset(inst, 0, sizeof(WebRtcCngEncoder)); |
150 | 150 |
151 /* Check LPC order */ | 151 /* Check LPC order */ |
152 if (quality > WEBRTC_CNG_MAX_LPC_ORDER || quality <= 0) { | 152 if (quality > WEBRTC_CNG_MAX_LPC_ORDER || quality <= 0) { |
153 inst->errorcode = CNG_DISALLOWED_LPC_ORDER; | 153 inst->errorcode = CNG_DISALLOWED_LPC_ORDER; |
154 return -1; | 154 return -1; |
155 } | 155 } |
156 | 156 |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 * | 220 * |
221 * Input: | 221 * Input: |
222 * - cng_inst : Pointer to created instance | 222 * - cng_inst : Pointer to created instance |
223 * - speech : Signal (noise) to be analyzed | 223 * - speech : Signal (noise) to be analyzed |
224 * - nrOfSamples : Size of speech vector | 224 * - nrOfSamples : Size of speech vector |
225 * - bytesOut : Nr of bytes to transmit, might be 0 | 225 * - bytesOut : Nr of bytes to transmit, might be 0 |
226 * | 226 * |
227 * Return value : 0 - Ok | 227 * Return value : 0 - Ok |
228 * -1 - Error | 228 * -1 - Error |
229 */ | 229 */ |
230 int16_t WebRtcCng_Encode(CNG_enc_inst* cng_inst, int16_t* speech, | 230 int WebRtcCng_Encode(CNG_enc_inst* cng_inst, int16_t* speech, |
231 int16_t nrOfSamples, uint8_t* SIDdata, | 231 int16_t nrOfSamples, uint8_t* SIDdata, |
232 int16_t* bytesOut, int16_t forceSID) { | 232 int16_t* bytesOut, int16_t forceSID) { |
233 WebRtcCngEncoder* inst = (WebRtcCngEncoder*) cng_inst; | 233 WebRtcCngEncoder* inst = (WebRtcCngEncoder*) cng_inst; |
234 | 234 |
235 int16_t arCoefs[WEBRTC_CNG_MAX_LPC_ORDER + 1]; | 235 int16_t arCoefs[WEBRTC_CNG_MAX_LPC_ORDER + 1]; |
236 int32_t corrVector[WEBRTC_CNG_MAX_LPC_ORDER + 1]; | 236 int32_t corrVector[WEBRTC_CNG_MAX_LPC_ORDER + 1]; |
237 int16_t refCs[WEBRTC_CNG_MAX_LPC_ORDER + 1]; | 237 int16_t refCs[WEBRTC_CNG_MAX_LPC_ORDER + 1]; |
238 int16_t hanningW[WEBRTC_CNG_MAX_OUTSIZE_ORDER]; | 238 int16_t hanningW[WEBRTC_CNG_MAX_OUTSIZE_ORDER]; |
239 int16_t ReflBeta = 19661; /* 0.6 in q15. */ | 239 int16_t ReflBeta = 19661; /* 0.6 in q15. */ |
240 int16_t ReflBetaComp = 13107; /* 0.4 in q15. */ | 240 int16_t ReflBetaComp = 13107; /* 0.4 in q15. */ |
241 int32_t outEnergy; | 241 int32_t outEnergy; |
242 int outShifts; | 242 int outShifts; |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
381 } else { | 381 } else { |
382 for (i = 0; i < inst->enc_nrOfCoefs; i++) { | 382 for (i = 0; i < inst->enc_nrOfCoefs; i++) { |
383 /* Q15 to Q7 with rounding. */ | 383 /* Q15 to Q7 with rounding. */ |
384 SIDdata[i + 1] = (127 + ((inst->enc_reflCoefs[i] + 128) >> 8)); | 384 SIDdata[i + 1] = (127 + ((inst->enc_reflCoefs[i] + 128) >> 8)); |
385 } | 385 } |
386 } | 386 } |
387 | 387 |
388 inst->enc_msSinceSID = 0; | 388 inst->enc_msSinceSID = 0; |
389 *bytesOut = inst->enc_nrOfCoefs + 1; | 389 *bytesOut = inst->enc_nrOfCoefs + 1; |
390 | 390 |
391 inst->enc_msSinceSID += (1000 * nrOfSamples) / inst->enc_sampfreq; | 391 inst->enc_msSinceSID += |
| 392 (int16_t)((1000 * nrOfSamples) / inst->enc_sampfreq); |
392 return inst->enc_nrOfCoefs + 1; | 393 return inst->enc_nrOfCoefs + 1; |
393 } else { | 394 } else { |
394 inst->enc_msSinceSID += (1000 * nrOfSamples) / inst->enc_sampfreq; | 395 inst->enc_msSinceSID += |
| 396 (int16_t)((1000 * nrOfSamples) / inst->enc_sampfreq); |
395 *bytesOut = 0; | 397 *bytesOut = 0; |
396 return 0; | 398 return 0; |
397 } | 399 } |
398 } | 400 } |
399 | 401 |
400 /**************************************************************************** | 402 /**************************************************************************** |
401 * WebRtcCng_UpdateSid(...) | 403 * WebRtcCng_UpdateSid(...) |
402 * | 404 * |
403 * These functions updates the CN state, when a new SID packet arrives | 405 * These functions updates the CN state, when a new SID packet arrives |
404 * | 406 * |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
593 /* Typecast pointer to real structure. */ | 595 /* Typecast pointer to real structure. */ |
594 WebRtcCngEncoder* inst = (WebRtcCngEncoder*) cng_inst; | 596 WebRtcCngEncoder* inst = (WebRtcCngEncoder*) cng_inst; |
595 return inst->errorcode; | 597 return inst->errorcode; |
596 } | 598 } |
597 | 599 |
598 int16_t WebRtcCng_GetErrorCodeDec(CNG_dec_inst* cng_inst) { | 600 int16_t WebRtcCng_GetErrorCodeDec(CNG_dec_inst* cng_inst) { |
599 /* Typecast pointer to real structure. */ | 601 /* Typecast pointer to real structure. */ |
600 WebRtcCngDecoder* inst = (WebRtcCngDecoder*) cng_inst; | 602 WebRtcCngDecoder* inst = (WebRtcCngDecoder*) cng_inst; |
601 return inst->errorcode; | 603 return inst->errorcode; |
602 } | 604 } |
OLD | NEW |