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#include <string.h>
11470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include "g711.h"
12470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include "g711_interface.h"
13262e676a08fc29ee6c414f5858d68697be983515andresp@webrtc.org#include "webrtc/typedefs.h"
14470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
15dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kastingsize_t WebRtcG711_EncodeA(const int16_t* speechIn,
16dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          size_t len,
17dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          uint8_t* encoded) {
18dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting  size_t n;
191c6239a3b622fd886d1a2d78cb716b4745446a51kwiberg@webrtc.org  for (n = 0; n < len; n++)
201c6239a3b622fd886d1a2d78cb716b4745446a51kwiberg@webrtc.org    encoded[n] = linear_to_alaw(speechIn[n]);
211c6239a3b622fd886d1a2d78cb716b4745446a51kwiberg@webrtc.org  return len;
22470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com}
23470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
24dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kastingsize_t WebRtcG711_EncodeU(const int16_t* speechIn,
25dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          size_t len,
26dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          uint8_t* encoded) {
27dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting  size_t n;
281c6239a3b622fd886d1a2d78cb716b4745446a51kwiberg@webrtc.org  for (n = 0; n < len; n++)
291c6239a3b622fd886d1a2d78cb716b4745446a51kwiberg@webrtc.org    encoded[n] = linear_to_ulaw(speechIn[n]);
301c6239a3b622fd886d1a2d78cb716b4745446a51kwiberg@webrtc.org  return len;
31470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com}
32470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
33dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kastingsize_t WebRtcG711_DecodeA(const uint8_t* encoded,
34dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          size_t len,
35dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          int16_t* decoded,
36dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          int16_t* speechType) {
37dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting  size_t n;
381c6239a3b622fd886d1a2d78cb716b4745446a51kwiberg@webrtc.org  for (n = 0; n < len; n++)
391c6239a3b622fd886d1a2d78cb716b4745446a51kwiberg@webrtc.org    decoded[n] = alaw_to_linear(encoded[n]);
40ae4e2b352b4d17c6184687949778704ea60d1da6pbos@webrtc.org  *speechType = 1;
411c6239a3b622fd886d1a2d78cb716b4745446a51kwiberg@webrtc.org  return len;
42470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com}
43470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
44dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kastingsize_t WebRtcG711_DecodeU(const uint8_t* encoded,
45dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          size_t len,
46dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          int16_t* decoded,
47dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting                          int16_t* speechType) {
48dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting  size_t n;
491c6239a3b622fd886d1a2d78cb716b4745446a51kwiberg@webrtc.org  for (n = 0; n < len; n++)
501c6239a3b622fd886d1a2d78cb716b4745446a51kwiberg@webrtc.org    decoded[n] = ulaw_to_linear(encoded[n]);
51ae4e2b352b4d17c6184687949778704ea60d1da6pbos@webrtc.org  *speechType = 1;
521c6239a3b622fd886d1a2d78cb716b4745446a51kwiberg@webrtc.org  return len;
53470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com}
54470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
55ae4e2b352b4d17c6184687949778704ea60d1da6pbos@webrtc.orgint16_t WebRtcG711_Version(char* version, int16_t lenBytes) {
56ae4e2b352b4d17c6184687949778704ea60d1da6pbos@webrtc.org  strncpy(version, "2.0.0", lenBytes);
57ae4e2b352b4d17c6184687949778704ea60d1da6pbos@webrtc.org  return 0;
58470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com}
59