1 /* 2 * Copyright (c) 2011 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 #ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_G722_INTERFACE_H_ 12 #define WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_G722_INTERFACE_H_ 13 14 #include "webrtc/typedefs.h" 15 16 /* 17 * Solution to support multiple instances 18 */ 19 20 typedef struct WebRtcG722EncInst G722EncInst; 21 typedef struct WebRtcG722DecInst G722DecInst; 22 23 /* 24 * Comfort noise constants 25 */ 26 27 #define G722_WEBRTC_SPEECH 1 28 #define G722_WEBRTC_CNG 2 29 30 #ifdef __cplusplus 31 extern "C" { 32 #endif 33 34 35 /**************************************************************************** 36 * WebRtcG722_CreateEncoder(...) 37 * 38 * Create memory used for G722 encoder 39 * 40 * Input: 41 * - G722enc_inst : G722 instance for encoder 42 * 43 * Return value : 0 - Ok 44 * -1 - Error 45 */ 46 int16_t WebRtcG722_CreateEncoder(G722EncInst **G722enc_inst); 47 48 49 /**************************************************************************** 50 * WebRtcG722_EncoderInit(...) 51 * 52 * This function initializes a G722 instance 53 * 54 * Input: 55 * - G722enc_inst : G722 instance, i.e. the user that should receive 56 * be initialized 57 * 58 * Return value : 0 - Ok 59 * -1 - Error 60 */ 61 62 int16_t WebRtcG722_EncoderInit(G722EncInst *G722enc_inst); 63 64 65 /**************************************************************************** 66 * WebRtcG722_FreeEncoder(...) 67 * 68 * Free the memory used for G722 encoder 69 * 70 * Input: 71 * - G722enc_inst : G722 instance for encoder 72 * 73 * Return value : 0 - Ok 74 * -1 - Error 75 */ 76 int WebRtcG722_FreeEncoder(G722EncInst *G722enc_inst); 77 78 79 80 /**************************************************************************** 81 * WebRtcG722_Encode(...) 82 * 83 * This function encodes G722 encoded data. 84 * 85 * Input: 86 * - G722enc_inst : G722 instance, i.e. the user that should encode 87 * a packet 88 * - speechIn : Input speech vector 89 * - len : Samples in speechIn 90 * 91 * Output: 92 * - encoded : The encoded data vector 93 * 94 * Return value : Length (in bytes) of coded data 95 */ 96 97 size_t WebRtcG722_Encode(G722EncInst* G722enc_inst, 98 const int16_t* speechIn, 99 size_t len, 100 uint8_t* encoded); 101 102 103 /**************************************************************************** 104 * WebRtcG722_CreateDecoder(...) 105 * 106 * Create memory used for G722 encoder 107 * 108 * Input: 109 * - G722dec_inst : G722 instance for decoder 110 * 111 * Return value : 0 - Ok 112 * -1 - Error 113 */ 114 int16_t WebRtcG722_CreateDecoder(G722DecInst **G722dec_inst); 115 116 /**************************************************************************** 117 * WebRtcG722_DecoderInit(...) 118 * 119 * This function initializes a G722 instance 120 * 121 * Input: 122 * - inst : G722 instance 123 */ 124 125 void WebRtcG722_DecoderInit(G722DecInst* inst); 126 127 /**************************************************************************** 128 * WebRtcG722_FreeDecoder(...) 129 * 130 * Free the memory used for G722 decoder 131 * 132 * Input: 133 * - G722dec_inst : G722 instance for decoder 134 * 135 * Return value : 0 - Ok 136 * -1 - Error 137 */ 138 139 int WebRtcG722_FreeDecoder(G722DecInst *G722dec_inst); 140 141 142 /**************************************************************************** 143 * WebRtcG722_Decode(...) 144 * 145 * This function decodes a packet with G729 frame(s). Output speech length 146 * will be a multiple of 80 samples (80*frames/packet). 147 * 148 * Input: 149 * - G722dec_inst : G722 instance, i.e. the user that should decode 150 * a packet 151 * - encoded : Encoded G722 frame(s) 152 * - len : Bytes in encoded vector 153 * 154 * Output: 155 * - decoded : The decoded vector 156 * - speechType : 1 normal, 2 CNG (Since G722 does not have its own 157 * DTX/CNG scheme it should always return 1) 158 * 159 * Return value : Samples in decoded vector 160 */ 161 162 size_t WebRtcG722_Decode(G722DecInst *G722dec_inst, 163 const uint8_t* encoded, 164 size_t len, 165 int16_t *decoded, 166 int16_t *speechType); 167 168 /**************************************************************************** 169 * WebRtcG722_Version(...) 170 * 171 * Get a string with the current version of the codec 172 */ 173 174 int16_t WebRtcG722_Version(char *versionStr, short len); 175 176 177 #ifdef __cplusplus 178 } 179 #endif 180 181 182 #endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_G722_G722_INTERFACE_H_ */ 183