1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Use of this source code is governed by a BSD-style license
5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  that can be found in the LICENSE file in the root of the source
6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  tree. An additional intellectual property rights grant can be found
7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  in the file PATENTS.  All contributing project authors may
8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * structs.h
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * This header file contains all the structs used in the ISAC codec
15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_STRUCTS_H_
19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_STRUCTS_H_
20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
21090249103f5427534d39a5993728fff2c3df0bddaluebs@webrtc.org#include "webrtc/modules/audio_coding/codecs/isac/main/interface/isac.h"
22090249103f5427534d39a5993728fff2c3df0bddaluebs@webrtc.org#include "webrtc/modules/audio_coding/codecs/isac/main/source/settings.h"
23090249103f5427534d39a5993728fff2c3df0bddaluebs@webrtc.org#include "webrtc/typedefs.h"
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct Bitstreamstruct {
26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
27fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  uint8_t   stream[STREAM_SIZE_MAX];
28fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  uint32_t  W_upper;
29fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  uint32_t  streamval;
30fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  uint32_t  stream_index;
31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} Bitstr;
33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    DataBufferLo[WINLEN];
37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    DataBufferHi[WINLEN];
38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    CorrBufLo[ORDERLO+1];
40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    CorrBufHi[ORDERHI+1];
41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    PreStateLoF[ORDERLO+1];
43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    PreStateLoG[ORDERLO+1];
44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    PreStateHiF[ORDERHI+1];
45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    PreStateHiG[ORDERHI+1];
46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    PostStateLoF[ORDERLO+1];
47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    PostStateLoG[ORDERLO+1];
48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    PostStateHiF[ORDERHI+1];
49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    PostStateHiG[ORDERHI+1];
50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    OldEnergy;
52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} MaskFiltstr;
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  //state vectors for each of the two analysis filters
59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    INSTAT1[2*(QORDER-1)];
60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    INSTAT2[2*(QORDER-1)];
61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    INSTATLA1[2*(QORDER-1)];
62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    INSTATLA2[2*(QORDER-1)];
63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    INLABUF1[QLOOKAHEAD];
64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    INLABUF2[QLOOKAHEAD];
65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    INSTAT1_float[2*(QORDER-1)];
67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    INSTAT2_float[2*(QORDER-1)];
68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    INSTATLA1_float[2*(QORDER-1)];
69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    INSTATLA2_float[2*(QORDER-1)];
70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    INLABUF1_float[QLOOKAHEAD];
71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    INLABUF2_float[QLOOKAHEAD];
72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* High pass filter */
74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    HPstates[HPORDER];
75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    HPstates_float[HPORDER];
76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} PreFiltBankstr;
78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  //state vectors for each of the two analysis filters
83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    STATE_0_LOWER[2*POSTQORDER];
84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    STATE_0_UPPER[2*POSTQORDER];
85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* High pass filter */
87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    HPstates1[HPORDER];
88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    HPstates2[HPORDER];
89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    STATE_0_LOWER_float[2*POSTQORDER];
91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    STATE_0_UPPER_float[2*POSTQORDER];
92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    HPstates1_float[HPORDER];
94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    HPstates2_float[HPORDER];
95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} PostFiltBankstr;
97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  //data buffer for pitch filter
101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    ubuf[PITCH_BUFFSIZE];
102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  //low pass state vector
104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    ystate[PITCH_DAMPORDER];
105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  //old lag and gain
107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    oldlagp[1];
108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    oldgainp[1];
109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} PitchFiltstr;
111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  //data buffer
115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    buffer[PITCH_WLPCBUFLEN];
116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  //state vectors
118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    istate[PITCH_WLPCORDER];
119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    weostate[PITCH_WLPCORDER];
120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    whostate[PITCH_WLPCORDER];
121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  //LPC window   -> should be a global array because constant
123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double    window[PITCH_WLPCWINLEN];
124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} WeightFiltstr;
126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  //for inital estimator
130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double         dec_buffer[PITCH_CORR_LEN2 + PITCH_CORR_STEP2 +
131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                            PITCH_MAX_LAG/2 - PITCH_FRAME_LEN/2+2];
132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double        decimator_state[2*ALLPASSSECTIONS+1];
133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double        hp_state[2];
134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double        whitened_buf[QLOOKAHEAD];
136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double        inbuf[QLOOKAHEAD];
138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  PitchFiltstr  PFstr_wght;
140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  PitchFiltstr  PFstr;
141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  WeightFiltstr Wghtstr;
142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} PitchAnalysisStruct;
144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* Have instance of struct together with other iSAC structs */
148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Previous frame length (in ms)                                    */
151fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int32_t    prev_frame_length;
152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Previous RTP timestamp from received
154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     packet (in samples relative beginning)                           */
155fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int32_t    prev_rec_rtp_number;
156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Send timestamp for previous packet (in ms using timeGetTime())   */
158fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  uint32_t    prev_rec_send_ts;
159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Arrival time for previous packet (in ms using timeGetTime())     */
161fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  uint32_t    prev_rec_arr_ts;
162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* rate of previous packet, derived from RTP timestamps (in bits/s) */
164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float   prev_rec_rtp_rate;
165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Time sinse the last update of the BN estimate (in ms)            */
167fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  uint32_t    last_update_ts;
168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Time sinse the last reduction (in ms)                            */
170fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  uint32_t    last_reduction_ts;
171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* How many times the estimate was update in the beginning          */
173fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int32_t    count_tot_updates_rec;
174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* The estimated bottle neck rate from there to here (in bits/s)    */
176fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int32_t  rec_bw;
177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float   rec_bw_inv;
178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float   rec_bw_avg;
179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float   rec_bw_avg_Q;
180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* The estimated mean absolute jitter value,
182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     as seen on this side (in ms)                                     */
183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float   rec_jitter;
184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float   rec_jitter_short_term;
185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float   rec_jitter_short_term_abs;
186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float   rec_max_delay;
187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float   rec_max_delay_avg_Q;
188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* (assumed) bitrate for headers (bps)                              */
190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float   rec_header_rate;
191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* The estimated bottle neck rate from here to there (in bits/s)    */
193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float    send_bw_avg;
194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* The estimated mean absolute jitter value, as seen on
196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     the other siee (in ms)                                           */
197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float   send_max_delay_avg;
198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // number of packets received since last update
200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int num_pkts_rec;
201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int num_consec_rec_pkts_over_30k;
203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // flag for marking that a high speed network has been
205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // detected downstream
206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int hsn_detect_rec;
207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int num_consec_snt_pkts_over_30k;
209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // flag for marking that a high speed network has
211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // been detected upstream
212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int hsn_detect_snd;
213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
214fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  uint32_t start_wait_period;
215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int in_wait_period;
217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int change_to_WB;
219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
220fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  uint32_t                 senderTimestamp;
221fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  uint32_t                 receiverTimestamp;
222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  //enum IsacSamplingRate incomingStreamSampFreq;
223fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  uint16_t                 numConsecLatePkts;
224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float                        consecLatency;
225fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t                  inWaitLatePkts;
226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} BwEstimatorstr;
227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* boolean, flags if previous packet exceeded B.N. */
232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int    PrevExceed;
233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* ms */
234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int    ExceedAgo;
235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* packets left to send in current burst */
236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int    BurstCounter;
237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* packets */
238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int    InitCounter;
239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* ms remaining in buffer when next packet will be sent */
240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double StillBuffered;
241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} RateModel;
243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  unsigned int SpaceAlloced;
248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  unsigned int MaxPermAlloced;
249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double Tmp0[MAXFFTSIZE];
250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double Tmp1[MAXFFTSIZE];
251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double Tmp2[MAXFFTSIZE];
252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double Tmp3[MAXFFTSIZE];
253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int Perm[MAXFFTSIZE];
254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int factor [NFACTOR];
255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} FFTstr;
257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* The following strutc is used to store data from encoding, to make it
260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org   fast and easy to construct a new bitstream with a different Bandwidth
261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org   estimate. All values (except framelength and minBytes) is double size to
262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org   handle 60 ms of data.
263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*/
264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
265b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Used to keep track of if it is first or second part of 60 msec packet */
267b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int         startIdx;
268b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Frame length in samples */
270fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t framelength;
271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Pitch Gain */
273b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int         pitchGain_index[2];
274b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
275b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Pitch Lag */
276b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double      meanGain[2];
277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int         pitchIndex[PITCH_SUBFRAMES*2];
278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* LPC */
280b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int         LPCindex_s[108*2]; /* KLT_ORDER_SHAPE = 108 */
281b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int         LPCindex_g[12*2];  /* KLT_ORDER_GAIN = 12 */
282b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double      LPCcoeffs_lo[(ORDERLO+1)*SUBFRAMES*2];
283b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double      LPCcoeffs_hi[(ORDERHI+1)*SUBFRAMES*2];
284b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
285b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Encode Spec */
286fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t fre[FRAMESAMPLES];
287fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t fim[FRAMESAMPLES];
288fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t AvgPitchGain[2];
289b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
290b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Used in adaptive mode only */
291b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int         minBytes;
292b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
293b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} ISAC_SaveEncData_t;
294b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
295b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
296b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
297b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
298b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int         indexLPCShape[UB_LPC_ORDER * UB16_LPC_VEC_PER_FRAME];
299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double      lpcGain[SUBFRAMES<<1];
300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int         lpcGainIndex[SUBFRAMES<<1];
301b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  Bitstr      bitStreamObj;
303b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
304fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t realFFT[FRAMESAMPLES_HALF];
305fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t imagFFT[FRAMESAMPLES_HALF];
306b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} ISACUBSaveEncDataStruct;
307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
309b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
310b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
311b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  Bitstr              bitstr_obj;
313b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  MaskFiltstr         maskfiltstr_obj;
314b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  PreFiltBankstr      prefiltbankstr_obj;
315b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  PitchFiltstr        pitchfiltstr_obj;
316b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  PitchAnalysisStruct pitchanalysisstr_obj;
317b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  FFTstr              fftstr_obj;
318b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  ISAC_SaveEncData_t  SaveEnc_obj;
319b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
320b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int                 buffer_index;
321fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t         current_framesamples;
322b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
323b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float               data_buffer_float[FRAMESAMPLES_30ms];
324b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
325b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int                 frame_nb;
326b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double              bottleneck;
327fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t         new_framelength;
328b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double              s2nr;
329b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
330b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Maximum allowed number of bits for a 30 msec packet */
331fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t         payloadLimitBytes30;
332b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Maximum allowed number of bits for a 30 msec packet */
333fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t         payloadLimitBytes60;
334b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Maximum allowed number of bits for both 30 and 60 msec packet */
335fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t         maxPayloadBytes;
336b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Maximum allowed rate in bytes per 30 msec packet */
337fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t         maxRateInBytes;
338b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
339b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /*---
340b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    If set to 1 iSAC will not addapt the frame-size, if used in
341b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    channel-adaptive mode. The initial value will be used for all rates.
342b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ---*/
343fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t         enforceFrameSize;
344b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
345b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /*-----
346b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    This records the BWE index the encoder injected into the bit-stream.
347754768092b59110bff7aeb4dda7a938a0796a22bhenrike@webrtc.org    It will be used in RCU. The same BWE index of main payload will be in
348b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    the redundant payload. We can not retrive it from BWE because it is
349b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    a recursive procedure (WebRtcIsac_GetDownlinkBwJitIndexImpl) and has to be
350b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    called only once per each encode.
351b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    -----*/
352fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t         lastBWIdx;
353b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} ISACLBEncStruct;
354b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
355b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
356b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
357b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  Bitstr                  bitstr_obj;
358b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  MaskFiltstr             maskfiltstr_obj;
359b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  PreFiltBankstr          prefiltbankstr_obj;
360b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  FFTstr                  fftstr_obj;
361b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  ISACUBSaveEncDataStruct SaveEnc_obj;
362b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
363b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int                     buffer_index;
364b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  float                   data_buffer_float[MAX_FRAMESAMPLES +
365b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                            LB_TOTAL_DELAY_SAMPLES];
366b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double                  bottleneck;
367b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Maximum allowed number of bits for a 30 msec packet */
368fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  //int16_t        payloadLimitBytes30;
369b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Maximum allowed number of bits for both 30 and 60 msec packet */
370fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  //int16_t        maxPayloadBytes;
371fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t             maxPayloadSizeBytes;
372b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
373b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double                  lastLPCVec[UB_LPC_ORDER];
374fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t             numBytesUsed;
375fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t             lastJitterInfo;
376b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} ISACUBEncStruct;
377b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
378b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
379b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
380b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
381b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
382b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  Bitstr          bitstr_obj;
383b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  MaskFiltstr     maskfiltstr_obj;
384b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  PostFiltBankstr postfiltbankstr_obj;
385b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  PitchFiltstr    pitchfiltstr_obj;
386b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  FFTstr          fftstr_obj;
387b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
388b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} ISACLBDecStruct;
389b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
390b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
391b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
392b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  Bitstr          bitstr_obj;
393b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  MaskFiltstr     maskfiltstr_obj;
394b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  PostFiltBankstr postfiltbankstr_obj;
395b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  FFTstr          fftstr_obj;
396b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
397b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} ISACUBDecStruct;
398b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
399b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
400b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
401b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
402b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
403b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  ISACLBEncStruct ISACencLB_obj;
404b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  ISACLBDecStruct ISACdecLB_obj;
405b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} ISACLBStruct;
406b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
407b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
408b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
409b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
410b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  ISACUBEncStruct ISACencUB_obj;
411b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  ISACUBDecStruct ISACdecUB_obj;
412b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} ISACUBStruct;
413b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
414b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
415b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  This struct is used to take a snapshot of the entropy coder and LPC gains
416b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  right before encoding LPC gains. This allows us to go back to that state
417b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  if we like to limit the payload size.
418b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org*/
419b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
420b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* 6 lower-band & 6 upper-band */
421b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double       loFiltGain[SUBFRAMES];
422b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double       hiFiltGain[SUBFRAMES];
423b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Upper boundary of interval W */
424fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  uint32_t W_upper;
425fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  uint32_t streamval;
426b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* Index to the current position in bytestream */
427fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  uint32_t stream_index;
428fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  uint8_t  stream[3];
429b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} transcode_obj;
430b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
431b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
432b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct {
433b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // lower-band codec instance
434b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  ISACLBStruct              instLB;
435b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // upper-band codec instance
436b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  ISACUBStruct              instUB;
437b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
438b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // Bandwidth Estimator and model for the rate.
439b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  BwEstimatorstr            bwestimator_obj;
440b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  RateModel                 rate_data_obj;
441b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  double                    MaxDelay;
442b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
443b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  /* 0 = adaptive; 1 = instantaneous */
444fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t               codingMode;
445b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
446b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // overall bottleneck of the codec
447fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int32_t               bottleneck;
448b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
449b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // QMF Filter state
450fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int32_t               analysisFBState1[FB_STATE_SIZE_WORD32];
451fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int32_t               analysisFBState2[FB_STATE_SIZE_WORD32];
452fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int32_t               synthesisFBState1[FB_STATE_SIZE_WORD32];
453fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int32_t               synthesisFBState2[FB_STATE_SIZE_WORD32];
454b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
455b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // Error Code
456fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t               errorCode;
457b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
458b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // bandwidth of the encoded audio 8, 12 or 16 kHz
459b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  enum ISACBandwidth        bandwidthKHz;
460b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // Sampling rate of audio, encoder and decode,  8 or 16 kHz
461b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  enum IsacSamplingRate encoderSamplingRateKHz;
462b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  enum IsacSamplingRate decoderSamplingRateKHz;
463b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // Flag to keep track of initializations, lower & upper-band
464b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // encoder and decoder.
465fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t               initFlag;
466b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
467b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // Flag to to indicate signal bandwidth switch
468fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t               resetFlag_8kHz;
469b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
470b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // Maximum allowed rate, measured in Bytes per 30 ms.
471fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t               maxRateBytesPer30Ms;
472b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // Maximum allowed payload-size, measured in Bytes.
473fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  int16_t               maxPayloadSizeBytes;
474ad70aa49b2ea2e4750b4596a769ce27278e507d8turaj@webrtc.org  /* The expected sampling rate of the input signal. Valid values are 16000,
475ad70aa49b2ea2e4750b4596a769ce27278e507d8turaj@webrtc.org   * 32000 and 48000. This is not the operation sampling rate of the codec.
476ad70aa49b2ea2e4750b4596a769ce27278e507d8turaj@webrtc.org   * Input signals at 48 kHz are resampled to 32 kHz, then encoded. */
477fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org  uint16_t in_sample_rate_hz;
478ad70aa49b2ea2e4750b4596a769ce27278e507d8turaj@webrtc.org  /* State for the input-resampler. It is only used for 48 kHz input signals. */
479ad70aa49b2ea2e4750b4596a769ce27278e507d8turaj@webrtc.org  int16_t state_in_resampler[SIZE_RESAMPLER_STATE];
480b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} ISACMainStruct;
481b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
482b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_STRUCTS_H_ */
483