/* * 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. */ /* * ilbc.h * * This header file contains all of the API's for iLBC. * */ #ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_MAIN_INTERFACE_ILBC_H_ #define WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_MAIN_INTERFACE_ILBC_H_ /* * Define the fixpoint numeric formats */ #include "typedefs.h" /* * Solution to support multiple instances * Customer has to cast instance to proper type */ typedef struct iLBC_encinst_t_ iLBC_encinst_t; typedef struct iLBC_decinst_t_ iLBC_decinst_t; /* * Comfort noise constants */ #define ILBC_SPEECH 1 #define ILBC_CNG 2 #ifdef __cplusplus extern "C" { #endif /**************************************************************************** * WebRtcIlbcfix_XxxAssign(...) * * These functions assigns the encoder/decoder instance to the specified * memory location * * Input: * - XXX_xxxinst : Pointer to created instance that should be * assigned * - ILBCXXX_inst_Addr : Pointer to the desired memory space * - size : The size that this structure occupies (in Word16) * * Return value : 0 - Ok * -1 - Error */ WebRtc_Word16 WebRtcIlbcfix_EncoderAssign(iLBC_encinst_t **iLBC_encinst, WebRtc_Word16 *ILBCENC_inst_Addr, WebRtc_Word16 *size); WebRtc_Word16 WebRtcIlbcfix_DecoderAssign(iLBC_decinst_t **iLBC_decinst, WebRtc_Word16 *ILBCDEC_inst_Addr, WebRtc_Word16 *size); /**************************************************************************** * WebRtcIlbcfix_XxxAssign(...) * * These functions create a instance to the specified structure * * Input: * - XXX_inst : Pointer to created instance that should be created * * Return value : 0 - Ok * -1 - Error */ WebRtc_Word16 WebRtcIlbcfix_EncoderCreate(iLBC_encinst_t **iLBC_encinst); WebRtc_Word16 WebRtcIlbcfix_DecoderCreate(iLBC_decinst_t **iLBC_decinst); /**************************************************************************** * WebRtcIlbcfix_XxxFree(...) * * These functions frees the dynamic memory of a specified instance * * Input: * - XXX_inst : Pointer to created instance that should be freed * * Return value : 0 - Ok * -1 - Error */ WebRtc_Word16 WebRtcIlbcfix_EncoderFree(iLBC_encinst_t *iLBC_encinst); WebRtc_Word16 WebRtcIlbcfix_DecoderFree(iLBC_decinst_t *iLBC_decinst); /**************************************************************************** * WebRtcIlbcfix_EncoderInit(...) * * This function initializes a iLBC instance * * Input: * - iLBCenc_inst : iLBC instance, i.e. the user that should receive * be initialized * - frameLen : The frame length of the codec 20/30 (ms) * * Return value : 0 - Ok * -1 - Error */ WebRtc_Word16 WebRtcIlbcfix_EncoderInit(iLBC_encinst_t *iLBCenc_inst, WebRtc_Word16 frameLen); /**************************************************************************** * WebRtcIlbcfix_Encode(...) * * This function encodes one iLBC frame. Input speech length has be a * multiple of the frame length. * * Input: * - iLBCenc_inst : iLBC instance, i.e. the user that should encode * a package * - speechIn : Input speech vector * - len : Samples in speechIn (160, 240, 320 or 480) * * Output: * - encoded : The encoded data vector * * Return value : >0 - Length (in bytes) of coded data * -1 - Error */ WebRtc_Word16 WebRtcIlbcfix_Encode(iLBC_encinst_t *iLBCenc_inst, WebRtc_Word16 *speechIn, WebRtc_Word16 len, WebRtc_Word16 *encoded); /**************************************************************************** * WebRtcIlbcfix_DecoderInit(...) * * This function initializes a iLBC instance with either 20 or 30 ms frames * Alternatively the WebRtcIlbcfix_DecoderInit_XXms can be used. Then it's * not needed to specify the frame length with a variable. * * Input: * - iLBC_decinst_t : iLBC instance, i.e. the user that should receive * be initialized * - frameLen : The frame length of the codec 20/30 (ms) * * Return value : 0 - Ok * -1 - Error */ WebRtc_Word16 WebRtcIlbcfix_DecoderInit(iLBC_decinst_t *iLBCdec_inst, WebRtc_Word16 frameLen); WebRtc_Word16 WebRtcIlbcfix_DecoderInit20Ms(iLBC_decinst_t *iLBCdec_inst); WebRtc_Word16 WebRtcIlbcfix_Decoderinit30Ms(iLBC_decinst_t *iLBCdec_inst); /**************************************************************************** * WebRtcIlbcfix_Decode(...) * * This function decodes a packet with iLBC frame(s). Output speech length * will be a multiple of 160 or 240 samples ((160 or 240)*frames/packet). * * Input: * - iLBCdec_inst : iLBC instance, i.e. the user that should decode * a packet * - encoded : Encoded iLBC frame(s) * - len : Bytes in encoded vector * * Output: * - decoded : The decoded vector * - speechType : 1 normal, 2 CNG * * Return value : >0 - Samples in decoded vector * -1 - Error */ WebRtc_Word16 WebRtcIlbcfix_Decode(iLBC_decinst_t *iLBCdec_inst, WebRtc_Word16* encoded, WebRtc_Word16 len, WebRtc_Word16 *decoded, WebRtc_Word16 *speechType); WebRtc_Word16 WebRtcIlbcfix_Decode20Ms(iLBC_decinst_t *iLBCdec_inst, WebRtc_Word16 *encoded, WebRtc_Word16 len, WebRtc_Word16 *decoded, WebRtc_Word16 *speechType); WebRtc_Word16 WebRtcIlbcfix_Decode30Ms(iLBC_decinst_t *iLBCdec_inst, WebRtc_Word16 *encoded, WebRtc_Word16 len, WebRtc_Word16 *decoded, WebRtc_Word16 *speechType); /**************************************************************************** * WebRtcIlbcfix_DecodePlc(...) * * This function conducts PLC for iLBC frame(s). Output speech length * will be a multiple of 160 or 240 samples. * * Input: * - iLBCdec_inst : iLBC instance, i.e. the user that should perform * a PLC * - noOfLostFrames : Number of PLC frames to produce * * Output: * - decoded : The "decoded" vector * * Return value : >0 - Samples in decoded PLC vector * -1 - Error */ WebRtc_Word16 WebRtcIlbcfix_DecodePlc(iLBC_decinst_t *iLBCdec_inst, WebRtc_Word16 *decoded, WebRtc_Word16 noOfLostFrames); /**************************************************************************** * WebRtcIlbcfix_NetEqPlc(...) * * This function updates the decoder when a packet loss has occured, but it * does not produce any PLC data. Function can be used if another PLC method * is used (i.e NetEq). * * Input: * - iLBCdec_inst : iLBC instance that should be updated * - noOfLostFrames : Number of lost frames * * Output: * - decoded : The "decoded" vector (nothing in this case) * * Return value : >0 - Samples in decoded PLC vector * -1 - Error */ WebRtc_Word16 WebRtcIlbcfix_NetEqPlc(iLBC_decinst_t *iLBCdec_inst, WebRtc_Word16 *decoded, WebRtc_Word16 noOfLostFrames); /**************************************************************************** * WebRtcIlbcfix_version(...) * * This function returns the version number of iLBC * * Output: * - version : Version number of iLBC (maximum 20 char) */ void WebRtcIlbcfix_version(WebRtc_Word8 *version); #ifdef __cplusplus } #endif #endif