1a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* 2a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 4a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Use of this source code is governed by a BSD-style license 5a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * that can be found in the LICENSE file in the root of the source 6a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * tree. An additional intellectual property rights grant can be found 7a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * in the file PATENTS. All contributing project authors may 8a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * be found in the AUTHORS file in the root of the source tree. 9a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin */ 10a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 11a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* 12a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * structs.h 13a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 14a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * This header file contains all the structs used in the ISAC codec 15a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 16a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin */ 17a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 18a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_STRUCTS_H_ 19a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_STRUCTS_H_ 20a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 21a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 22a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#include "common_audio/signal_processing/include/signal_processing_library.h" 23a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#include "modules/audio_coding/codecs/isac/fix/source/settings.h" 24a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#include "typedefs.h" 25a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 26a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* Bitstream struct for decoder */ 27a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef struct Bitstreamstruct_dec { 28a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 29a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord16 *stream; /* Pointer to bytestream to decode */ 30a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 W_upper; /* Upper boundary of interval W */ 31a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 streamval; 32a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord16 stream_index; /* Index to the current position in bytestream */ 33a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 full; /* 0 - first byte in memory filled, second empty*/ 34a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* 1 - both bytes are empty (we just filled the previous memory */ 35a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 36a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} Bitstr_dec; 37a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 38a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* Bitstream struct for encoder */ 39a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef struct Bitstreamstruct_enc { 40a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 41a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord16 stream[STREAM_MAXW16_60MS]; /* Vector for adding encoded bytestream */ 42a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 W_upper; /* Upper boundary of interval W */ 43a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 streamval; 44a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord16 stream_index; /* Index to the current position in bytestream */ 45a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 full; /* 0 - first byte in memory filled, second empty*/ 46a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* 1 - both bytes are empty (we just filled the previous memory */ 47a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 48a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} Bitstr_enc; 49a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 50a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 51a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef struct { 52a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 53a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 DataBufferLoQ0[WINLEN]; 54a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 DataBufferHiQ0[WINLEN]; 55a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 56a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 CorrBufLoQQ[ORDERLO+1]; 57a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 CorrBufHiQQ[ORDERHI+1]; 58a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 59a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 CorrBufLoQdom[ORDERLO+1]; 60a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 CorrBufHiQdom[ORDERHI+1]; 61a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 62a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 PreStateLoGQ15[ORDERLO+1]; 63a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 PreStateHiGQ15[ORDERHI+1]; 64a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 65a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 OldEnergy; 66a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 67a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} MaskFiltstr_enc; 68a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 69a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 70a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 71a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef struct { 72a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 73a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 PostStateLoGQ0[ORDERLO+1]; 74a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 PostStateHiGQ0[ORDERHI+1]; 75a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 76a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 OldEnergy; 77a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 78a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} MaskFiltstr_dec; 79a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 80a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 81a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 82a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 83a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 84a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 85a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 86a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 87a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef struct { 88a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 89a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin //state vectors for each of the two analysis filters 90a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 91a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 INSTAT1_fix[2*(QORDER-1)]; 92a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 INSTAT2_fix[2*(QORDER-1)]; 93a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 INLABUF1_fix[QLOOKAHEAD]; 94a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 INLABUF2_fix[QLOOKAHEAD]; 95a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 96a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* High pass filter */ 97a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 HPstates_fix[HPORDER]; 98a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 99a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} PreFiltBankstr; 100a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 101a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 102a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef struct { 103a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 104a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin //state vectors for each of the two analysis filters 105a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 STATE_0_LOWER_fix[2*POSTQORDER]; 106a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 STATE_0_UPPER_fix[2*POSTQORDER]; 107a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 108a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* High pass filter */ 109a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 110a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 HPstates1_fix[HPORDER]; 111a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 HPstates2_fix[HPORDER]; 112a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 113a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} PostFiltBankstr; 114a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 115a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef struct { 116a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 117a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 118a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* data buffer for pitch filter */ 119a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 ubufQQ[PITCH_BUFFSIZE]; 120a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 121a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* low pass state vector */ 122a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 ystateQQ[PITCH_DAMPORDER]; 123a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 124a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* old lag and gain */ 125a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 oldlagQ7; 126a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 oldgainQ12; 127a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 128a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} PitchFiltstr; 129a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 130a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 131a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 132a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef struct { 133a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 134a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin //for inital estimator 135a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 dec_buffer16[PITCH_CORR_LEN2+PITCH_CORR_STEP2+PITCH_MAX_LAG/2-PITCH_FRAME_LEN/2+2]; 136a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 decimator_state32[2*ALLPASSSECTIONS+1]; 137a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 inbuf[QLOOKAHEAD]; 138a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 139a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin PitchFiltstr PFstr_wght; 140a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin PitchFiltstr PFstr; 141a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 142a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 143a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} PitchAnalysisStruct; 144a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 145a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 146a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef struct { 147a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* Parameters used in PLC to avoid re-computation */ 148a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 149a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* --- residual signals --- */ 150a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 prevPitchInvIn[FRAMESAMPLES/2]; 151a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 prevPitchInvOut[PITCH_MAX_LAG + 10]; // [FRAMESAMPLES/2]; save 90 152a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 prevHP[PITCH_MAX_LAG + 10]; // [FRAMESAMPLES/2]; save 90 153a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 154a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 155a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 decayCoeffPriodic; /* how much to supress a sample */ 156a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 decayCoeffNoise; 157a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 used; /* if PLC is used */ 158a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 159a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 160a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *lastPitchLP; // [FRAMESAMPLES/2]; saved 240; 161a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 162a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 163a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* --- LPC side info --- */ 164a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 lofilt_coefQ15[ ORDERLO ]; 165a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 hifilt_coefQ15[ ORDERHI ]; 166a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 gain_lo_hiQ17[2]; 167a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 168a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* --- LTP side info --- */ 169a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 AvgPitchGain_Q12; 170a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 lastPitchGain_Q12; 171a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 lastPitchLag_Q7; 172a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 173a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* --- Add-overlap in recovery packet --- */ 174a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 overlapLP[ RECOVERY_OVERLAP ]; // [FRAMESAMPLES/2]; saved 160 175a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 176a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 pitchCycles; 177a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 A; 178a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 B; 179a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 pitchIndex; 180a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 stretchLag; 181a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 *prevPitchLP; // [ FRAMESAMPLES/2 ]; saved 240 182a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 seed; 183a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 184a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 std; 185a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} PLCstr; 186a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 187a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 188a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 189a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* Have instance of struct together with other iSAC structs */ 190a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef struct { 191a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 192a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 prevFrameSizeMs; /* Previous frame size (in ms) */ 193a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord16 prevRtpNumber; /* Previous RTP timestamp from received packet */ 194a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* (in samples relative beginning) */ 195a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 prevSendTime; /* Send time for previous packet, from RTP header */ 196a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 prevArrivalTime; /* Arrival time for previous packet (in ms using timeGetTime()) */ 197a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord16 prevRtpRate; /* rate of previous packet, derived from RTP timestamps (in bits/s) */ 198a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 lastUpdate; /* Time since the last update of the Bottle Neck estimate (in samples) */ 199a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 lastReduction; /* Time sinse the last reduction (in samples) */ 200a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 countUpdates; /* How many times the estimate was update in the beginning */ 201a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 202a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* The estimated bottle neck rate from there to here (in bits/s) */ 203a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 recBw; 204a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 recBwInv; 205a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 recBwAvg; 206a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 recBwAvgQ; 207a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 208a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 minBwInv; 209a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 maxBwInv; 210a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 211a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* The estimated mean absolute jitter value, as seen on this side (in ms) */ 212a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 recJitter; 213a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 recJitterShortTerm; 214a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 recJitterShortTermAbs; 215a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 recMaxDelay; 216a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 recMaxDelayAvgQ; 217a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 218a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 219a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 recHeaderRate; /* (assumed) bitrate for headers (bps) */ 220a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 221a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 sendBwAvg; /* The estimated bottle neck rate from here to there (in bits/s) */ 222a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 sendMaxDelayAvg; /* The estimated mean absolute jitter value, as seen on the other siee (in ms) */ 223a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 224a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 225a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 countRecPkts; /* number of packets received since last update */ 226a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 highSpeedRec; /* flag for marking that a high speed network has been detected downstream */ 227a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 228a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* number of consecutive pkts sent during which the bwe estimate has 229a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin remained at a value greater than the downstream threshold for determining highspeed network */ 230a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 countHighSpeedRec; 231a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 232a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* flag indicating bwe should not adjust down immediately for very late pckts */ 233a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 inWaitPeriod; 234a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 235a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* variable holding the time of the start of a window of time when 236a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin bwe should not adjust down immediately for very late pckts */ 237a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 startWaitPeriod; 238a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 239a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* number of consecutive pkts sent during which the bwe estimate has 240a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin remained at a value greater than the upstream threshold for determining highspeed network */ 241a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 countHighSpeedSent; 242a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 243a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* flag indicated the desired number of packets over threshold rate have been sent and 244a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin bwe will assume the connection is over broadband network */ 245a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 highSpeedSend; 246a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 247a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 248a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 249a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 250a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} BwEstimatorstr; 251a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 252a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 253a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef struct { 254a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 255a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* boolean, flags if previous packet exceeded B.N. */ 256a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 PrevExceed; 257a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* ms */ 258a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 ExceedAgo; 259a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* packets left to send in current burst */ 260a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 BurstCounter; 261a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* packets */ 262a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 InitCounter; 263a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* ms remaining in buffer when next packet will be sent */ 264a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 StillBuffered; 265a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 266a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} RateModel; 267a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 268a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* The following strutc is used to store data from encoding, to make it 269a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin fast and easy to construct a new bitstream with a different Bandwidth 270a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin estimate. All values (except framelength and minBytes) is double size to 271a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin handle 60 ms of data. 272a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin*/ 273a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef struct { 274a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 275a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* Used to keep track of if it is first or second part of 60 msec packet */ 276a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin int startIdx; 277a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 278a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* Frame length in samples */ 279a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 framelength; 280a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 281a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* Pitch Gain */ 282a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 pitchGain_index[2]; 283a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 284a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* Pitch Lag */ 285a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 meanGain[2]; 286a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 pitchIndex[PITCH_SUBFRAMES*2]; 287a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 288a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* LPC */ 289a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 LPCcoeffs_g[12*2]; /* KLT_ORDER_GAIN = 12 */ 290a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 LPCindex_s[108*2]; /* KLT_ORDER_SHAPE = 108 */ 291a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 LPCindex_g[12*2]; /* KLT_ORDER_GAIN = 12 */ 292a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 293a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* Encode Spec */ 294a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 fre[FRAMESAMPLES]; 295a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 fim[FRAMESAMPLES]; 296a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 AvgPitchGain[2]; 297a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 298a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* Used in adaptive mode only */ 299a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin int minBytes; 300a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 301a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} ISAC_SaveEncData_t; 302a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 303a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef struct { 304a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 305a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin Bitstr_enc bitstr_obj; 306a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin MaskFiltstr_enc maskfiltstr_obj; 307a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin PreFiltBankstr prefiltbankstr_obj; 308a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin PitchFiltstr pitchfiltstr_obj; 309a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin PitchAnalysisStruct pitchanalysisstr_obj; 310a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin RateModel rate_data_obj; 311a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 312a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 buffer_index; 313a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 current_framesamples; 314a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 315a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 data_buffer_fix[FRAMESAMPLES]; // the size was MAX_FRAMESAMPLES 316a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 317a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 frame_nb; 318a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 BottleNeck; 319a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 MaxDelay; 320a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 new_framelength; 321a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 s2nr; 322a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord16 MaxBits; 323a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 324a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 bitstr_seed; 325a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#ifdef WEBRTC_ISAC_FIX_NB_CALLS_ENABLED 326a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin PostFiltBankstr interpolatorstr_obj; 327a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#endif 328a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 329a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin ISAC_SaveEncData_t *SaveEnc_ptr; 330a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 payloadLimitBytes30; /* Maximum allowed number of bits for a 30 msec packet */ 331a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 payloadLimitBytes60; /* Maximum allowed number of bits for a 30 msec packet */ 332a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 maxPayloadBytes; /* Maximum allowed number of bits for both 30 and 60 msec packet */ 333a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 maxRateInBytes; /* Maximum allowed rate in bytes per 30 msec packet */ 334a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 enforceFrameSize; /* If set iSAC will never change packet size */ 335a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 336a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} ISACFIX_EncInst_t; 337a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 338a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 339a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef struct { 340a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 341a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin Bitstr_dec bitstr_obj; 342a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin MaskFiltstr_dec maskfiltstr_obj; 343a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin PostFiltBankstr postfiltbankstr_obj; 344a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin PitchFiltstr pitchfiltstr_obj; 345a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin PLCstr plcstr_obj; /* TS; for packet loss concealment */ 346a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 347a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#ifdef WEBRTC_ISAC_FIX_NB_CALLS_ENABLED 348a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin PreFiltBankstr decimatorstr_obj; 349a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#endif 350a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 351a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} ISACFIX_DecInst_t; 352a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 353a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 354a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 355a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef struct { 356a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 357a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin ISACFIX_EncInst_t ISACenc_obj; 358a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin ISACFIX_DecInst_t ISACdec_obj; 359a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin BwEstimatorstr bwestimator_obj; 360a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 CodingMode; /* 0 = adaptive; 1 = instantaneous */ 361a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 errorcode; 362a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 initflag; /* 0 = nothing initiated; 1 = encoder or decoder */ 363a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* not initiated; 2 = all initiated */ 364a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} ISACFIX_SubStruct; 365a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 366a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 367a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef struct { 368a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 lpcGains[12]; /* 6 lower-band & 6 upper-band we may need to double it for 60*/ 369a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* */ 370a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 W_upper; /* Upper boundary of interval W */ 371a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 streamval; 372a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord16 stream_index; /* Index to the current position in bytestream */ 373a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 full; /* 0 - first byte in memory filled, second empty*/ 374a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* 1 - both bytes are empty (we just filled the previous memory */ 375a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord16 beforeLastWord; 376a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord16 lastWord; 377a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} transcode_obj; 378a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 379a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 380a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin//Bitstr_enc myBitStr; 381a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 382a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_STRUCTS_H_ */ 383