16f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin/* 26f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin * Copyright (c) 2012 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/* 126f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin * structs.h 136f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin * 146f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin * This header file contains all the structs used in the ISAC codec 156f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin * 166f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin */ 176f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 186f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_STRUCTS_H_ 196f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_STRUCTS_H_ 206f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 216f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 226f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin#include "typedefs.h" 236f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin#include "settings.h" 246f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin#include "isac.h" 256f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 266f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct Bitstreamstruct { 276f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 286f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_UWord8 stream[STREAM_SIZE_MAX]; 296f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_UWord32 W_upper; 306f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_UWord32 streamval; 316f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_UWord32 stream_index; 326f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 336f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} Bitstr; 346f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 356f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 366f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 376f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double DataBufferLo[WINLEN]; 386f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double DataBufferHi[WINLEN]; 396f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 406f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double CorrBufLo[ORDERLO+1]; 416f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double CorrBufHi[ORDERHI+1]; 426f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 436f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float PreStateLoF[ORDERLO+1]; 446f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float PreStateLoG[ORDERLO+1]; 456f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float PreStateHiF[ORDERHI+1]; 466f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float PreStateHiG[ORDERHI+1]; 476f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float PostStateLoF[ORDERLO+1]; 486f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float PostStateLoG[ORDERLO+1]; 496f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float PostStateHiF[ORDERHI+1]; 506f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float PostStateHiG[ORDERHI+1]; 516f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 526f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double OldEnergy; 536f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 546f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} MaskFiltstr; 556f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 566f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 576f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 586f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 596f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin //state vectors for each of the two analysis filters 606f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double INSTAT1[2*(QORDER-1)]; 616f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double INSTAT2[2*(QORDER-1)]; 626f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double INSTATLA1[2*(QORDER-1)]; 636f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double INSTATLA2[2*(QORDER-1)]; 646f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double INLABUF1[QLOOKAHEAD]; 656f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double INLABUF2[QLOOKAHEAD]; 666f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 676f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float INSTAT1_float[2*(QORDER-1)]; 686f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float INSTAT2_float[2*(QORDER-1)]; 696f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float INSTATLA1_float[2*(QORDER-1)]; 706f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float INSTATLA2_float[2*(QORDER-1)]; 716f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float INLABUF1_float[QLOOKAHEAD]; 726f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float INLABUF2_float[QLOOKAHEAD]; 736f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 746f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* High pass filter */ 756f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double HPstates[HPORDER]; 766f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float HPstates_float[HPORDER]; 776f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 786f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} PreFiltBankstr; 796f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 806f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 816f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 826f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 836f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin //state vectors for each of the two analysis filters 846f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double STATE_0_LOWER[2*POSTQORDER]; 856f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double STATE_0_UPPER[2*POSTQORDER]; 866f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 876f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* High pass filter */ 886f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double HPstates1[HPORDER]; 896f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double HPstates2[HPORDER]; 906f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 916f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float STATE_0_LOWER_float[2*POSTQORDER]; 926f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float STATE_0_UPPER_float[2*POSTQORDER]; 936f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 946f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float HPstates1_float[HPORDER]; 956f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float HPstates2_float[HPORDER]; 966f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 976f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} PostFiltBankstr; 986f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 996f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 1006f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1016f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin //data buffer for pitch filter 1026f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double ubuf[PITCH_BUFFSIZE]; 1036f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1046f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin //low pass state vector 1056f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double ystate[PITCH_DAMPORDER]; 1066f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1076f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin //old lag and gain 1086f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double oldlagp[1]; 1096f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double oldgainp[1]; 1106f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1116f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} PitchFiltstr; 1126f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1136f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 1146f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1156f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin //data buffer 1166f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double buffer[PITCH_WLPCBUFLEN]; 1176f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1186f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin //state vectors 1196f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double istate[PITCH_WLPCORDER]; 1206f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double weostate[PITCH_WLPCORDER]; 1216f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double whostate[PITCH_WLPCORDER]; 1226f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1236f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin //LPC window -> should be a global array because constant 1246f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double window[PITCH_WLPCWINLEN]; 1256f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1266f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} WeightFiltstr; 1276f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1286f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 1296f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1306f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin //for inital estimator 1316f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double dec_buffer[PITCH_CORR_LEN2 + PITCH_CORR_STEP2 + 1326f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin PITCH_MAX_LAG/2 - PITCH_FRAME_LEN/2+2]; 1336f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double decimator_state[2*ALLPASSSECTIONS+1]; 1346f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double hp_state[2]; 1356f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1366f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double whitened_buf[QLOOKAHEAD]; 1376f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1386f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double inbuf[QLOOKAHEAD]; 1396f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1406f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin PitchFiltstr PFstr_wght; 1416f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin PitchFiltstr PFstr; 1426f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WeightFiltstr Wghtstr; 1436f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1446f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} PitchAnalysisStruct; 1456f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1466f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1476f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1486f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin/* Have instance of struct together with other iSAC structs */ 1496f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 1506f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1516f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Previous frame length (in ms) */ 1526f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word32 prev_frame_length; 1536f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1546f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Previous RTP timestamp from received 1556f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin packet (in samples relative beginning) */ 1566f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word32 prev_rec_rtp_number; 1576f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1586f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Send timestamp for previous packet (in ms using timeGetTime()) */ 1596f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_UWord32 prev_rec_send_ts; 1606f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1616f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Arrival time for previous packet (in ms using timeGetTime()) */ 1626f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_UWord32 prev_rec_arr_ts; 1636f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1646f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* rate of previous packet, derived from RTP timestamps (in bits/s) */ 1656f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float prev_rec_rtp_rate; 1666f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1676f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Time sinse the last update of the BN estimate (in ms) */ 1686f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_UWord32 last_update_ts; 1696f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1706f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Time sinse the last reduction (in ms) */ 1716f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_UWord32 last_reduction_ts; 1726f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1736f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* How many times the estimate was update in the beginning */ 1746f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word32 count_tot_updates_rec; 1756f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1766f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* The estimated bottle neck rate from there to here (in bits/s) */ 1776f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word32 rec_bw; 1786f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float rec_bw_inv; 1796f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float rec_bw_avg; 1806f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float rec_bw_avg_Q; 1816f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1826f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* The estimated mean absolute jitter value, 1836f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin as seen on this side (in ms) */ 1846f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float rec_jitter; 1856f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float rec_jitter_short_term; 1866f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float rec_jitter_short_term_abs; 1876f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float rec_max_delay; 1886f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float rec_max_delay_avg_Q; 1896f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1906f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* (assumed) bitrate for headers (bps) */ 1916f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float rec_header_rate; 1926f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1936f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* The estimated bottle neck rate from here to there (in bits/s) */ 1946f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float send_bw_avg; 1956f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 1966f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* The estimated mean absolute jitter value, as seen on 1976f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin the other siee (in ms) */ 1986f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float send_max_delay_avg; 1996f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2006f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin // number of packets received since last update 2016f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int num_pkts_rec; 2026f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2036f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int num_consec_rec_pkts_over_30k; 2046f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2056f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin // flag for marking that a high speed network has been 2066f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin // detected downstream 2076f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int hsn_detect_rec; 2086f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2096f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int num_consec_snt_pkts_over_30k; 2106f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2116f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin // flag for marking that a high speed network has 2126f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin // been detected upstream 2136f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int hsn_detect_snd; 2146f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2156f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_UWord32 start_wait_period; 2166f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2176f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int in_wait_period; 2186f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2196f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int change_to_WB; 2206f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2216f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_UWord32 senderTimestamp; 2226f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_UWord32 receiverTimestamp; 2236f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin //enum IsacSamplingRate incomingStreamSampFreq; 2246f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_UWord16 numConsecLatePkts; 2256f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float consecLatency; 2266f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 inWaitLatePkts; 2276f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} BwEstimatorstr; 2286f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2296f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2306f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 2316f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2326f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* boolean, flags if previous packet exceeded B.N. */ 2336f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int PrevExceed; 2346f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* ms */ 2356f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int ExceedAgo; 2366f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* packets left to send in current burst */ 2376f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int BurstCounter; 2386f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* packets */ 2396f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int InitCounter; 2406f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* ms remaining in buffer when next packet will be sent */ 2416f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double StillBuffered; 2426f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2436f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} RateModel; 2446f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2456f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2466f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 2476f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2486f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin unsigned int SpaceAlloced; 2496f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin unsigned int MaxPermAlloced; 2506f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double Tmp0[MAXFFTSIZE]; 2516f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double Tmp1[MAXFFTSIZE]; 2526f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double Tmp2[MAXFFTSIZE]; 2536f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double Tmp3[MAXFFTSIZE]; 2546f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int Perm[MAXFFTSIZE]; 2556f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int factor [NFACTOR]; 2566f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2576f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} FFTstr; 2586f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2596f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2606f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin/* The following strutc is used to store data from encoding, to make it 2616f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin fast and easy to construct a new bitstream with a different Bandwidth 2626f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin estimate. All values (except framelength and minBytes) is double size to 2636f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin handle 60 ms of data. 2646f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin*/ 2656f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 2666f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2676f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Used to keep track of if it is first or second part of 60 msec packet */ 2686f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int startIdx; 2696f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2706f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Frame length in samples */ 2716f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 framelength; 2726f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2736f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Pitch Gain */ 2746f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int pitchGain_index[2]; 2756f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2766f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Pitch Lag */ 2776f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double meanGain[2]; 2786f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int pitchIndex[PITCH_SUBFRAMES*2]; 2796f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2806f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* LPC */ 2816f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int LPCindex_s[108*2]; /* KLT_ORDER_SHAPE = 108 */ 2826f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int LPCindex_g[12*2]; /* KLT_ORDER_GAIN = 12 */ 2836f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double LPCcoeffs_lo[(ORDERLO+1)*SUBFRAMES*2]; 2846f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double LPCcoeffs_hi[(ORDERHI+1)*SUBFRAMES*2]; 2856f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2866f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Encode Spec */ 2876f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 fre[FRAMESAMPLES]; 2886f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 fim[FRAMESAMPLES]; 2896f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 AvgPitchGain[2]; 2906f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2916f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Used in adaptive mode only */ 2926f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int minBytes; 2936f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2946f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} ISAC_SaveEncData_t; 2956f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2966f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2976f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 2986f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 2996f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int indexLPCShape[UB_LPC_ORDER * UB16_LPC_VEC_PER_FRAME]; 3006f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double lpcGain[SUBFRAMES<<1]; 3016f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int lpcGainIndex[SUBFRAMES<<1]; 3026f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3036f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin Bitstr bitStreamObj; 3046f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3056f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 realFFT[FRAMESAMPLES_HALF]; 3066f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 imagFFT[FRAMESAMPLES_HALF]; 3076f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} ISACUBSaveEncDataStruct; 3086f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3096f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3106f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3116f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 3126f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3136f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin Bitstr bitstr_obj; 3146f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin MaskFiltstr maskfiltstr_obj; 3156f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin PreFiltBankstr prefiltbankstr_obj; 3166f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin PitchFiltstr pitchfiltstr_obj; 3176f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin PitchAnalysisStruct pitchanalysisstr_obj; 3186f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin FFTstr fftstr_obj; 3196f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin ISAC_SaveEncData_t SaveEnc_obj; 3206f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3216f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int buffer_index; 3226f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 current_framesamples; 3236f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3246f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float data_buffer_float[FRAMESAMPLES_30ms]; 3256f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3266f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int frame_nb; 3276f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double bottleneck; 3286f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 new_framelength; 3296f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double s2nr; 3306f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3316f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Maximum allowed number of bits for a 30 msec packet */ 3326f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 payloadLimitBytes30; 3336f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Maximum allowed number of bits for a 30 msec packet */ 3346f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 payloadLimitBytes60; 3356f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Maximum allowed number of bits for both 30 and 60 msec packet */ 3366f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 maxPayloadBytes; 3376f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Maximum allowed rate in bytes per 30 msec packet */ 3386f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 maxRateInBytes; 3396f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3406f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /*--- 3416f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin If set to 1 iSAC will not addapt the frame-size, if used in 3426f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin channel-adaptive mode. The initial value will be used for all rates. 3436f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin ---*/ 3446f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 enforceFrameSize; 3456f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3466f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /*----- 3476f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin This records the BWE index the encoder injected into the bit-stream. 3486f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin It will be used in RCU. The same BWE index of main paylaod will be in 3496f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin the redundant payload. We can not retrive it from BWE because it is 3506f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin a recursive procedure (WebRtcIsac_GetDownlinkBwJitIndexImpl) and has to be 3516f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin called only once per each encode. 3526f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin -----*/ 3536f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 lastBWIdx; 3546f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} ISACLBEncStruct; 3556f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3566f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 3576f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3586f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin Bitstr bitstr_obj; 3596f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin MaskFiltstr maskfiltstr_obj; 3606f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin PreFiltBankstr prefiltbankstr_obj; 3616f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin FFTstr fftstr_obj; 3626f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin ISACUBSaveEncDataStruct SaveEnc_obj; 3636f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3646f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin int buffer_index; 3656f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin float data_buffer_float[MAX_FRAMESAMPLES + 3666f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin LB_TOTAL_DELAY_SAMPLES]; 3676f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double bottleneck; 3686f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Maximum allowed number of bits for a 30 msec packet */ 3696f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin //WebRtc_Word16 payloadLimitBytes30; 3706f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Maximum allowed number of bits for both 30 and 60 msec packet */ 3716f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin //WebRtc_Word16 maxPayloadBytes; 3726f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 maxPayloadSizeBytes; 3736f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3746f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double lastLPCVec[UB_LPC_ORDER]; 3756f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 numBytesUsed; 3766f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 lastJitterInfo; 3776f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} ISACUBEncStruct; 3786f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3796f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3806f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3816f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 3826f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3836f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin Bitstr bitstr_obj; 3846f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin MaskFiltstr maskfiltstr_obj; 3856f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin PostFiltBankstr postfiltbankstr_obj; 3866f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin PitchFiltstr pitchfiltstr_obj; 3876f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin FFTstr fftstr_obj; 3886f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3896f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} ISACLBDecStruct; 3906f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3916f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 3926f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3936f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin Bitstr bitstr_obj; 3946f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin MaskFiltstr maskfiltstr_obj; 3956f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin PostFiltBankstr postfiltbankstr_obj; 3966f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin FFTstr fftstr_obj; 3976f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 3986f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} ISACUBDecStruct; 3996f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4006f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4016f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4026f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 4036f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4046f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin ISACLBEncStruct ISACencLB_obj; 4056f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin ISACLBDecStruct ISACdecLB_obj; 4066f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} ISACLBStruct; 4076f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4086f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4096f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 4106f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4116f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin ISACUBEncStruct ISACencUB_obj; 4126f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin ISACUBDecStruct ISACdecUB_obj; 4136f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} ISACUBStruct; 4146f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4156f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin/* 4166f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin This struct is used to take a snapshot of the entropy coder and LPC gains 4176f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin right before encoding LPC gains. This allows us to go back to that state 4186f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin if we like to limit the payload size. 4196f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin*/ 4206f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 4216f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* 6 lower-band & 6 upper-band */ 4226f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double loFiltGain[SUBFRAMES]; 4236f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double hiFiltGain[SUBFRAMES]; 4246f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Upper boundary of interval W */ 4256f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_UWord32 W_upper; 4266f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_UWord32 streamval; 4276f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* Index to the current position in bytestream */ 4286f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_UWord32 stream_index; 4296f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_UWord8 stream[3]; 4306f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} transcode_obj; 4316f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4326f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4336f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkintypedef struct { 4346f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin // lower-band codec instance 4356f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin ISACLBStruct instLB; 4366f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin // upper-band codec instance 4376f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin ISACUBStruct instUB; 4386f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4396f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin // Bandwidth Estimator and model for the rate. 4406f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin BwEstimatorstr bwestimator_obj; 4416f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin RateModel rate_data_obj; 4426f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin double MaxDelay; 4436f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4446f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin /* 0 = adaptive; 1 = instantaneous */ 4456f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 codingMode; 4466f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4476f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin // overall bottleneck of the codec 4486f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word32 bottleneck; 4496f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4506f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin // QMF Filter state 4516f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word32 analysisFBState1[FB_STATE_SIZE_WORD32]; 4526f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word32 analysisFBState2[FB_STATE_SIZE_WORD32]; 4536f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word32 synthesisFBState1[FB_STATE_SIZE_WORD32]; 4546f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word32 synthesisFBState2[FB_STATE_SIZE_WORD32]; 4556f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4566f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin // Error Code 4576f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 errorCode; 4586f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4596f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin // bandwidth of the encoded audio 8, 12 or 16 kHz 4606f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin enum ISACBandwidth bandwidthKHz; 4616f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin // Sampling rate of audio, encoder and decode, 8 or 16 kHz 4626f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin enum IsacSamplingRate encoderSamplingRateKHz; 4636f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin enum IsacSamplingRate decoderSamplingRateKHz; 4646f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin // Flag to keep track of initializations, lower & upper-band 4656f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin // encoder and decoder. 4666f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 initFlag; 4676f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4686f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin // Flag to to indicate signal bandwidth switch 4696f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 resetFlag_8kHz; 4706f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4716f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin // Maximum allowed rate, measured in Bytes per 30 ms. 4726f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 maxRateBytesPer30Ms; 4736f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin // Maximum allowed payload-size, measured in Bytes. 4746f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin WebRtc_Word16 maxPayloadSizeBytes; 4756f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin} ISACMainStruct; 4766f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin 4776f12fff925188ced26e518cd2252aff3e93bb04eAlexander Gutkin#endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_STRUCTS_H_ */ 478