16f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin/*
26f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
36f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin *
46f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin *  Use of this source code is governed by a BSD-style license
56f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin *  that can be found in the LICENSE file in the root of the source
66f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin *  tree. An additional intellectual property rights grant can be found
76f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin *  in the file PATENTS.  All contributing project authors may
86f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin *  be found in the AUTHORS file in the root of the source tree.
96f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin */
106f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
116f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_INTERFACE_ISAC_H_
126f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_INTERFACE_ISAC_H_
136f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
146f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin/*
156f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin * Define the fixed-point numeric formats
166f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin */
176f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin#include "typedefs.h"
186f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
196f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct WebRtcISACStruct    ISACStruct;
206f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
216f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkinenum IsacSamplingRate {kIsacWideband = 16,  kIsacSuperWideband = 32};
226f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
236f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
246f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin#if defined(__cplusplus)
256f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkinextern "C" {
266f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin#endif
276f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
286f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
296f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_AssignSize(...)
306f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
316f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function returns the size of the ISAC instance, so that the instance
326f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * can be created outside iSAC.
336f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
346f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
356f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - samplingRate      : sampling rate of the input/output audio.
366f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
376f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Output:
386f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - sizeinbytes       : number of bytes needed to allocate for the
396f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              instance.
406f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
416f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : 0 - Ok
426f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                             -1 - Error
436f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
446f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
456f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_AssignSize(
466f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      int* sizeinbytes);
476f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
486f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
496f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
506f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_Assign(...)
516f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
526f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function assignes the memory already created to the ISAC instance.
536f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
546f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
556f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - *ISAC_main_inst   : a pointer to the coder instance.
566f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - samplingRate      : sampling rate of the input/output audio.
576f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_inst_Addr    : the already allocated memory, where we put the
586f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              iSAC structure.
596f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
606f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : 0 - Ok
616f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                             -1 - Error
626f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
636f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
646f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_Assign(
656f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct** ISAC_main_inst,
666f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      void*        ISAC_inst_Addr);
676f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
686f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
696f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
706f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_Create(...)
716f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
726f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function creates an ISAC instance, which will contain the state
736f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * information for one coding/decoding channel.
746f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
756f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
766f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - *ISAC_main_inst   : a pointer to the coder instance.
776f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
786f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : 0 - Ok
796f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                             -1 - Error
806f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
816f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
826f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_Create(
836f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct** ISAC_main_inst);
846f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
856f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
866f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
876f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_Free(...)
886f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
896f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function frees the ISAC instance created at the beginning.
906f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
916f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
926f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : an ISAC instance.
936f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
946f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : 0 - Ok
956f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                             -1 - Error
966f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
976f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
986f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_Free(
996f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct* ISAC_main_inst);
1006f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
1016f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
1026f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
1036f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_EncoderInit(...)
1046f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
1056f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function initializes an ISAC instance prior to the encoder calls.
1066f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
1076f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
1086f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : ISAC instance.
1096f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - CodingMode        : 0 -> Bit rate and frame length are
1106f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                                automatically adjusted to available bandwidth
1116f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                                on transmission channel, just valid if codec
1126f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                                is created to work in wideband mode.
1136f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              1 -> User sets a frame length and a target bit
1146f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                                rate which is taken as the maximum
1156f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                                short-term average bit rate.
1166f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
1176f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : 0 - Ok
1186f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                             -1 - Error
1196f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
1206f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
1216f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_EncoderInit(
1226f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct* ISAC_main_inst,
1236f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16 CodingMode);
1246f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
1256f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
1266f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
1276f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_Encode(...)
1286f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
1296f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function encodes 10ms audio blocks and inserts it into a package.
1306f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input speech length has 160 samples if operating at 16 kHz sampling
1316f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * rate, or 320 if operating at 32 kHz sampling rate. The encoder buffers the
1326f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * input audio until the whole frame is buffered then proceeds with encoding.
1336f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
1346f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
1356f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
1366f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : ISAC instance.
1376f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - speechIn          : input speech vector.
1386f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
1396f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Output:
1406f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - encoded           : the encoded data vector
1416f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
1426f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value:
1436f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                            : >0 - Length (in bytes) of coded data
1446f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                            :  0 - The buffer didn't reach the chosen
1456f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                               frame-size so it keeps buffering speech
1466f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                               samples.
1476f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                            : -1 - Error
1486f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
1496f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
1506f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_Encode(
1516f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct*        ISAC_main_inst,
1526f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      const WebRtc_Word16* speechIn,
1536f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16*       encoded);
1546f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
1556f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
1566f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
1576f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_DecoderInit(...)
1586f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
1596f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function initializes an ISAC instance prior to the decoder calls.
1606f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
1616f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
1626f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : ISAC instance.
1636f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
1646f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value
1656f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                            : 0 - Ok
1666f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                             -1 - Error
1676f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
1686f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
1696f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_DecoderInit(
1706f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct* ISAC_main_inst);
1716f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
1726f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
1736f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
1746f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_UpdateBwEstimate(...)
1756f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
1766f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function updates the estimate of the bandwidth.
1776f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
1786f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
1796f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : ISAC instance.
1806f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - encoded           : encoded ISAC frame(s).
1816f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - packet_size       : size of the packet.
1826f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - rtp_seq_number    : the RTP number of the packet.
1836f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - send_ts           : the RTP send timestamp, given in samples
1846f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - arr_ts            : the arrival time of the packet (from NetEq)
1856f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              in samples.
1866f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
1876f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : 0 - Ok
1886f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                             -1 - Error
1896f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
1906f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
1916f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_UpdateBwEstimate(
1926f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct*         ISAC_main_inst,
1936f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      const WebRtc_UWord16* encoded,
1946f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word32         packet_size,
1956f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_UWord16        rtp_seq_number,
1966f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_UWord32        send_ts,
1976f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_UWord32        arr_ts);
1986f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
1996f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
2006f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
2016f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_Decode(...)
2026f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
2036f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function decodes an ISAC frame. At 16 kHz sampling rate, the length
2046f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * of the output audio could be either 480 or 960 samples, equivalent to
2056f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * 30 or 60 ms respectively. At 32 kHz sampling rate, the length of the
2066f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * output audio is 960 samples, which is 30 ms.
2076f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
2086f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
2096f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : ISAC instance.
2106f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - encoded           : encoded ISAC frame(s).
2116f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - len               : bytes in encoded vector.
2126f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
2136f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Output:
2146f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - decoded           : The decoded vector.
2156f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
2166f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : >0 - number of samples in decoded vector.
2176f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              -1 - Error.
2186f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
2196f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
2206f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_Decode(
2216f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct*           ISAC_main_inst,
2226f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      const WebRtc_UWord16* encoded,
2236f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16         len,
2246f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16*        decoded,
2256f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16*        speechType);
2266f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
2276f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
2286f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
2296f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_DecodePlc(...)
2306f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
2316f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function conducts PLC for ISAC frame(s). Output speech length
2326f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * will be a multiple of frames, i.e. multiples of 30 ms audio. Therefore,
2336f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * the output is multiple of 480 samples if operating at 16 kHz and multiple
2346f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * of 960 if operating at 32 kHz.
2356f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
2366f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
2376f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : ISAC instance.
2386f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - noOfLostFrames    : Number of PLC frames to produce.
2396f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
2406f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Output:
2416f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - decoded           : The decoded vector.
2426f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
2436f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : >0 - number of samples in decoded PLC vector
2446f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              -1 - Error
2456f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
2466f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
2476f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_DecodePlc(
2486f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct*  ISAC_main_inst,
2496f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16* decoded,
2506f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16  noOfLostFrames);
2516f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
2526f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
2536f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
2546f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_Control(...)
2556f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
2566f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function sets the limit on the short-term average bit-rate and the
2576f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * frame length. Should be used only in Instantaneous mode. At 16 kHz sampling
2586f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * rate, an average bit-rate between 10000 to 32000 bps is valid and a
2596f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * frame-size of 30 or 60 ms is acceptable. At 32 kHz, an average bit-rate
2606f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * between 10000 to 56000 is acceptable, and the valid frame-size is 30 ms.
2616f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
2626f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
2636f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : ISAC instance.
2646f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - rate              : limit on the short-term average bit rate,
2656f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              in bits/second.
2666f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - framesize         : frame-size in millisecond.
2676f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
2686f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : 0  - ok
2696f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                             -1 - Error
2706f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
2716f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
2726f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_Control(
2736f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct*   ISAC_main_inst,
2746f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word32 rate,
2756f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16 framesize);
2766f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
2776f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
2786f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
2796f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_ControlBwe(...)
2806f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
2816f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function sets the initial values of bottleneck and frame-size if
2826f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * iSAC is used in channel-adaptive mode. Therefore, this API is not
2836f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * applicable if the codec is created to operate in super-wideband mode.
2846f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
2856f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Through this API, users can enforce a frame-size for all values of
2866f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * bottleneck. Then iSAC will not automatically change the frame-size.
2876f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
2886f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
2896f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
2906f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : ISAC instance.
2916f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - rateBPS           : initial value of bottleneck in bits/second
2926f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              10000 <= rateBPS <= 56000 is accepted
2936f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              For default bottleneck set rateBPS = 0
2946f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - frameSizeMs       : number of milliseconds per frame (30 or 60)
2956f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - enforceFrameSize  : 1 to enforce the given frame-size through
2966f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              out the adaptation process, 0 to let iSAC
2976f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              change the frame-size if required.
2986f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
2996f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : 0  - ok
3006f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                             -1 - Error
3016f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
3026f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
3036f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_ControlBwe(
3046f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct* ISAC_main_inst,
3056f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word32 rateBPS,
3066f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16 frameSizeMs,
3076f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16 enforceFrameSize);
3086f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
3096f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
3106f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
3116f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_ReadFrameLen(...)
3126f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
3136f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function returns the length of the frame represented in the packet.
3146f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
3156f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
3166f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - encoded           : Encoded bit-stream
3176f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
3186f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Output:
3196f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - frameLength       : Length of frame in packet (in samples)
3206f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
3216f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
3226f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
3236f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_ReadFrameLen(
3246f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct*          ISAC_main_inst,
3256f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      const WebRtc_Word16* encoded,
3266f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16*       frameLength);
3276f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
3286f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
3296f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
3306f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_version(...)
3316f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
3326f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function returns the version number.
3336f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
3346f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Output:
3356f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - version      : Pointer to character string
3366f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
3376f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
3386f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
3396f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  void WebRtcIsac_version(
3406f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      char *version);
3416f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
3426f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
3436f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
3446f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_GetErrorCode(...)
3456f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
3466f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function can be used to check the error code of an iSAC instance. When
3476f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * a function returns -1 a error code will be set for that instance. The
3486f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * function below extract the code of the last error that occurred in the
3496f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * specified instance.
3506f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
3516f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
3526f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : ISAC instance
3536f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
3546f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : Error code
3556f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
3566f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
3576f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_GetErrorCode(
3586f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct* ISAC_main_inst);
3596f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
3606f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
3616f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /****************************************************************************
3626f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_GetUplinkBw(...)
3636f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
3646f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function outputs the target bottleneck of the codec. In
3656f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * channel-adaptive mode, the target bottleneck is specified through in-band
3666f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * signalling retreived by bandwidth estimator.
3676f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * In channel-independent, also called instantaneous mode, the target
3686f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * bottleneck is provided to the encoder by calling xxx_control(...). If
3696f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * xxx_control is never called the default values is returned. The default
3706f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * value for bottleneck at 16 kHz encoder sampling rate is 32000 bits/sec,
3716f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * and it is 56000 bits/sec for 32 kHz sampling rate.
3726f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Note that the output is the iSAC internal operating bottleneck which might
3736f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * differ slightly from the one provided through xxx_control().
3746f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
3756f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
3766f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : iSAC instance
3776f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
3786f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Output:
3796f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - *bottleneck       : bottleneck in bits/sec
3806f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
3816f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : -1 if error happens
3826f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                               0 bit-rates computed correctly.
3836f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
3846f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
3856f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_GetUplinkBw(
3866f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct*    ISAC_main_inst,
3876f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word32* bottleneck);
3886f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
3896f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
3906f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
3916f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_SetMaxPayloadSize(...)
3926f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
3936f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function sets a limit for the maximum payload size of iSAC. The same
3946f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * value is used both for 30 and 60 ms packets. If the encoder sampling rate
3956f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * is 16 kHz the maximum payload size is between 120 and 400 bytes. If the
3966f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * encoder sampling rate is 32 kHz the maximum payload size is between 120
3976f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * and 600 bytes.
3986f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
3996f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * If an out of range limit is used, the function returns -1, but the closest
4006f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * valid value will be applied.
4016f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
4026f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * ---------------
4036f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * IMPORTANT NOTES
4046f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * ---------------
4056f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * The size of a packet is limited to the minimum of 'max-payload-size' and
4066f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * 'max-rate.' For instance, let's assume the max-payload-size is set to
4076f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * 170 bytes, and max-rate is set to 40 kbps. Note that a limit of 40 kbps
4086f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * translates to 150 bytes for 30ms frame-size & 300 bytes for 60ms
4096f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * frame-size. Then a packet with a frame-size of 30 ms is limited to 150,
4106f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * i.e. min(170, 150), and a packet with 60 ms frame-size is limited to
4116f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * 170 bytes, i.e. min(170, 300).
4126f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
4136f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
4146f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : iSAC instance
4156f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - maxPayloadBytes   : maximum size of the payload in bytes
4166f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              valid values are between 120 and 400 bytes
4176f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              if encoder sampling rate is 16 kHz. For
4186f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              32 kHz encoder sampling rate valid values
4196f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              are between 120 and 600 bytes.
4206f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
4216f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : 0 if successful
4226f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                             -1 if error happens
4236f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
4246f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
4256f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_SetMaxPayloadSize(
4266f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct* ISAC_main_inst,
4276f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16 maxPayloadBytes);
4286f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
4296f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
4306f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
4316f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_SetMaxRate(...)
4326f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
4336f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function sets the maximum rate which the codec may not exceed for
4346f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * any signal packet. The maximum rate is defined and payload-size per
4356f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * frame-size in bits per second.
4366f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
4376f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * The codec has a maximum rate of 53400 bits per second (200 bytes per 30
4386f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * ms) if the encoder sampling rate is 16kHz, and 160 kbps (600 bytes/30 ms)
4396f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * if the encoder sampling rate is 32 kHz.
4406f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
4416f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * It is possible to set a maximum rate between 32000 and 53400 bits/sec
4426f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * in wideband mode, and 32000 to 160000 bits/sec in super-wideband mode.
4436f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
4446f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * If an out of range limit is used, the function returns -1, but the closest
4456f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * valid value will be applied.
4466f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
4476f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * ---------------
4486f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * IMPORTANT NOTES
4496f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * ---------------
4506f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * The size of a packet is limited to the minimum of 'max-payload-size' and
4516f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * 'max-rate.' For instance, let's assume the max-payload-size is set to
4526f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * 170 bytes, and max-rate is set to 40 kbps. Note that a limit of 40 kbps
4536f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * translates to 150 bytes for 30ms frame-size & 300 bytes for 60ms
4546f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * frame-size. Then a packet with a frame-size of 30 ms is limited to 150,
4556f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * i.e. min(170, 150), and a packet with 60 ms frame-size is limited to
4566f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * 170 bytes, min(170, 300).
4576f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
4586f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
4596f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : iSAC instance
4606f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - maxRate           : maximum rate in bits per second,
4616f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              valid values are 32000 to 53400 bits/sec in
4626f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              wideband mode, and 32000 to 160000 bits/sec in
4636f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              super-wideband mode.
4646f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
4656f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : 0 if successful
4666f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                             -1 if error happens
4676f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
4686f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
4696f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_SetMaxRate(
4706f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct* ISAC_main_inst,
4716f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word32 maxRate);
4726f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
4736f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
4746f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
4756f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_DecSampRate()
4766f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return the sampling rate of the decoded audio.
4776f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
4786f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
4796f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : iSAC instance
4806f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
4816f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : enumerator representing sampling frequency
4826f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              associated with the decoder, i.e. the
4836f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              sampling rate of the decoded audio.
4846f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
4856f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
4866f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
4876f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  enum IsacSamplingRate WebRtcIsac_DecSampRate(
4886f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct*                ISAC_main_inst);
4896f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
4906f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
4916f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
4926f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_EncSampRate()
4936f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
4946f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
4956f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : iSAC instance
4966f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
4976f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : enumerator representing sampling frequency
4986f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              associated with the encoder, the input audio
4996f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              is expected to be sampled at this rate.
5006f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
5016f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
5026f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
5036f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  enum IsacSamplingRate WebRtcIsac_EncSampRate(
5046f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct*                ISAC_main_inst);
5056f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
5066f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
5076f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
5086f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_SetDecSampRate()
5096f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Set the sampling rate of the decoder.  Initialization of the decoder WILL
5106f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * NOT overwrite the sampling rate of the encoder. The default value is 16 kHz
5116f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * which is set when the instance is created.
5126f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
5136f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
5146f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : iSAC instance
5156f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - sampRate          : enumerator specifying the sampling rate.
5166f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
5176f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : 0 if successful
5186f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                             -1 if failed.
5196f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
5206f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
5216f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_SetDecSampRate(
5226f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct*           ISAC_main_inst,
5236f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      enum IsacSamplingRate sampRate);
5246f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
5256f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
5266f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
5276f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_SetEncSampRate()
5286f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Set the sampling rate of the encoder. Initialization of the encoder WILL
5296f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * NOT overwrite the sampling rate of the encoder. The default value is 16 kHz
5306f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * which is set when the instance is created. The encoding-mode and the
5316f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * bottleneck remain unchanged by this call, however, the maximum rate and
5326f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * maximum payload-size will reset to their default value.
5336f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
5346f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
5356f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : iSAC instance
5366f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - sampRate          : enumerator specifying the sampling rate.
5376f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
5386f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : 0 if successful
5396f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                             -1 if failed.
5406f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
5416f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
5426f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_SetEncSampRate(
5436f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct*           ISAC_main_inst,
5446f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      enum IsacSamplingRate sampRate);
5456f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
5466f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
5476f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
5486f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /******************************************************************************
5496f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_GetNewBitStream(...)
5506f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
5516f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function returns encoded data, with the recieved bwe-index in the
5526f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * stream. If the rate is set to a value less than bottleneck of codec
5536f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * the new bistream will be re-encoded with the given target rate.
5546f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * It should always return a complete packet, i.e. only called once
5556f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * even for 60 msec frames.
5566f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
5576f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * NOTE 1! This function does not write in the ISACStruct, it is not allowed.
5586f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * NOTE 2! Currently not implemented for SWB mode.
5596f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * NOTE 3! Rates larger than the bottleneck of the codec will be limited
5606f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *         to the current bottleneck.
5616f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
5626f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
5636f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : ISAC instance.
5646f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - bweIndex          : Index of bandwidth estimate to put in new
5656f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              bitstream
5666f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - rate              : target rate of the transcoder is bits/sec.
5676f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              Valid values are the accepted rate in iSAC,
5686f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              i.e. 10000 to 56000.
5696f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - isRCU                       : if the new bit-stream is an RCU stream.
5706f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              Note that the rate parameter always indicates
5716f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              the target rate of the main paylaod, regardless
5726f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              of 'isRCU' value.
5736f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
5746f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Output:
5756f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - encoded           : The encoded data vector
5766f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
5776f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value               : >0 - Length (in bytes) of coded data
5786f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              -1 - Error  or called in SWB mode
5796f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                                 NOTE! No error code is written to
5806f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                                 the struct since it is only allowed to read
5816f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                                 the struct.
5826f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
5836f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_GetNewBitStream(
5846f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct*    ISAC_main_inst,
5856f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16  bweIndex,
5866f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16  jitterInfo,
5876f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word32  rate,
5886f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16* encoded,
5896f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16  isRCU);
5906f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
5916f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
5926f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
5936f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /****************************************************************************
5946f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_GetDownLinkBwIndex(...)
5956f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
5966f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function returns index representing the Bandwidth estimate from
5976f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * other side to this side.
5986f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
5996f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
6006f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : iSAC struct
6016f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6026f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Output:
6036f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - bweIndex          : Bandwidth estimate to transmit to other side.
6046f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6056f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
6066f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
6076f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_GetDownLinkBwIndex(
6086f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct*  ISAC_main_inst,
6096f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16* bweIndex,
6106f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16* jitterInfo);
6116f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
6126f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
6136f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /****************************************************************************
6146f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_UpdateUplinkBw(...)
6156f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6166f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function takes an index representing the Bandwidth estimate from
6176f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * this side to other side and updates BWE.
6186f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6196f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
6206f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst    : iSAC struct
6216f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - bweIndex          : Bandwidth estimate from other side.
6226f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6236f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
6246f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
6256f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_UpdateUplinkBw(
6266f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct* ISAC_main_inst,
6276f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16 bweIndex);
6286f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
6296f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
6306f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /****************************************************************************
6316f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_ReadBwIndex(...)
6326f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6336f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function returns the index of the Bandwidth estimate from the bitstream.
6346f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6356f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
6366f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - encoded           : Encoded bitstream
6376f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6386f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Output:
6396f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - frameLength       : Length of frame in packet (in samples)
6406f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - bweIndex         : Bandwidth estimate in bitstream
6416f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6426f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
6436f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
6446f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_ReadBwIndex(
6456f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      const WebRtc_Word16* encoded,
6466f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16*       bweIndex);
6476f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
6486f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
6496f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
6506f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /*******************************************************************************
6516f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_GetNewFrameLen(...)
6526f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6536f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * returns the frame lenght (in samples) of the next packet. In the case of channel-adaptive
6546f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * mode, iSAC decides on its frame lenght based on the estimated bottleneck
6556f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * this allows a user to prepare for the next packet (at the encoder)
6566f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6576f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * The primary usage is in CE to make the iSAC works in channel-adaptive mode
6586f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6596f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
6606f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - ISAC_main_inst     : iSAC struct
6616f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6626f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return Value                : frame lenght in samples
6636f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6646f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
6656f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
6666f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_GetNewFrameLen(
6676f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct* ISAC_main_inst);
6686f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
6696f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
6706f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /****************************************************************************
6716f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *  WebRtcIsac_GetRedPayload(...)
6726f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6736f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *  Populates "encoded" with the redundant payload of the recently encoded
6746f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *  frame. This function has to be called once that WebRtcIsac_Encode(...)
6756f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *  returns a positive value. Regardless of the frame-size this function will
6766f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *  be called only once after encoding is completed.
6776f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6786f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
6796f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *      - ISAC_main_inst    : iSAC struct
6806f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6816f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Output:
6826f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *        - encoded            : the encoded data vector
6836f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6846f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6856f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value:
6866f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              : >0 - Length (in bytes) of coded data
6876f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                              : -1 - Error
6886f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6896f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6906f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
6916f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_GetRedPayload(
6926f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct*    ISAC_main_inst,
6936f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16* encoded);
6946f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
6956f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
6966f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  /****************************************************************************
6976f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * WebRtcIsac_DecodeRcu(...)
6986f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
6996f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * This function decodes a redundant (RCU) iSAC frame. Function is called in
7006f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * NetEq with a stored RCU payload i case of packet loss. Output speech length
7016f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * will be a multiple of 480 samples: 480 or 960 samples,
7026f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * depending on the framesize (30 or 60 ms).
7036f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
7046f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Input:
7056f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *      - ISAC_main_inst     : ISAC instance.
7066f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *      - encoded            : encoded ISAC RCU frame(s)
7076f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *      - len                : bytes in encoded vector
7086f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
7096f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Output:
7106f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *      - decoded            : The decoded vector
7116f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *
7126f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   * Return value              : >0 - number of samples in decoded vector
7136f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   *                             -1 - Error
7146f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin   */
7156f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin  WebRtc_Word16 WebRtcIsac_DecodeRcu(
7166f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      ISACStruct*           ISAC_main_inst,
7176f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      const WebRtc_UWord16* encoded,
7186f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16         len,
7196f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16*        decoded,
7206f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin      WebRtc_Word16*        speechType);
7216f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
7226f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
7236f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin#if defined(__cplusplus)
7246f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin}
7256f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin#endif
7266f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
7276f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
7286f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin
7296f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin#endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_INTERFACE_ISAC_H_ */
730