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