1470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*
2470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
4470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  Use of this source code is governed by a BSD-style license
5470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  that can be found in the LICENSE file in the root of the source
6470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  tree. An additional intellectual property rights grant can be found
7470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  in the file PATENTS.  All contributing project authors may
8470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  be found in the AUTHORS file in the root of the source tree.
9470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */
10470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
113c652b67468d182bd36aee4c31557621be50cc92kjellander@webrtc.org#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_G711_INTERFACE_H_
123c652b67468d182bd36aee4c31557621be50cc92kjellander@webrtc.org#define WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_G711_INTERFACE_H_
13470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
14262e676a08fc29ee6c414f5858d68697be983515andresp@webrtc.org#include "webrtc/typedefs.h"
15470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
16470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Comfort noise constants
17ae4e2b352b4d17c6184687949778704ea60d1da6pbos@webrtc.org#define G711_WEBRTC_SPEECH 1
18ae4e2b352b4d17c6184687949778704ea60d1da6pbos@webrtc.org#define G711_WEBRTC_CNG 2
19470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
20470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#ifdef __cplusplus
21470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comextern "C" {
22470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#endif
23470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
24470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/****************************************************************************
25470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * WebRtcG711_EncodeA(...)
26470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
27470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * This function encodes a G711 A-law frame and inserts it into a packet.
28470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Input speech length has be of any length.
29470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
30470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Input:
31470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - speechIn           : Input speech vector
32470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - len                : Samples in speechIn
33470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
34470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Output:
35470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - encoded            : The encoded data vector
36470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
372acec4cc32c3a9284afaae15ba74dab66f4bc427jmarusic@webrtc.org * Return value              : Length (in bytes) of coded data.
382acec4cc32c3a9284afaae15ba74dab66f4bc427jmarusic@webrtc.org *                             Always equal to len input parameter.
39470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */
40470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
41dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kastingsize_t WebRtcG711_EncodeA(const int16_t* speechIn,
42dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          size_t len,
43dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          uint8_t* encoded);
44470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
45470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/****************************************************************************
46470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * WebRtcG711_EncodeU(...)
47470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
48470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * This function encodes a G711 U-law frame and inserts it into a packet.
49470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Input speech length has be of any length.
50470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
51470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Input:
52470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - speechIn           : Input speech vector
53470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - len                : Samples in speechIn
54470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
55470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Output:
56470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - encoded            : The encoded data vector
57470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
582acec4cc32c3a9284afaae15ba74dab66f4bc427jmarusic@webrtc.org * Return value              : Length (in bytes) of coded data.
592acec4cc32c3a9284afaae15ba74dab66f4bc427jmarusic@webrtc.org *                             Always equal to len input parameter.
60470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */
61470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
62dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kastingsize_t WebRtcG711_EncodeU(const int16_t* speechIn,
63dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          size_t len,
64dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          uint8_t* encoded);
65470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
66470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/****************************************************************************
67470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * WebRtcG711_DecodeA(...)
68470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
69470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * This function decodes a packet G711 A-law frame.
70470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
71470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Input:
72470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - encoded            : Encoded data
73470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - len                : Bytes in encoded vector
74470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
75470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Output:
76470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - decoded            : The decoded vector
77470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - speechType         : 1 normal, 2 CNG (for G711 it should
78470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *                             always return 1 since G711 does not have a
79470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *                             built-in DTX/CNG scheme)
80470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
81470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Return value              : >0 - Samples in decoded vector
82470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *                             -1 - Error
83470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */
84470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
85dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kastingsize_t WebRtcG711_DecodeA(const uint8_t* encoded,
86dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          size_t len,
87dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          int16_t* decoded,
88dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          int16_t* speechType);
89470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
90470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/****************************************************************************
91470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * WebRtcG711_DecodeU(...)
92470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
93470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * This function decodes a packet G711 U-law frame.
94470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
95470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Input:
96470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - encoded            : Encoded data
97470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - len                : Bytes in encoded vector
98470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
99470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Output:
100470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - decoded            : The decoded vector
101470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - speechType         : 1 normal, 2 CNG (for G711 it should
102470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *                             always return 1 since G711 does not have a
103470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *                             built-in DTX/CNG scheme)
104470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
105470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Return value              : >0 - Samples in decoded vector
106470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *                             -1 - Error
107470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */
108470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
109dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kastingsize_t WebRtcG711_DecodeU(const uint8_t* encoded,
110dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          size_t len,
111dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          int16_t* decoded,
112dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          int16_t* speechType);
1135ac387c4d1434fc086f3f159bdde068a5994feedtina.legrand@webrtc.org
114470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/**********************************************************************
115470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com* WebRtcG711_Version(...)
116470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com*
117470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com* This function gives the version string of the G.711 codec.
118470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com*
119470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com* Input:
120470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com*      - lenBytes:     the size of Allocated space (in Bytes) where
121470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com*                      the version number is written to (in string format).
122470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com*
123470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com* Output:
124470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com*      - version:      Pointer to a buffer where the version number is
125470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com*                      written to.
126470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com*
127470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com*/
128470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
129ae4e2b352b4d17c6184687949778704ea60d1da6pbos@webrtc.orgint16_t WebRtcG711_Version(char* version, int16_t lenBytes);
130470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
131470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#ifdef __cplusplus
132470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com}
133470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#endif
134470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
1353c652b67468d182bd36aee4c31557621be50cc92kjellander@webrtc.org#endif  // WEBRTC_MODULES_AUDIO_CODING_CODECS_G711_G711_INTERFACE_H_
136