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