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 #ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_CNG_WEBRTC_CNG_H_ 13 #define WEBRTC_MODULES_AUDIO_CODING_CODECS_CNG_WEBRTC_CNG_H_ 14 15 #include <stddef.h> 16 #include "webrtc/typedefs.h" 17 18 #ifdef __cplusplus 19 extern "C" { 20 #endif 21 22 #define WEBRTC_CNG_MAX_LPC_ORDER 12 23 #define WEBRTC_CNG_MAX_OUTSIZE_ORDER 640 24 25 /* Define Error codes. */ 26 27 /* 6100 Encoder */ 28 #define CNG_ENCODER_NOT_INITIATED 6120 29 #define CNG_DISALLOWED_LPC_ORDER 6130 30 #define CNG_DISALLOWED_FRAME_SIZE 6140 31 #define CNG_DISALLOWED_SAMPLING_FREQUENCY 6150 32 /* 6200 Decoder */ 33 #define CNG_DECODER_NOT_INITIATED 6220 34 35 typedef struct WebRtcCngEncInst CNG_enc_inst; 36 typedef struct WebRtcCngDecInst CNG_dec_inst; 37 38 /**************************************************************************** 39 * WebRtcCng_CreateEnc/Dec(...) 40 * 41 * These functions create an instance to the specified structure 42 * 43 * Input: 44 * - XXX_inst : Pointer to created instance that should be created 45 * 46 * Return value : 0 - Ok 47 * -1 - Error 48 */ 49 int16_t WebRtcCng_CreateEnc(CNG_enc_inst** cng_inst); 50 int16_t WebRtcCng_CreateDec(CNG_dec_inst** cng_inst); 51 52 /**************************************************************************** 53 * WebRtcCng_InitEnc/Dec(...) 54 * 55 * This function initializes a instance 56 * 57 * Input: 58 * - cng_inst : Instance that should be initialized 59 * 60 * - fs : 8000 for narrowband and 16000 for wideband 61 * - interval : generate SID data every interval ms 62 * - quality : Number of refl. coefs, maximum allowed is 12 63 * 64 * Output: 65 * - cng_inst : Initialized instance 66 * 67 * Return value : 0 - Ok 68 * -1 - Error 69 */ 70 71 int WebRtcCng_InitEnc(CNG_enc_inst* cng_inst, int fs, int16_t interval, 72 int16_t quality); 73 void WebRtcCng_InitDec(CNG_dec_inst* cng_inst); 74 75 /**************************************************************************** 76 * WebRtcCng_FreeEnc/Dec(...) 77 * 78 * These functions frees the dynamic memory of a specified instance 79 * 80 * Input: 81 * - cng_inst : Pointer to created instance that should be freed 82 * 83 * Return value : 0 - Ok 84 * -1 - Error 85 */ 86 int16_t WebRtcCng_FreeEnc(CNG_enc_inst* cng_inst); 87 int16_t WebRtcCng_FreeDec(CNG_dec_inst* cng_inst); 88 89 /**************************************************************************** 90 * WebRtcCng_Encode(...) 91 * 92 * These functions analyzes background noise 93 * 94 * Input: 95 * - cng_inst : Pointer to created instance 96 * - speech : Signal to be analyzed 97 * - nrOfSamples : Size of speech vector 98 * - forceSID : not zero to force SID frame and reset 99 * 100 * Output: 101 * - bytesOut : Nr of bytes to transmit, might be 0 102 * 103 * Return value : 0 - Ok 104 * -1 - Error 105 */ 106 int WebRtcCng_Encode(CNG_enc_inst* cng_inst, int16_t* speech, 107 size_t nrOfSamples, uint8_t* SIDdata, 108 size_t* bytesOut, int16_t forceSID); 109 110 /**************************************************************************** 111 * WebRtcCng_UpdateSid(...) 112 * 113 * These functions updates the CN state, when a new SID packet arrives 114 * 115 * Input: 116 * - cng_inst : Pointer to created instance that should be freed 117 * - SID : SID packet, all headers removed 118 * - length : Length in bytes of SID packet 119 * 120 * Return value : 0 - Ok 121 * -1 - Error 122 */ 123 int16_t WebRtcCng_UpdateSid(CNG_dec_inst* cng_inst, uint8_t* SID, 124 size_t length); 125 126 /**************************************************************************** 127 * WebRtcCng_Generate(...) 128 * 129 * These functions generates CN data when needed 130 * 131 * Input: 132 * - cng_inst : Pointer to created instance that should be freed 133 * - outData : pointer to area to write CN data 134 * - nrOfSamples : How much data to generate 135 * - new_period : >0 if a new period of CNG, will reset history 136 * 137 * Return value : 0 - Ok 138 * -1 - Error 139 */ 140 int16_t WebRtcCng_Generate(CNG_dec_inst* cng_inst, int16_t* outData, 141 size_t nrOfSamples, int16_t new_period); 142 143 /***************************************************************************** 144 * WebRtcCng_GetErrorCodeEnc/Dec(...) 145 * 146 * This functions can be used to check the error code of a CNG instance. When 147 * a function returns -1 a error code will be set for that instance. The 148 * function below extract the code of the last error that occurred in the 149 * specified instance. 150 * 151 * Input: 152 * - CNG_inst : CNG enc/dec instance 153 * 154 * Return value : Error code 155 */ 156 int16_t WebRtcCng_GetErrorCodeEnc(CNG_enc_inst* cng_inst); 157 int16_t WebRtcCng_GetErrorCodeDec(CNG_dec_inst* cng_inst); 158 159 #ifdef __cplusplus 160 } 161 #endif 162 163 #endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_CNG_WEBRTC_CNG_H_ 164