| /* | |
| * 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. | |
| */ | |
| #include "modules/audio_coding/codecs/g722/g722_interface.h" | |
| #include <stdlib.h> | |
| #include <string.h> | |
| #include "modules/third_party/g722/g722_enc_dec.h" | |
| int16_t WebRtcG722_CreateEncoder(G722EncInst** G722enc_inst) { | |
| *G722enc_inst = (G722EncInst*)malloc(sizeof(G722EncoderState)); | |
| if (*G722enc_inst != NULL) { | |
| return (0); | |
| } else { | |
| return (-1); | |
| } | |
| } | |
| int16_t WebRtcG722_EncoderInit(G722EncInst* G722enc_inst) { | |
| // Create and/or reset the G.722 encoder | |
| // Bitrate 64 kbps and wideband mode (2) | |
| G722enc_inst = (G722EncInst*)WebRtc_g722_encode_init( | |
| (G722EncoderState*)G722enc_inst, 64000, 2); | |
| if (G722enc_inst == NULL) { | |
| return -1; | |
| } else { | |
| return 0; | |
| } | |
| } | |
| int WebRtcG722_FreeEncoder(G722EncInst* G722enc_inst) { | |
| // Free encoder memory | |
| return WebRtc_g722_encode_release((G722EncoderState*)G722enc_inst); | |
| } | |
| size_t WebRtcG722_Encode(G722EncInst* G722enc_inst, | |
| const int16_t* speechIn, | |
| size_t len, | |
| uint8_t* encoded) { | |
| unsigned char* codechar = (unsigned char*)encoded; | |
| // Encode the input speech vector | |
| return WebRtc_g722_encode((G722EncoderState*)G722enc_inst, codechar, speechIn, | |
| len); | |
| } | |
| int16_t WebRtcG722_CreateDecoder(G722DecInst** G722dec_inst) { | |
| *G722dec_inst = (G722DecInst*)malloc(sizeof(G722DecoderState)); | |
| if (*G722dec_inst != NULL) { | |
| return (0); | |
| } else { | |
| return (-1); | |
| } | |
| } | |
| void WebRtcG722_DecoderInit(G722DecInst* inst) { | |
| // Create and/or reset the G.722 decoder | |
| // Bitrate 64 kbps and wideband mode (2) | |
| WebRtc_g722_decode_init((G722DecoderState*)inst, 64000, 2); | |
| } | |
| int WebRtcG722_FreeDecoder(G722DecInst* G722dec_inst) { | |
| // Free encoder memory | |
| return WebRtc_g722_decode_release((G722DecoderState*)G722dec_inst); | |
| } | |
| size_t WebRtcG722_Decode(G722DecInst* G722dec_inst, | |
| const uint8_t* encoded, | |
| size_t len, | |
| int16_t* decoded, | |
| int16_t* speechType) { | |
| // Decode the G.722 encoder stream | |
| *speechType = G722_WEBRTC_SPEECH; | |
| return WebRtc_g722_decode((G722DecoderState*)G722dec_inst, decoded, encoded, | |
| len); | |
| } | |
| int16_t WebRtcG722_Version(char* versionStr, short len) { | |
| // Get version string | |
| char version[30] = "2.0.0\n"; | |
| if (strlen(version) < (unsigned int)len) { | |
| strcpy(versionStr, version); | |
| return 0; | |
| } else { | |
| return -1; | |
| } | |
| } |