Home | History | Annotate | Download | only in interface
      1 /*
      2  *  Copyright (c) 2011 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 #ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_INTERFACE_ISACFIX_H_
     12 #define WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_INTERFACE_ISACFIX_H_
     13 
     14 /*
     15  * Define the fixpoint numeric formats
     16  */
     17 #include "typedefs.h"
     18 
     19 
     20 typedef struct {
     21   void *dummy;
     22 } ISACFIX_MainStruct;
     23 
     24 
     25 #if defined(__cplusplus)
     26 extern "C" {
     27 #endif
     28 
     29 
     30   /**************************************************************************
     31    * WebRtcIsacfix_AssignSize(...)
     32    *
     33    *  Functions used when malloc is not allowed
     34    *  Output the number of bytes needed to allocate for iSAC struct.
     35    *
     36    */
     37 
     38   WebRtc_Word16 WebRtcIsacfix_AssignSize(int *sizeinbytes);
     39 
     40   /**************************************************************************
     41    * WebRtcIsacfix_Assign(...)
     42    *
     43    * Functions used when malloc is not allowed, it
     44    * places a struct at the given address.
     45    *
     46    * Input:
     47    *      - *ISAC_main_inst   : a pointer to the coder instance.
     48    *      - ISACFIX_inst_Addr : address of the memory where a space is
     49    *                            for iSAC structure.
     50    *
     51    * Return value             : 0 - Ok
     52    *                           -1 - Error
     53    */
     54 
     55   WebRtc_Word16 WebRtcIsacfix_Assign(ISACFIX_MainStruct **inst,
     56                                      void *ISACFIX_inst_Addr);
     57 
     58   /****************************************************************************
     59    * WebRtcIsacfix_Create(...)
     60    *
     61    * This function creates an ISAC instance, which will contain the state
     62    * information for one coding/decoding channel.
     63    *
     64    * Input:
     65    *      - *ISAC_main_inst   : a pointer to the coder instance.
     66    *
     67    * Return value             : 0 - Ok
     68    *                           -1 - Error
     69    */
     70 
     71   WebRtc_Word16 WebRtcIsacfix_Create(ISACFIX_MainStruct **ISAC_main_inst);
     72 
     73 
     74   /****************************************************************************
     75    * WebRtcIsacfix_Free(...)
     76    *
     77    * This function frees the ISAC instance created at the beginning.
     78    *
     79    * Input:
     80    *      - ISAC_main_inst    : a ISAC instance.
     81    *
     82    * Return value             :  0 - Ok
     83    *                            -1 - Error
     84    */
     85 
     86   WebRtc_Word16 WebRtcIsacfix_Free(ISACFIX_MainStruct *ISAC_main_inst);
     87 
     88 
     89   /****************************************************************************
     90    * WebRtcIsacfix_EncoderInit(...)
     91    *
     92    * This function initializes an ISAC instance prior to the encoder calls.
     93    *
     94    * Input:
     95    *     - ISAC_main_inst     : ISAC instance.
     96    *     - CodingMode         : 0 - Bit rate and frame length are automatically
     97    *                                adjusted to available bandwidth on
     98    *                                transmission channel.
     99    *                            1 - User sets a frame length and a target bit
    100    *                                rate which is taken as the maximum short-term
    101    *                                average bit rate.
    102    *
    103    * Return value             :  0 - Ok
    104    *                            -1 - Error
    105    */
    106 
    107   WebRtc_Word16 WebRtcIsacfix_EncoderInit(ISACFIX_MainStruct *ISAC_main_inst,
    108                                           WebRtc_Word16  CodingMode);
    109 
    110 
    111   /****************************************************************************
    112    * WebRtcIsacfix_Encode(...)
    113    *
    114    * This function encodes 10ms frame(s) and inserts it into a package.
    115    * Input speech length has to be 160 samples (10ms). The encoder buffers those
    116    * 10ms frames until it reaches the chosen Framesize (480 or 960 samples
    117    * corresponding to 30 or 60 ms frames), and then proceeds to the encoding.
    118    *
    119    * Input:
    120    *      - ISAC_main_inst    : ISAC instance.
    121    *      - speechIn          : input speech vector.
    122    *
    123    * Output:
    124    *      - encoded           : the encoded data vector
    125    *
    126    * Return value             : >0 - Length (in bytes) of coded data
    127    *                             0 - The buffer didn't reach the chosen framesize
    128    *                                 so it keeps buffering speech samples.
    129    *                            -1 - Error
    130    */
    131 
    132   WebRtc_Word16 WebRtcIsacfix_Encode(ISACFIX_MainStruct *ISAC_main_inst,
    133                                      const WebRtc_Word16 *speechIn,
    134                                      WebRtc_Word16 *encoded);
    135 
    136 
    137 
    138   /****************************************************************************
    139    * WebRtcIsacfix_EncodeNb(...)
    140    *
    141    * This function encodes 10ms narrow band (8 kHz sampling) frame(s) and inserts
    142    * it into a package. Input speech length has to be 80 samples (10ms). The encoder
    143    * interpolates into wide-band (16 kHz sampling) buffers those
    144    * 10ms frames until it reaches the chosen Framesize (480 or 960 wide-band samples
    145    * corresponding to 30 or 60 ms frames), and then proceeds to the encoding.
    146    *
    147    * The function is enabled if WEBRTC_ISAC_FIX_NB_CALLS_ENABLED is defined
    148    *
    149    * Input:
    150    *      - ISAC_main_inst    : ISAC instance.
    151    *      - speechIn          : input speech vector.
    152    *
    153    * Output:
    154    *      - encoded           : the encoded data vector
    155    *
    156    * Return value             : >0 - Length (in bytes) of coded data
    157    *                             0 - The buffer didn't reach the chosen framesize
    158    *                                 so it keeps buffering speech samples.
    159    *                            -1 - Error
    160    */
    161 
    162 
    163 #ifdef WEBRTC_ISAC_FIX_NB_CALLS_ENABLED
    164   WebRtc_Word16 WebRtcIsacfix_EncodeNb(ISACFIX_MainStruct *ISAC_main_inst,
    165                                        const WebRtc_Word16 *speechIn,
    166                                        WebRtc_Word16 *encoded);
    167 #endif //  WEBRTC_ISAC_FIX_NB_CALLS_ENABLED
    168 
    169 
    170 
    171   /****************************************************************************
    172    * WebRtcIsacfix_DecoderInit(...)
    173    *
    174    * This function initializes an ISAC instance prior to the decoder calls.
    175    *
    176    * Input:
    177    *  - ISAC_main_inst : ISAC instance.
    178    *
    179    * Return value
    180    *       :  0 - Ok
    181    *         -1 - Error
    182    */
    183 
    184   WebRtc_Word16 WebRtcIsacfix_DecoderInit(ISACFIX_MainStruct *ISAC_main_inst);
    185 
    186 
    187   /****************************************************************************
    188    * WebRtcIsacfix_UpdateBwEstimate1(...)
    189    *
    190    * This function updates the estimate of the bandwidth.
    191    *
    192    * Input:
    193    *      - ISAC_main_inst    : ISAC instance.
    194    *      - encoded           : encoded ISAC frame(s).
    195    *      - packet_size       : size of the packet.
    196    *      - rtp_seq_number    : the RTP number of the packet.
    197    *      - arr_ts            : the arrival time of the packet (from NetEq)
    198    *                            in samples.
    199    *
    200    * Return value             : 0 - Ok
    201    *                           -1 - Error
    202    */
    203 
    204   WebRtc_Word16 WebRtcIsacfix_UpdateBwEstimate1(ISACFIX_MainStruct *ISAC_main_inst,
    205                                                 const WebRtc_UWord16 *encoded,
    206                                                 WebRtc_Word32  packet_size,
    207                                                 WebRtc_UWord16 rtp_seq_number,
    208                                                 WebRtc_UWord32 arr_ts);
    209 
    210   /****************************************************************************
    211    * WebRtcIsacfix_UpdateBwEstimate(...)
    212    *
    213    * This function updates the estimate of the bandwidth.
    214    *
    215    * Input:
    216    *      - ISAC_main_inst    : ISAC instance.
    217    *      - encoded           : encoded ISAC frame(s).
    218    *      - packet_size       : size of the packet.
    219    *      - rtp_seq_number    : the RTP number of the packet.
    220    *      - send_ts           : the send time of the packet from RTP header,
    221    *                            in samples.
    222    *      - arr_ts            : the arrival time of the packet (from NetEq)
    223    *                            in samples.
    224    *
    225    * Return value             :  0 - Ok
    226    *                            -1 - Error
    227    */
    228 
    229   WebRtc_Word16 WebRtcIsacfix_UpdateBwEstimate(ISACFIX_MainStruct *ISAC_main_inst,
    230                                                const WebRtc_UWord16   *encoded,
    231                                                WebRtc_Word32          packet_size,
    232                                                WebRtc_UWord16         rtp_seq_number,
    233                                                WebRtc_UWord32         send_ts,
    234                                                WebRtc_UWord32         arr_ts);
    235 
    236   /****************************************************************************
    237    * WebRtcIsacfix_Decode(...)
    238    *
    239    * This function decodes an ISAC frame. Output speech length
    240    * will be a multiple of 480 samples: 480 or 960 samples,
    241    * depending on the framesize (30 or 60 ms).
    242    *
    243    * Input:
    244    *      - ISAC_main_inst    : ISAC instance.
    245    *      - encoded           : encoded ISAC frame(s)
    246    *      - len               : bytes in encoded vector
    247    *
    248    * Output:
    249    *      - decoded           : The decoded vector
    250    *
    251    * Return value             : >0 - number of samples in decoded vector
    252    *                            -1 - Error
    253    */
    254 
    255   WebRtc_Word16 WebRtcIsacfix_Decode(ISACFIX_MainStruct *ISAC_main_inst,
    256                                      const WebRtc_UWord16 *encoded,
    257                                      WebRtc_Word16 len,
    258                                      WebRtc_Word16 *decoded,
    259                                      WebRtc_Word16 *speechType);
    260 
    261 
    262   /****************************************************************************
    263    * WebRtcIsacfix_DecodeNb(...)
    264    *
    265    * This function decodes a ISAC frame in narrow-band (8 kHz sampling).
    266    * Output speech length will be a multiple of 240 samples: 240 or 480 samples,
    267    * depending on the framesize (30 or 60 ms).
    268    *
    269    * The function is enabled if WEBRTC_ISAC_FIX_NB_CALLS_ENABLED is defined
    270    *
    271    * Input:
    272    *      - ISAC_main_inst    : ISAC instance.
    273    *      - encoded           : encoded ISAC frame(s)
    274    *      - len               : bytes in encoded vector
    275    *
    276    * Output:
    277    *      - decoded           : The decoded vector
    278    *
    279    * Return value             : >0 - number of samples in decoded vector
    280    *                            -1 - Error
    281    */
    282 
    283 #ifdef WEBRTC_ISAC_FIX_NB_CALLS_ENABLED
    284   WebRtc_Word16 WebRtcIsacfix_DecodeNb(ISACFIX_MainStruct *ISAC_main_inst,
    285                                        const WebRtc_UWord16 *encoded,
    286                                        WebRtc_Word16 len,
    287                                        WebRtc_Word16 *decoded,
    288                                        WebRtc_Word16 *speechType);
    289 #endif //  WEBRTC_ISAC_FIX_NB_CALLS_ENABLED
    290 
    291 
    292   /****************************************************************************
    293    * WebRtcIsacfix_DecodePlcNb(...)
    294    *
    295    * This function conducts PLC for ISAC frame(s) in narrow-band (8kHz sampling).
    296    * Output speech length  will be "240*noOfLostFrames" samples
    297    * that equevalent of "30*noOfLostFrames" millisecond.
    298    *
    299    * The function is enabled if WEBRTC_ISAC_FIX_NB_CALLS_ENABLED is defined
    300    *
    301    * Input:
    302    *      - ISAC_main_inst    : ISAC instance.
    303    *      - noOfLostFrames    : Number of PLC frames (240 sample=30ms) to produce
    304    *                            NOTE! Maximum number is 2 (480 samples = 60ms)
    305    *
    306    * Output:
    307    *      - decoded           : The decoded vector
    308    *
    309    * Return value             : >0 - number of samples in decoded PLC vector
    310    *                            -1 - Error
    311    */
    312 
    313 #ifdef WEBRTC_ISAC_FIX_NB_CALLS_ENABLED
    314   WebRtc_Word16 WebRtcIsacfix_DecodePlcNb(ISACFIX_MainStruct *ISAC_main_inst,
    315                                           WebRtc_Word16 *decoded,
    316                                           WebRtc_Word16 noOfLostFrames );
    317 #endif // WEBRTC_ISAC_FIX_NB_CALLS_ENABLED
    318 
    319 
    320 
    321 
    322   /****************************************************************************
    323    * WebRtcIsacfix_DecodePlc(...)
    324    *
    325    * This function conducts PLC for ISAC frame(s) in wide-band (16kHz sampling).
    326    * Output speech length  will be "480*noOfLostFrames" samples
    327    * that is equevalent of "30*noOfLostFrames" millisecond.
    328    *
    329    * Input:
    330    *      - ISAC_main_inst    : ISAC instance.
    331    *      - noOfLostFrames    : Number of PLC frames (480sample = 30ms)
    332    *                            to produce
    333    *                            NOTE! Maximum number is 2 (960 samples = 60ms)
    334    *
    335    * Output:
    336    *      - decoded           : The decoded vector
    337    *
    338    * Return value             : >0 - number of samples in decoded PLC vector
    339    *                            -1 - Error
    340    */
    341 
    342   WebRtc_Word16 WebRtcIsacfix_DecodePlc(ISACFIX_MainStruct *ISAC_main_inst,
    343                                         WebRtc_Word16 *decoded,
    344                                         WebRtc_Word16 noOfLostFrames );
    345 
    346 
    347   /****************************************************************************
    348    * WebRtcIsacfix_ReadFrameLen(...)
    349    *
    350    * This function returns the length of the frame represented in the packet.
    351    *
    352    * Input:
    353    *      - encoded           : Encoded bitstream
    354    *
    355    * Output:
    356    *      - frameLength       : Length of frame in packet (in samples)
    357    *
    358    */
    359 
    360   WebRtc_Word16 WebRtcIsacfix_ReadFrameLen(const WebRtc_Word16* encoded,
    361                                            WebRtc_Word16* frameLength);
    362 
    363   /****************************************************************************
    364    * WebRtcIsacfix_Control(...)
    365    *
    366    * This function sets the limit on the short-term average bit rate and the
    367    * frame length. Should be used only in Instantaneous mode.
    368    *
    369    * Input:
    370    *      - ISAC_main_inst    : ISAC instance.
    371    *      - rate              : limit on the short-term average bit rate,
    372    *                            in bits/second (between 10000 and 32000)
    373    *      - framesize         : number of milliseconds per frame (30 or 60)
    374    *
    375    * Return value             : 0  - ok
    376    *                           -1 - Error
    377    */
    378 
    379   WebRtc_Word16 WebRtcIsacfix_Control(ISACFIX_MainStruct *ISAC_main_inst,
    380                                       WebRtc_Word16          rate,
    381                                       WebRtc_Word16          framesize);
    382 
    383 
    384 
    385   /****************************************************************************
    386    * WebRtcIsacfix_ControlBwe(...)
    387    *
    388    * This function sets the initial values of bottleneck and frame-size if
    389    * iSAC is used in channel-adaptive mode. Through this API, users can
    390    * enforce a frame-size for all values of bottleneck. Then iSAC will not
    391    * automatically change the frame-size.
    392    *
    393    *
    394    * Input:
    395    *      - ISAC_main_inst    : ISAC instance.
    396    *      - rateBPS           : initial value of bottleneck in bits/second
    397    *                            10000 <= rateBPS <= 32000 is accepted
    398    *      - frameSizeMs       : number of milliseconds per frame (30 or 60)
    399    *      - enforceFrameSize  : 1 to enforce the given frame-size through out
    400    *                            the adaptation process, 0 to let iSAC change
    401    *                            the frame-size if required.
    402    *
    403    * Return value             : 0  - ok
    404    *                           -1 - Error
    405    */
    406 
    407   WebRtc_Word16 WebRtcIsacfix_ControlBwe(ISACFIX_MainStruct *ISAC_main_inst,
    408                                          WebRtc_Word16 rateBPS,
    409                                          WebRtc_Word16 frameSizeMs,
    410                                          WebRtc_Word16 enforceFrameSize);
    411 
    412 
    413 
    414   /****************************************************************************
    415    * WebRtcIsacfix_version(...)
    416    *
    417    * This function returns the version number.
    418    *
    419    * Output:
    420    *      - version      : Pointer to character string
    421    *
    422    */
    423 
    424   void WebRtcIsacfix_version(char *version);
    425 
    426 
    427   /****************************************************************************
    428    * WebRtcIsacfix_GetErrorCode(...)
    429    *
    430    * This function can be used to check the error code of an iSAC instance. When
    431    * a function returns -1 a error code will be set for that instance. The
    432    * function below extract the code of the last error that occured in the
    433    * specified instance.
    434    *
    435    * Input:
    436    *  - ISAC_main_inst        : ISAC instance
    437    *
    438    * Return value             : Error code
    439    */
    440 
    441   WebRtc_Word16 WebRtcIsacfix_GetErrorCode(ISACFIX_MainStruct *ISAC_main_inst);
    442 
    443 
    444   /****************************************************************************
    445    * WebRtcIsacfix_GetUplinkBw(...)
    446    *
    447    * This function return iSAC send bitrate
    448    *
    449    * Input:
    450    *      - ISAC_main_inst    : iSAC instance
    451    *
    452    * Return value             : <0 Error code
    453    *                            else bitrate
    454    */
    455 
    456   WebRtc_Word32 WebRtcIsacfix_GetUplinkBw(ISACFIX_MainStruct *ISAC_main_inst);
    457 
    458 
    459   /****************************************************************************
    460    * WebRtcIsacfix_SetMaxPayloadSize(...)
    461    *
    462    * This function sets a limit for the maximum payload size of iSAC. The same
    463    * value is used both for 30 and 60 msec packets.
    464    * The absolute max will be valid until next time the function is called.
    465    * NOTE! This function may override the function WebRtcIsacfix_SetMaxRate()
    466    *
    467    * Input:
    468    *      - ISAC_main_inst    : iSAC instance
    469    *      - maxPayloadBytes   : maximum size of the payload in bytes
    470    *                            valid values are between 100 and 400 bytes
    471    *
    472    *
    473    * Return value             : 0 if sucessful
    474    *                           -1 if error happens
    475    */
    476 
    477   WebRtc_Word16 WebRtcIsacfix_SetMaxPayloadSize(ISACFIX_MainStruct *ISAC_main_inst,
    478                                                 WebRtc_Word16 maxPayloadBytes);
    479 
    480 
    481   /****************************************************************************
    482    * WebRtcIsacfix_SetMaxRate(...)
    483    *
    484    * This function sets the maximum rate which the codec may not exceed for a
    485    * singel packet. The maximum rate is set in bits per second.
    486    * The codec has an absolute maximum rate of 53400 bits per second (200 bytes
    487    * per 30 msec).
    488    * It is possible to set a maximum rate between 32000 and 53400 bits per second.
    489    *
    490    * The rate limit is valid until next time the function is called.
    491    *
    492    * NOTE! Packet size will never go above the value set if calling
    493    * WebRtcIsacfix_SetMaxPayloadSize() (default max packet size is 400 bytes).
    494    *
    495    * Input:
    496    *      - ISAC_main_inst    : iSAC instance
    497    *      - maxRateInBytes    : maximum rate in bits per second,
    498    *                            valid values are 32000 to 53400 bits
    499    *
    500    * Return value             : 0 if sucessful
    501    *                           -1 if error happens
    502    */
    503 
    504   WebRtc_Word16 WebRtcIsacfix_SetMaxRate(ISACFIX_MainStruct *ISAC_main_inst,
    505                                          WebRtc_Word32 maxRate);
    506 
    507   /****************************************************************************
    508    * WebRtcIsacfix_CreateInternal(...)
    509    *
    510    * This function creates the memory that is used to store data in the encoder
    511    *
    512    * Input:
    513    *      - *ISAC_main_inst   : a pointer to the coder instance.
    514    *
    515    * Return value             : 0 - Ok
    516    *                           -1 - Error
    517    */
    518 
    519   WebRtc_Word16 WebRtcIsacfix_CreateInternal(ISACFIX_MainStruct *ISAC_main_inst);
    520 
    521 
    522   /****************************************************************************
    523    * WebRtcIsacfix_FreeInternal(...)
    524    *
    525    * This function frees the internal memory for storing encoder data.
    526    *
    527    * Input:
    528    *      - ISAC_main_inst        : an ISAC instance.
    529    *
    530    * Return value                 :  0 - Ok
    531    *                                -1 - Error
    532    */
    533 
    534   WebRtc_Word16 WebRtcIsacfix_FreeInternal(ISACFIX_MainStruct *ISAC_main_inst);
    535 
    536 
    537   /****************************************************************************
    538    * WebRtcIsacfix_GetNewBitStream(...)
    539    *
    540    * This function returns encoded data, with the recieved bwe-index in the
    541    * stream. It should always return a complete packet, i.e. only called once
    542    * even for 60 msec frames
    543    *
    544    * Input:
    545    *      - ISAC_main_inst    : ISAC instance.
    546    *      - bweIndex          : index of bandwidth estimate to put in new bitstream
    547    *      - scale             : factor for rate change (0.4 ~=> half the rate, 1 no change).
    548    *
    549    * Output:
    550    *      - encoded           : the encoded data vector
    551    *
    552    * Return value             : >0 - Length (in bytes) of coded data
    553    *                            -1 - Error
    554    */
    555 
    556   WebRtc_Word16 WebRtcIsacfix_GetNewBitStream(ISACFIX_MainStruct *ISAC_main_inst,
    557                                               WebRtc_Word16          bweIndex,
    558                                               float              scale,
    559                                               WebRtc_Word16        *encoded);
    560 
    561 
    562   /****************************************************************************
    563    * WebRtcIsacfix_GetDownLinkBwIndex(...)
    564    *
    565    * This function returns index representing the Bandwidth estimate from
    566    * other side to this side.
    567    *
    568    * Input:
    569    *      - ISAC_main_inst    : iSAC struct
    570    *
    571    * Output:
    572    *      - rateIndex         : Bandwidth estimate to transmit to other side.
    573    *
    574    */
    575 
    576   WebRtc_Word16 WebRtcIsacfix_GetDownLinkBwIndex(ISACFIX_MainStruct* ISAC_main_inst,
    577                                                  WebRtc_Word16*     rateIndex);
    578 
    579 
    580   /****************************************************************************
    581    * WebRtcIsacfix_UpdateUplinkBw(...)
    582    *
    583    * This function takes an index representing the Bandwidth estimate from
    584    * this side to other side and updates BWE.
    585    *
    586    * Input:
    587    *      - ISAC_main_inst    : iSAC struct
    588    *      - rateIndex         : Bandwidth estimate from other side.
    589    *
    590    */
    591 
    592   WebRtc_Word16 WebRtcIsacfix_UpdateUplinkBw(ISACFIX_MainStruct* ISAC_main_inst,
    593                                              WebRtc_Word16     rateIndex);
    594 
    595 
    596   /****************************************************************************
    597    * WebRtcIsacfix_ReadBwIndex(...)
    598    *
    599    * This function returns the index of the Bandwidth estimate from the bitstream.
    600    *
    601    * Input:
    602    *      - encoded           : Encoded bitstream
    603    *
    604    * Output:
    605    *      - rateIndex         : Bandwidth estimate in bitstream
    606    *
    607    */
    608 
    609   WebRtc_Word16 WebRtcIsacfix_ReadBwIndex(const WebRtc_Word16* encoded,
    610                                           WebRtc_Word16* rateIndex);
    611 
    612 
    613   /****************************************************************************
    614    * WebRtcIsacfix_GetNewFrameLen(...)
    615    *
    616    * This function return the next frame length (in samples) of iSAC.
    617    *
    618    * Input:
    619    *      -ISAC_main_inst     : iSAC instance
    620    *
    621    * Return value             : frame lenght in samples
    622    */
    623 
    624   WebRtc_Word16 WebRtcIsacfix_GetNewFrameLen(ISACFIX_MainStruct *ISAC_main_inst);
    625 
    626 
    627 #if defined(__cplusplus)
    628 }
    629 #endif
    630 
    631 
    632 
    633 #endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_INTERFACE_ISACFIX_H_ */
    634