aboutsummaryrefslogtreecommitdiff
path: root/webrtc/modules/audio_coding/codecs/g722/include/g722_interface.h
blob: 5a46ef2ad5c071a01789470d412396aece4a1f3e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
/*
 *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#ifndef MODULES_AUDIO_CODING_CODECS_G722_MAIN_INCLUDE_G722_INTERFACE_H_
#define MODULES_AUDIO_CODING_CODECS_G722_MAIN_INCLUDE_G722_INTERFACE_H_

#include "webrtc/typedefs.h"

/*
 * Solution to support multiple instances
 */

typedef struct WebRtcG722EncInst    G722EncInst;
typedef struct WebRtcG722DecInst    G722DecInst;

/*
 * Comfort noise constants
 */

#define G722_WEBRTC_SPEECH     1
#define G722_WEBRTC_CNG        2

#ifdef __cplusplus
extern "C" {
#endif


/****************************************************************************
 * WebRtcG722_CreateEncoder(...)
 *
 * Create memory used for G722 encoder
 *
 * Input:
 *     - G722enc_inst         : G722 instance for encoder
 *
 * Return value               :  0 - Ok
 *                              -1 - Error
 */
int16_t WebRtcG722_CreateEncoder(G722EncInst **G722enc_inst);


/****************************************************************************
 * WebRtcG722_EncoderInit(...)
 *
 * This function initializes a G722 instance
 *
 * Input:
 *     - G722enc_inst         : G722 instance, i.e. the user that should receive
 *                             be initialized
 *
 * Return value               :  0 - Ok
 *                              -1 - Error
 */

int16_t WebRtcG722_EncoderInit(G722EncInst *G722enc_inst);


/****************************************************************************
 * WebRtcG722_FreeEncoder(...)
 *
 * Free the memory used for G722 encoder
 *
 * Input:
 *     - G722enc_inst         : G722 instance for encoder
 *
 * Return value               :  0 - Ok
 *                              -1 - Error
 */
int WebRtcG722_FreeEncoder(G722EncInst *G722enc_inst);



/****************************************************************************
 * WebRtcG722_Encode(...)
 *
 * This function encodes G722 encoded data.
 *
 * Input:
 *     - G722enc_inst         : G722 instance, i.e. the user that should encode
 *                              a packet
 *     - speechIn             : Input speech vector
 *     - len                  : Samples in speechIn
 *
 * Output:
 *        - encoded           : The encoded data vector
 *
 * Return value               : Length (in bytes) of coded data
 */

size_t WebRtcG722_Encode(G722EncInst* G722enc_inst,
                         const int16_t* speechIn,
                         size_t len,
                         uint8_t* encoded);


/****************************************************************************
 * WebRtcG722_CreateDecoder(...)
 *
 * Create memory used for G722 encoder
 *
 * Input:
 *     - G722dec_inst         : G722 instance for decoder
 *
 * Return value               :  0 - Ok
 *                              -1 - Error
 */
int16_t WebRtcG722_CreateDecoder(G722DecInst **G722dec_inst);

/****************************************************************************
 * WebRtcG722_DecoderInit(...)
 *
 * This function initializes a G722 instance
 *
 * Input:
 *     - inst      : G722 instance
 */

void WebRtcG722_DecoderInit(G722DecInst* inst);

/****************************************************************************
 * WebRtcG722_FreeDecoder(...)
 *
 * Free the memory used for G722 decoder
 *
 * Input:
 *     - G722dec_inst         : G722 instance for decoder
 *
 * Return value               :  0 - Ok
 *                              -1 - Error
 */

int WebRtcG722_FreeDecoder(G722DecInst *G722dec_inst);


/****************************************************************************
 * WebRtcG722_Decode(...)
 *
 * This function decodes a packet with G729 frame(s). Output speech length
 * will be a multiple of 80 samples (80*frames/packet).
 *
 * Input:
 *     - G722dec_inst       : G722 instance, i.e. the user that should decode
 *                            a packet
 *     - encoded            : Encoded G722 frame(s)
 *     - len                : Bytes in encoded vector
 *
 * Output:
 *        - decoded         : The decoded vector
 *      - speechType        : 1 normal, 2 CNG (Since G722 does not have its own
 *                            DTX/CNG scheme it should always return 1)
 *
 * Return value             : Samples in decoded vector
 */

size_t WebRtcG722_Decode(G722DecInst *G722dec_inst,
                         const uint8_t* encoded,
                         size_t len,
                         int16_t *decoded,
                         int16_t *speechType);

/****************************************************************************
 * WebRtcG722_Version(...)
 *
 * Get a string with the current version of the codec
 */

int16_t WebRtcG722_Version(char *versionStr, short len);


#ifdef __cplusplus
}
#endif


#endif /* MODULES_AUDIO_CODING_CODECS_G722_MAIN_INCLUDE_G722_INCLUDE_H_ */