1e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* 2e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Copyright 2003-2010, VisualOn, Inc. 3e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 4e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Licensed under the Apache License, Version 2.0 (the "License"); 5e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** you may not use this file except in compliance with the License. 6e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** You may obtain a copy of the License at 7e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 8e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** http://www.apache.org/licenses/LICENSE-2.0 9e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 10e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Unless required by applicable law or agreed to in writing, software 11e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** distributed under the License is distributed on an "AS IS" BASIS, 12e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** See the License for the specific language governing permissions and 14e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** limitations under the License. 15e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard */ 16e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 17e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*--------------------------------------------------------------------------* 19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * DTX.H * 20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *--------------------------------------------------------------------------* 21e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * Static memory, constants and frametypes for the DTX * 22e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *--------------------------------------------------------------------------*/ 23e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#ifndef __DTX_H__ 25e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define __DTX_H__ 26e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 27e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define DTX_MAX_EMPTY_THRESH 50 28e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define DTX_HIST_SIZE 8 29e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define DTX_HIST_SIZE_MIN_ONE 7 30e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define DTX_ELAPSED_FRAMES_THRESH (24 + 7 -1) 31e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define DTX_HANG_CONST 7 /* yields eight frames of SP HANGOVER */ 32e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define INV_MED_THRESH 14564 33e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define ISF_GAP 128 /* 50 */ 34e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define ONE_MINUS_ISF_GAP 16384 - ISF_GAP 35e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define ISF_GAP 128 36e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define ISF_DITH_GAP 448 37e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define ISF_FACTOR_LOW 256 38e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define ISF_FACTOR_STEP 2 39e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define GAIN_THR 180 40e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define GAIN_FACTOR 75 41e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 42e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardtypedef struct 43e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{ 44e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 isf_hist[M * DTX_HIST_SIZE]; 45e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 log_en_hist[DTX_HIST_SIZE]; 46e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 hist_ptr; 47e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 log_en_index; 48e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 cng_seed; 49e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard /* DTX handler stuff */ 50e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 dtxHangoverCount; 51e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 decAnaElapsedCount; 52e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word32 D[28]; 53e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word32 sumD[DTX_HIST_SIZE]; 54e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard} dtx_encState; 55e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 56e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define SPEECH 0 57e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define DTX 1 58e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define DTX_MUTE 2 59e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 60e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define TX_SPEECH 0 61e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define TX_SID_FIRST 1 62e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define TX_SID_UPDATE 2 63e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define TX_NO_DATA 3 64e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 65e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define RX_SPEECH_GOOD 0 66e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define RX_SPEECH_PROBABLY_DEGRADED 1 67e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define RX_SPEECH_LOST 2 68e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define RX_SPEECH_BAD 3 69e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define RX_SID_FIRST 4 70e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define RX_SID_UPDATE 5 71e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define RX_SID_BAD 6 72e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define RX_NO_DATA 7 73e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 74e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/***************************************************************************** 75e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * 76e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * DEFINITION OF DATA TYPES 77e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *****************************************************************************/ 78e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 79e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 dtx_enc_init(dtx_encState ** st, Word16 isf_init[], VO_MEM_OPERATOR *pMemOP); 80e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 dtx_enc_reset(dtx_encState * st, Word16 isf_init[]); 81e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid dtx_enc_exit(dtx_encState ** st, VO_MEM_OPERATOR *pMemOP); 82e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 83e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 dtx_enc( 84e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard dtx_encState * st, /* i/o : State struct */ 85e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 isf[M], /* o : CN ISF vector */ 86e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * exc2, /* o : CN excitation */ 87e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 ** prms 88e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 89e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 90e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 dtx_buffer( 91e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard dtx_encState * st, /* i/o : State struct */ 92e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 isf_new[], /* i : isf vector */ 93e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word32 enr, /* i : residual energy (in L_FRAME) */ 94e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 codec_mode 95e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 96e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 97e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid tx_dtx_handler(dtx_encState * st, /* i/o : State struct */ 98e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 vad_flag, /* i : vad decision */ 99e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * usedMode /* i/o : mode changed or not */ 100e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 101e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 102e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Qisf_ns( 103e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * isf1, /* input : ISF in the frequency domain (0..0.5) */ 104e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * isf_q, /* output: quantized ISF */ 105e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * indice /* output: quantization indices */ 106e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 107e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 108e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 109e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Disf_ns( 110e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * indice, /* input: quantization indices */ 111e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 * isf_q /* input : ISF in the frequency domain (0..0.5) */ 112e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard); 113e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 114e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif //__DTX_H__ 115e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 116