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 MODULES_AUDIO_CODING_CODECS_G711_G711_INTERFACE_H_
12 #define MODULES_AUDIO_CODING_CODECS_G711_G711_INTERFACE_H_
13 
14 #include <stdint.h>
15 
16 // Comfort noise constants
17 #define G711_WEBRTC_SPEECH 1
18 #define G711_WEBRTC_CNG 2
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 /****************************************************************************
25  * WebRtcG711_EncodeA(...)
26  *
27  * This function encodes a G711 A-law frame and inserts it into a packet.
28  * Input speech length has be of any length.
29  *
30  * Input:
31  *      - speechIn           : Input speech vector
32  *      - len                : Samples in speechIn
33  *
34  * Output:
35  *      - encoded            : The encoded data vector
36  *
37  * Return value              : Length (in bytes) of coded data.
38  *                             Always equal to len input parameter.
39  */
40 
41 size_t WebRtcG711_EncodeA(const int16_t* speechIn,
42                           size_t len,
43                           uint8_t* encoded);
44 
45 /****************************************************************************
46  * WebRtcG711_EncodeU(...)
47  *
48  * This function encodes a G711 U-law frame and inserts it into a packet.
49  * Input speech length has be of any length.
50  *
51  * Input:
52  *      - speechIn           : Input speech vector
53  *      - len                : Samples in speechIn
54  *
55  * Output:
56  *      - encoded            : The encoded data vector
57  *
58  * Return value              : Length (in bytes) of coded data.
59  *                             Always equal to len input parameter.
60  */
61 
62 size_t WebRtcG711_EncodeU(const int16_t* speechIn,
63                           size_t len,
64                           uint8_t* encoded);
65 
66 /****************************************************************************
67  * WebRtcG711_DecodeA(...)
68  *
69  * This function decodes a packet G711 A-law frame.
70  *
71  * Input:
72  *      - encoded            : Encoded data
73  *      - len                : Bytes in encoded vector
74  *
75  * Output:
76  *      - decoded            : The decoded vector
77  *      - speechType         : 1 normal, 2 CNG (for G711 it should
78  *                             always return 1 since G711 does not have a
79  *                             built-in DTX/CNG scheme)
80  *
81  * Return value              : >0 - Samples in decoded vector
82  *                             -1 - Error
83  */
84 
85 size_t WebRtcG711_DecodeA(const uint8_t* encoded,
86                           size_t len,
87                           int16_t* decoded,
88                           int16_t* speechType);
89 
90 /****************************************************************************
91  * WebRtcG711_DecodeU(...)
92  *
93  * This function decodes a packet G711 U-law frame.
94  *
95  * Input:
96  *      - encoded            : Encoded data
97  *      - len                : Bytes in encoded vector
98  *
99  * Output:
100  *      - decoded            : The decoded vector
101  *      - speechType         : 1 normal, 2 CNG (for G711 it should
102  *                             always return 1 since G711 does not have a
103  *                             built-in DTX/CNG scheme)
104  *
105  * Return value              : >0 - Samples in decoded vector
106  *                             -1 - Error
107  */
108 
109 size_t WebRtcG711_DecodeU(const uint8_t* encoded,
110                           size_t len,
111                           int16_t* decoded,
112                           int16_t* speechType);
113 
114 /**********************************************************************
115  * WebRtcG711_Version(...)
116  *
117  * This function gives the version string of the G.711 codec.
118  *
119  * Input:
120  *      - lenBytes:     the size of Allocated space (in Bytes) where
121  *                      the version number is written to (in string format).
122  *
123  * Output:
124  *      - version:      Pointer to a buffer where the version number is
125  *                      written to.
126  *
127  */
128 
129 int16_t WebRtcG711_Version(char* version, int16_t lenBytes);
130 
131 #ifdef __cplusplus
132 }
133 #endif
134 
135 #endif  // MODULES_AUDIO_CODING_CODECS_G711_G711_INTERFACE_H_
136