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