1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "cng_helpfuns.h" 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "signal_processing_library.h" 14a11402cdbf99a12d58421d5b446982e8d30c40caandresp@webrtc.org#include "webrtc/typedefs.h" 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "webrtc_cng.h" 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* Values in |k| are Q15, and |a| Q12. */ 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid WebRtcCng_K2a16(int16_t* k, int useOrder, int16_t* a) { 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int16_t any[WEBRTC_SPL_MAX_LPC_ORDER + 1]; 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int16_t *aptr, *aptr2, *anyptr; 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const int16_t *kptr; 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int m, i; 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kptr = k; 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *a = 4096; /* i.e., (Word16_MAX >> 3) + 1 */ 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *any = *a; 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org a[1] = (*k + 4) >> 3; 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (m = 1; m < useOrder; m++) { 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kptr++; 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org aptr = a; 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org aptr++; 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org aptr2 = &a[m]; 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org anyptr = any; 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org anyptr++; 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org any[m + 1] = (*kptr + 4) >> 3; 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (i = 0; i < m; i++) { 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *anyptr++ = (*aptr++) + 39e49f25237b3c1d5a17eacc1a4bf4c98440d30292pbos@webrtc.org (int16_t)((((int32_t)(*aptr2--) * (int32_t) * kptr) + 16384) >> 15); 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org aptr = a; 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org anyptr = any; 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (i = 0; i < (m + 2); i++) { 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *aptr++ = *anyptr++; 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 49