Home | History | Annotate | Download | only in ilbc
      1 /*
      2  *  Copyright (c) 2012 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 /*
     12  * ilbc.h
     13  *
     14  * This header file contains all of the API's for iLBC.
     15  *
     16  */
     17 
     18 #ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_ILBC_H_
     19 #define WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_ILBC_H_
     20 
     21 #include <stddef.h>
     22 
     23 /*
     24  * Define the fixpoint numeric formats
     25  */
     26 
     27 #include "webrtc/typedefs.h"
     28 
     29 /*
     30  * Solution to support multiple instances
     31  * Customer has to cast instance to proper type
     32  */
     33 
     34 typedef struct iLBC_encinst_t_ IlbcEncoderInstance;
     35 
     36 typedef struct iLBC_decinst_t_ IlbcDecoderInstance;
     37 
     38 /*
     39  * Comfort noise constants
     40  */
     41 
     42 #define ILBC_SPEECH 1
     43 #define ILBC_CNG  2
     44 
     45 #ifdef __cplusplus
     46 extern "C" {
     47 #endif
     48 
     49   /****************************************************************************
     50    * WebRtcIlbcfix_XxxAssign(...)
     51    *
     52    * These functions assigns the encoder/decoder instance to the specified
     53    * memory location
     54    *
     55    * Input:
     56    *     - XXX_xxxinst       : Pointer to created instance that should be
     57    *                           assigned
     58    *     - ILBCXXX_inst_Addr : Pointer to the desired memory space
     59    *     - size              : The size that this structure occupies (in Word16)
     60    *
     61    * Return value             :  0 - Ok
     62    *                            -1 - Error
     63    */
     64 
     65   int16_t WebRtcIlbcfix_EncoderAssign(IlbcEncoderInstance **iLBC_encinst,
     66                                       int16_t *ILBCENC_inst_Addr,
     67                                       int16_t *size);
     68   int16_t WebRtcIlbcfix_DecoderAssign(IlbcDecoderInstance **iLBC_decinst,
     69                                       int16_t *ILBCDEC_inst_Addr,
     70                                       int16_t *size);
     71 
     72 
     73   /****************************************************************************
     74    * WebRtcIlbcfix_XxxAssign(...)
     75    *
     76    * These functions create a instance to the specified structure
     77    *
     78    * Input:
     79    *      - XXX_inst        : Pointer to created instance that should be created
     80    *
     81    * Return value           :  0 - Ok
     82    *                          -1 - Error
     83    */
     84 
     85   int16_t WebRtcIlbcfix_EncoderCreate(IlbcEncoderInstance **iLBC_encinst);
     86   int16_t WebRtcIlbcfix_DecoderCreate(IlbcDecoderInstance **iLBC_decinst);
     87 
     88   /****************************************************************************
     89    * WebRtcIlbcfix_XxxFree(...)
     90    *
     91    * These functions frees the dynamic memory of a specified instance
     92    *
     93    * Input:
     94    *      - XXX_inst          : Pointer to created instance that should be freed
     95    *
     96    * Return value             :  0 - Ok
     97    *                            -1 - Error
     98    */
     99 
    100   int16_t WebRtcIlbcfix_EncoderFree(IlbcEncoderInstance *iLBC_encinst);
    101   int16_t WebRtcIlbcfix_DecoderFree(IlbcDecoderInstance *iLBC_decinst);
    102 
    103 
    104   /****************************************************************************
    105    * WebRtcIlbcfix_EncoderInit(...)
    106    *
    107    * This function initializes a iLBC instance
    108    *
    109    * Input:
    110    *      - iLBCenc_inst      : iLBC instance, i.e. the user that should receive
    111    *                            be initialized
    112    *      - frameLen          : The frame length of the codec 20/30 (ms)
    113    *
    114    * Return value             :  0 - Ok
    115    *                            -1 - Error
    116    */
    117 
    118   int16_t WebRtcIlbcfix_EncoderInit(IlbcEncoderInstance *iLBCenc_inst,
    119                                     int16_t frameLen);
    120 
    121   /****************************************************************************
    122    * WebRtcIlbcfix_Encode(...)
    123    *
    124    * This function encodes one iLBC frame. Input speech length has be a
    125    * multiple of the frame length.
    126    *
    127    * Input:
    128    *      - iLBCenc_inst      : iLBC instance, i.e. the user that should encode
    129    *                            a package
    130    *      - speechIn          : Input speech vector
    131    *      - len               : Samples in speechIn (160, 240, 320 or 480)
    132    *
    133    * Output:
    134    *  - encoded               : The encoded data vector
    135    *
    136    * Return value             : >0 - Length (in bytes) of coded data
    137    *                            -1 - Error
    138    */
    139 
    140   int WebRtcIlbcfix_Encode(IlbcEncoderInstance *iLBCenc_inst,
    141                            const int16_t *speechIn,
    142                            size_t len,
    143                            uint8_t* encoded);
    144 
    145   /****************************************************************************
    146    * WebRtcIlbcfix_DecoderInit(...)
    147    *
    148    * This function initializes a iLBC instance with either 20 or 30 ms frames
    149    * Alternatively the WebRtcIlbcfix_DecoderInit_XXms can be used. Then it's
    150    * not needed to specify the frame length with a variable.
    151    *
    152    * Input:
    153    *      - IlbcDecoderInstance : iLBC decoder instance
    154    *      - frameLen            : The frame length of the codec 20/30 (ms)
    155    *
    156    * Return value               :  0 - Ok
    157    *                              -1 - Error
    158    */
    159 
    160   int16_t WebRtcIlbcfix_DecoderInit(IlbcDecoderInstance *iLBCdec_inst,
    161                                     int16_t frameLen);
    162   void WebRtcIlbcfix_DecoderInit20Ms(IlbcDecoderInstance* iLBCdec_inst);
    163   void WebRtcIlbcfix_Decoderinit30Ms(IlbcDecoderInstance* iLBCdec_inst);
    164 
    165   /****************************************************************************
    166    * WebRtcIlbcfix_Decode(...)
    167    *
    168    * This function decodes a packet with iLBC frame(s). Output speech length
    169    * will be a multiple of 160 or 240 samples ((160 or 240)*frames/packet).
    170    *
    171    * Input:
    172    *      - iLBCdec_inst      : iLBC instance, i.e. the user that should decode
    173    *                            a packet
    174    *      - encoded           : Encoded iLBC frame(s)
    175    *      - len               : Bytes in encoded vector
    176    *
    177    * Output:
    178    *      - decoded           : The decoded vector
    179    *      - speechType        : 1 normal, 2 CNG
    180    *
    181    * Return value             : >0 - Samples in decoded vector
    182    *                            -1 - Error
    183    */
    184 
    185   int WebRtcIlbcfix_Decode(IlbcDecoderInstance* iLBCdec_inst,
    186                            const uint8_t* encoded,
    187                            size_t len,
    188                            int16_t* decoded,
    189                            int16_t* speechType);
    190   int WebRtcIlbcfix_Decode20Ms(IlbcDecoderInstance* iLBCdec_inst,
    191                                const uint8_t* encoded,
    192                                size_t len,
    193                                int16_t* decoded,
    194                                int16_t* speechType);
    195   int WebRtcIlbcfix_Decode30Ms(IlbcDecoderInstance* iLBCdec_inst,
    196                                const uint8_t* encoded,
    197                                size_t len,
    198                                int16_t* decoded,
    199                                int16_t* speechType);
    200 
    201   /****************************************************************************
    202    * WebRtcIlbcfix_DecodePlc(...)
    203    *
    204    * This function conducts PLC for iLBC frame(s). Output speech length
    205    * will be a multiple of 160 or 240 samples.
    206    *
    207    * Input:
    208    *      - iLBCdec_inst      : iLBC instance, i.e. the user that should perform
    209    *                            a PLC
    210    *      - noOfLostFrames    : Number of PLC frames to produce
    211    *
    212    * Output:
    213    *      - decoded           : The "decoded" vector
    214    *
    215    * Return value             : Samples in decoded PLC vector
    216    */
    217 
    218   size_t WebRtcIlbcfix_DecodePlc(IlbcDecoderInstance *iLBCdec_inst,
    219                                  int16_t *decoded,
    220                                  size_t noOfLostFrames);
    221 
    222   /****************************************************************************
    223    * WebRtcIlbcfix_NetEqPlc(...)
    224    *
    225    * This function updates the decoder when a packet loss has occured, but it
    226    * does not produce any PLC data. Function can be used if another PLC method
    227    * is used (i.e NetEq).
    228    *
    229    * Input:
    230    *      - iLBCdec_inst      : iLBC instance that should be updated
    231    *      - noOfLostFrames    : Number of lost frames
    232    *
    233    * Output:
    234    *      - decoded           : The "decoded" vector (nothing in this case)
    235    *
    236    * Return value             : Samples in decoded PLC vector
    237    */
    238 
    239   size_t WebRtcIlbcfix_NetEqPlc(IlbcDecoderInstance *iLBCdec_inst,
    240                                 int16_t *decoded,
    241                                 size_t noOfLostFrames);
    242 
    243   /****************************************************************************
    244    * WebRtcIlbcfix_version(...)
    245    *
    246    * This function returns the version number of iLBC
    247    *
    248    * Output:
    249    *      - version           : Version number of iLBC (maximum 20 char)
    250    */
    251 
    252   void WebRtcIlbcfix_version(char *version);
    253 
    254 #ifdef __cplusplus
    255 }
    256 #endif
    257 
    258 #endif  // WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_ILBC_H_
    259