1*15dc779aSAndroid Build Coastguard Worker /****************************************************************************** 2*15dc779aSAndroid Build Coastguard Worker * * 3*15dc779aSAndroid Build Coastguard Worker * Copyright (C) 2023 The Android Open Source Project 4*15dc779aSAndroid Build Coastguard Worker * 5*15dc779aSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 6*15dc779aSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 7*15dc779aSAndroid Build Coastguard Worker * You may obtain a copy of the License at: 8*15dc779aSAndroid Build Coastguard Worker * 9*15dc779aSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 10*15dc779aSAndroid Build Coastguard Worker * 11*15dc779aSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 12*15dc779aSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 13*15dc779aSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*15dc779aSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 15*15dc779aSAndroid Build Coastguard Worker * limitations under the License. 16*15dc779aSAndroid Build Coastguard Worker * 17*15dc779aSAndroid Build Coastguard Worker ***************************************************************************** 18*15dc779aSAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*15dc779aSAndroid Build Coastguard Worker */ 20*15dc779aSAndroid Build Coastguard Worker 21*15dc779aSAndroid Build Coastguard Worker #pragma once 22*15dc779aSAndroid Build Coastguard Worker #define FD_MODE 2 23*15dc779aSAndroid Build Coastguard Worker #define TD_MODE 0 24*15dc779aSAndroid Build Coastguard Worker #define MIN_POW -200 25*15dc779aSAndroid Build Coastguard Worker #define INDEXOFLOWFREQUENCY 160 26*15dc779aSAndroid Build Coastguard Worker 27*15dc779aSAndroid Build Coastguard Worker #define NFRAMEAHEAD 1 28*15dc779aSAndroid Build Coastguard Worker #define AVE_TONAL_LENGTH 100 29*15dc779aSAndroid Build Coastguard Worker #define AVE_TONAL_LENGTH_SHORT 10 30*15dc779aSAndroid Build Coastguard Worker #define SPECTRAL_TILT_LENGTH 80 31*15dc779aSAndroid Build Coastguard Worker #define SPECTRAL_TILT_LENGTH_SHORT 20 32*15dc779aSAndroid Build Coastguard Worker #define SMOOTHING_LENGTH 100 33*15dc779aSAndroid Build Coastguard Worker 34*15dc779aSAndroid Build Coastguard Worker #define NO_BORDER 0 35*15dc779aSAndroid Build Coastguard Worker #define BORDER_MUSIC_SPEECH 1 36*15dc779aSAndroid Build Coastguard Worker #define BORDER_MUSIC_SPEECH_DEFINITE 2 37*15dc779aSAndroid Build Coastguard Worker #define BORDER_SPEECH_MUSIC 3 38*15dc779aSAndroid Build Coastguard Worker #define BORDER_SPEECH_MUSIC_DEFINITE 4 39*15dc779aSAndroid Build Coastguard Worker 40*15dc779aSAndroid Build Coastguard Worker #define TBD 0 41*15dc779aSAndroid Build Coastguard Worker #define SPEECH_DEFINITE 1 42*15dc779aSAndroid Build Coastguard Worker #define SPEECH 2 43*15dc779aSAndroid Build Coastguard Worker #define MUSIC_DEFINITE 3 44*15dc779aSAndroid Build Coastguard Worker #define MUSIC 4 45*15dc779aSAndroid Build Coastguard Worker #define LOG_1024_BASE_10 3.01029995664f 46*15dc779aSAndroid Build Coastguard Worker #define LOG_768_BASE_10 (2.88536122003f) 47*15dc779aSAndroid Build Coastguard Worker 48*15dc779aSAndroid Build Coastguard Worker typedef struct { 49*15dc779aSAndroid Build Coastguard Worker WORD32 smoothing_result_buf[100]; /**<buffer of smoothed mode decisions */ 50*15dc779aSAndroid Build Coastguard Worker WORD32 init_result_behind[100]; /**<buffer of past mode decisions */ 51*15dc779aSAndroid Build Coastguard Worker WORD32 init_result_ahead[NFRAMEAHEAD]; /**<buffer of ahead mode decisions */ 52*15dc779aSAndroid Build Coastguard Worker WORD32 flag_border_buf_behind[10]; /**<buffer of past border flags */ 53*15dc779aSAndroid Build Coastguard Worker WORD32 flag_border_buf_ahead[NFRAMEAHEAD]; /**<buffer of ahead border flags */ 54*15dc779aSAndroid Build Coastguard Worker FLOAT32 frame_energy_buf_behind[10]; /**<buffer of past energies */ 55*15dc779aSAndroid Build Coastguard Worker FLOAT32 frame_energy_buf_ahead[NFRAMEAHEAD]; /**<buffer of ahead energies */ 56*15dc779aSAndroid Build Coastguard Worker } ia_classification_buf_struct; 57*15dc779aSAndroid Build Coastguard Worker 58*15dc779aSAndroid Build Coastguard Worker typedef struct { 59*15dc779aSAndroid Build Coastguard Worker WORD32 coding_mode; /**< coding mode of the frame */ 60*15dc779aSAndroid Build Coastguard Worker WORD32 pre_mode; /**< coding mode of the previous frame */ 61*15dc779aSAndroid Build Coastguard Worker 62*15dc779aSAndroid Build Coastguard Worker FLOAT32 input_samples[3840 * 2]; 63*15dc779aSAndroid Build Coastguard Worker WORD32 n_buffer_samples; 64*15dc779aSAndroid Build Coastguard Worker WORD32 class_buf[10]; 65*15dc779aSAndroid Build Coastguard Worker WORD32 n_buf_class; 66*15dc779aSAndroid Build Coastguard Worker WORD32 n_class_frames; 67*15dc779aSAndroid Build Coastguard Worker 68*15dc779aSAndroid Build Coastguard Worker WORD32 is_switch_mode; 69*15dc779aSAndroid Build Coastguard Worker 70*15dc779aSAndroid Build Coastguard Worker WORD32 framecnt; 71*15dc779aSAndroid Build Coastguard Worker WORD32 init_flag; 72*15dc779aSAndroid Build Coastguard Worker WORD32 framecnt_xm; 73*15dc779aSAndroid Build Coastguard Worker 74*15dc779aSAndroid Build Coastguard Worker ia_classification_buf_struct buffers; 75*15dc779aSAndroid Build Coastguard Worker FLOAT32 spec_tilt_buf[100]; /* buffer of spectral tilt */ 76*15dc779aSAndroid Build Coastguard Worker WORD32 n_tonal[100]; /* buffer of tonal */ 77*15dc779aSAndroid Build Coastguard Worker WORD32 n_tonal_low_frequency[100]; 78*15dc779aSAndroid Build Coastguard Worker FLOAT32 msd_spec_tilt_buf[5]; 79*15dc779aSAndroid Build Coastguard Worker FLOAT32 msd_spec_tilt_short_buf[5]; /* buffer of the MSD of spectral tilt */ 80*15dc779aSAndroid Build Coastguard Worker FLOAT32 ave_n_tonal_short_buf[5]; 81*15dc779aSAndroid Build Coastguard Worker FLOAT32 ave_n_tonal_buf[5]; /* buffer of the AVE of tonal */ 82*15dc779aSAndroid Build Coastguard Worker } ia_classification_struct; 83*15dc779aSAndroid Build Coastguard Worker 84*15dc779aSAndroid Build Coastguard Worker typedef struct { 85*15dc779aSAndroid Build Coastguard Worker FLOAT32 *time_signal; /**<input signals */ 86*15dc779aSAndroid Build Coastguard Worker WORD32 framecnt_xm; /**<frame counter 87*15dc779aSAndroid Build Coastguard Worker */ 88*15dc779aSAndroid Build Coastguard Worker WORD32 *n_tonal; /**<buffer of the numbers of tonal 89*15dc779aSAndroid Build Coastguard Worker */ 90*15dc779aSAndroid Build Coastguard Worker WORD32 *n_tonal_low_frequency; /**<buffer of the numbers of tonal in the low frequency domain 91*15dc779aSAndroid Build Coastguard Worker */ 92*15dc779aSAndroid Build Coastguard Worker FLOAT32 *n_tonal_low_frequency_ratio; /**<the ratio of distribution of the numbers of tonal in 93*15dc779aSAndroid Build Coastguard Worker the low frequency domain*/ 94*15dc779aSAndroid Build Coastguard Worker FLOAT32 *ave_n_tonal; /**<long - term AVE of tonal 95*15dc779aSAndroid Build Coastguard Worker */ 96*15dc779aSAndroid Build Coastguard Worker FLOAT32 *ave_n_tonal_short; /**<short - term AVE of tonal */ 97*15dc779aSAndroid Build Coastguard Worker } ia_tonal_params_struct; 98*15dc779aSAndroid Build Coastguard Worker 99*15dc779aSAndroid Build Coastguard Worker typedef struct { 100*15dc779aSAndroid Build Coastguard Worker WORD32 framecnt; /**< frame counter*/ 101*15dc779aSAndroid Build Coastguard Worker WORD32 *framecnt_xm; /**< frame counter*/ 102*15dc779aSAndroid Build Coastguard Worker WORD32 *flag_border; /**< flag of current border*/ 103*15dc779aSAndroid Build Coastguard Worker FLOAT32 ave_n_tonal_short; /**< short - term AVE of tonal*/ 104*15dc779aSAndroid Build Coastguard Worker FLOAT32 ave_n_tonal; /**< long - term AVE of tonal*/ 105*15dc779aSAndroid Build Coastguard Worker FLOAT32 *ave_n_tonal_short_buf; /**< buffer of short - term AVE of tonal*/ 106*15dc779aSAndroid Build Coastguard Worker FLOAT32 *ave_n_tonal_buf; /**< buffer long - term AVE of tonal*/ 107*15dc779aSAndroid Build Coastguard Worker FLOAT32 msd_spec_tilt; /**< long - term MSD of spectral tilt*/ 108*15dc779aSAndroid Build Coastguard Worker FLOAT32 msd_spec_tilt_short; /**< short - term MSD of spectral tilt*/ 109*15dc779aSAndroid Build Coastguard Worker FLOAT32 *msd_spec_tilt_buf; /**< buffer of long - term MSD of spectral tilt*/ 110*15dc779aSAndroid Build Coastguard Worker FLOAT32 *msd_spec_tilt_short_buf; /**< buffer of short - term MSD of spectral tilt*/ 111*15dc779aSAndroid Build Coastguard Worker FLOAT32 n_tonal_low_frequency_ratio; /**< the ratio of distribution of the numbers of tonal in 112*15dc779aSAndroid Build Coastguard Worker the low frequency domain*/ 113*15dc779aSAndroid Build Coastguard Worker FLOAT32 frame_energy; /**< the energy of current frame*/ 114*15dc779aSAndroid Build Coastguard Worker } ia_mode_params_struct; 115*15dc779aSAndroid Build Coastguard Worker 116*15dc779aSAndroid Build Coastguard Worker typedef struct { 117*15dc779aSAndroid Build Coastguard Worker WORD32 init_mode_decision_result; /**< initial mode decision */ 118*15dc779aSAndroid Build Coastguard Worker WORD32 *init_result_behind; /**< buffer of past mode decisions */ 119*15dc779aSAndroid Build Coastguard Worker WORD32 *init_result_ahead; /**< buffer of ahead mode decisions */ 120*15dc779aSAndroid Build Coastguard Worker WORD32 flag_border; /**< current flag of border */ 121*15dc779aSAndroid Build Coastguard Worker WORD32 *flag_border_buf_behind; /**< buffer of past flags of border */ 122*15dc779aSAndroid Build Coastguard Worker WORD32 *flag_border_buf_ahead; /**< buffer of ahead flags of border */ 123*15dc779aSAndroid Build Coastguard Worker FLOAT32 frame_energy; /**< the energy of current frame */ 124*15dc779aSAndroid Build Coastguard Worker FLOAT32 *frame_energy_buf_behind; /**< buffer of past frame energies */ 125*15dc779aSAndroid Build Coastguard Worker FLOAT32 *frame_energy_buf_ahead; /**< buffer of ahead frame energies */ 126*15dc779aSAndroid Build Coastguard Worker WORD32 *smoothing_result_buf; /**< buffer of smoothed mode decision */ 127*15dc779aSAndroid Build Coastguard Worker WORD32 flag_speech_definite; 128*15dc779aSAndroid Build Coastguard Worker WORD32 count_small_energy; 129*15dc779aSAndroid Build Coastguard Worker WORD32 flag_music_definite; 130*15dc779aSAndroid Build Coastguard Worker WORD32 num_smoothing; 131*15dc779aSAndroid Build Coastguard Worker } ia_smooth_params_struct; /**< final mode decision result */ 132*15dc779aSAndroid Build Coastguard Worker 133*15dc779aSAndroid Build Coastguard Worker typedef struct { 134*15dc779aSAndroid Build Coastguard Worker FLOAT32 *time_signal; /**<input signals */ 135*15dc779aSAndroid Build Coastguard Worker WORD32 framecnt_xm; /**<frame counter */ 136*15dc779aSAndroid Build Coastguard Worker FLOAT32 *spec_tilt_buf; /**<buffer of spectral tilt */ 137*15dc779aSAndroid Build Coastguard Worker FLOAT32 *msd_spec_tilt; /**<long - term MSD of spectral tilt */ 138*15dc779aSAndroid Build Coastguard Worker FLOAT32 *msd_spec_tilt_short; /**<short - term MSD of spectral tilt*/ 139*15dc779aSAndroid Build Coastguard Worker FLOAT32 frame_energy; 140*15dc779aSAndroid Build Coastguard Worker } ia_spec_tilt_params_struct; 141*15dc779aSAndroid Build Coastguard Worker 142*15dc779aSAndroid Build Coastguard Worker typedef struct { 143*15dc779aSAndroid Build Coastguard Worker const FLOAT64 twiddle_table_fft_float[514]; 144*15dc779aSAndroid Build Coastguard Worker const FLOAT64 hanning_window_1024[FRAME_LEN_LONG]; 145*15dc779aSAndroid Build Coastguard Worker const FLOAT64 absolute_threshold_1024[FRAME_LEN_LONG / 2]; 146*15dc779aSAndroid Build Coastguard Worker const FLOAT64 hanning_window_768[LEN_SUPERFRAME_768]; 147*15dc779aSAndroid Build Coastguard Worker const FLOAT64 absolute_threshold_768[LEN_SUPERFRAME_768 / 2]; 148*15dc779aSAndroid Build Coastguard Worker } ia_signal_classifier_tables; 149*15dc779aSAndroid Build Coastguard Worker 150*15dc779aSAndroid Build Coastguard Worker extern const ia_signal_classifier_tables iusace_classify_arrays; 151*15dc779aSAndroid Build Coastguard Worker 152*15dc779aSAndroid Build Coastguard Worker VOID iusace_init_classification(ia_classification_struct *pstr_sig_class); 153