1*15dc779aSAndroid Build Coastguard Worker /****************************************************************************** 2*15dc779aSAndroid Build Coastguard Worker * * 3*15dc779aSAndroid Build Coastguard Worker * Copyright (C) 2024 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 23*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_LOUDNESS_NUM_TAPS (3) 24*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_LOUDNESS_PRE_FLT (0) 25*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_LOUDNESS_RLB_FLT (1) 26*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_LOUDNESS_DONT_PASS (-1) 27*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_ABS_GATE (-70) 28*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MOMENTARY_LOUDNESS_OVERLAP (3) 29*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_SL_OVERLAP (20) 30*15dc779aSAndroid Build Coastguard Worker #define BYTE_ALIGN_8 (8) 31*15dc779aSAndroid Build Coastguard Worker #define MAX(a, b) ((a) > (b) ? (a) : (b)) 32*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_DEFAULT_SHORT_TERM_LOUDENSS (-1000) 33*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_DEFAULT_MOMENTARY_LOUDENSS (-1000) 34*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_SEC_TO_100MS_FACTOR (60 * 10) 35*15dc779aSAndroid Build Coastguard Worker 36*15dc779aSAndroid Build Coastguard Worker typedef struct { 37*15dc779aSAndroid Build Coastguard Worker BOOL passes_abs_gate; 38*15dc779aSAndroid Build Coastguard Worker FLOAT64 short_term_loudness; 39*15dc779aSAndroid Build Coastguard Worker FLOAT64 int_val; 40*15dc779aSAndroid Build Coastguard Worker } short_term_frame_t; 41*15dc779aSAndroid Build Coastguard Worker 42*15dc779aSAndroid Build Coastguard Worker typedef struct { 43*15dc779aSAndroid Build Coastguard Worker BOOL passes_abs_gate; 44*15dc779aSAndroid Build Coastguard Worker FLOAT64 momentary_loudness; 45*15dc779aSAndroid Build Coastguard Worker FLOAT64 int_val; 46*15dc779aSAndroid Build Coastguard Worker } momentary_frame_t; 47*15dc779aSAndroid Build Coastguard Worker typedef struct { 48*15dc779aSAndroid Build Coastguard Worker UWORD32 num_samples_per_ch; 49*15dc779aSAndroid Build Coastguard Worker UWORD32 n_channels; 50*15dc779aSAndroid Build Coastguard Worker UWORD32 length; 51*15dc779aSAndroid Build Coastguard Worker UWORD32 sample_rate; 52*15dc779aSAndroid Build Coastguard Worker UWORD32 pcm_sz; 53*15dc779aSAndroid Build Coastguard Worker FLOAT64 sum_square; 54*15dc779aSAndroid Build Coastguard Worker FLOAT64 prev_four_sum_square[4]; 55*15dc779aSAndroid Build Coastguard Worker FLOAT64 w[2][2][4]; 56*15dc779aSAndroid Build Coastguard Worker UWORD32 count_fn_call_mmstl; 57*15dc779aSAndroid Build Coastguard Worker UWORD32 mom_loudness_first_time_flag; 58*15dc779aSAndroid Build Coastguard Worker FLOAT64 average_loudness_val; 59*15dc779aSAndroid Build Coastguard Worker FLOAT64 prev_thirty_sum_square[30]; 60*15dc779aSAndroid Build Coastguard Worker WORD32 sl_first_time_flag; 61*15dc779aSAndroid Build Coastguard Worker WORD32 local_sl_count; 62*15dc779aSAndroid Build Coastguard Worker UWORD32 short_term_loudness_overlap; 63*15dc779aSAndroid Build Coastguard Worker short_term_frame_t stf_instances[100]; 64*15dc779aSAndroid Build Coastguard Worker UWORD32 no_of_stf; 65*15dc779aSAndroid Build Coastguard Worker UWORD32 curr_stf_no; 66*15dc779aSAndroid Build Coastguard Worker UWORD32 loop_curr_stf_no; 67*15dc779aSAndroid Build Coastguard Worker UWORD32 no_of_stf_passing_abs_gate; 68*15dc779aSAndroid Build Coastguard Worker FLOAT64 tot_int_val_stf_passing_abs_gate; 69*15dc779aSAndroid Build Coastguard Worker FLOAT64 temp_stf_instances_loudness[100]; 70*15dc779aSAndroid Build Coastguard Worker BOOL get_LRA; 71*15dc779aSAndroid Build Coastguard Worker UWORD32 max_lra_count; 72*15dc779aSAndroid Build Coastguard Worker UWORD32 no_of_mf; 73*15dc779aSAndroid Build Coastguard Worker 74*15dc779aSAndroid Build Coastguard Worker UWORD32 no_of_mf_passing_abs_gate; 75*15dc779aSAndroid Build Coastguard Worker FLOAT64 tot_int_val_mf_passing_abs_gate; 76*15dc779aSAndroid Build Coastguard Worker UWORD32 no_of_mf_passing_rel_gate; 77*15dc779aSAndroid Build Coastguard Worker FLOAT64 tot_int_val_mf_passing_rel_gate; 78*15dc779aSAndroid Build Coastguard Worker FLOAT64 rel_gate; 79*15dc779aSAndroid Build Coastguard Worker UWORD32 ml_count_fn_call; 80*15dc779aSAndroid Build Coastguard Worker UWORD32 loop_ml_count_fn_call; 81*15dc779aSAndroid Build Coastguard Worker momentary_frame_t mf_instances[1000]; 82*15dc779aSAndroid Build Coastguard Worker WORD32 get_intergrated_loudness; 83*15dc779aSAndroid Build Coastguard Worker UWORD32 max_il_buf_size; 84*15dc779aSAndroid Build Coastguard Worker FLOAT64 max_sample_val; 85*15dc779aSAndroid Build Coastguard Worker WORD32 sample_rate_idx; 86*15dc779aSAndroid Build Coastguard Worker } ixheaace_loudness_struct; 87*15dc779aSAndroid Build Coastguard Worker 88*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaace_loudness_init_params(pVOID loudness_handle, 89*15dc779aSAndroid Build Coastguard Worker ixheaace_input_config *pstr_input_config, 90*15dc779aSAndroid Build Coastguard Worker ixheaace_output_config *pstr_output_config); 91*15dc779aSAndroid Build Coastguard Worker 92*15dc779aSAndroid Build Coastguard Worker FLOAT64 ixheaace_measure_loudness(pVOID loudness_handle, WORD16 **samples); 93*15dc779aSAndroid Build Coastguard Worker 94*15dc779aSAndroid Build Coastguard Worker FLOAT64 ixheaace_measure_integrated_loudness(pVOID loudness_handle); 95*15dc779aSAndroid Build Coastguard Worker 96*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaace_loudness_info_get_handle_size(); 97*15dc779aSAndroid Build Coastguard Worker 98*15dc779aSAndroid Build Coastguard Worker FLOAT32 ixheaace_measure_sample_peak_value(pVOID loudness_handle);