Home | History | Annotate | Download | only in drc_src
      1 /******************************************************************************
      2  *
      3  * Copyright (C) 2018 The Android Open Source Project
      4  *
      5  * Licensed under the Apache License, Version 2.0 (the "License");
      6  * you may not use this file except in compliance with the License.
      7  * You may obtain a copy of the License at:
      8  *
      9  * http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  * Unless required by applicable law or agreed to in writing, software
     12  * distributed under the License is distributed on an "AS IS" BASIS,
     13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  * See the License for the specific language governing permissions and
     15  * limitations under the License.
     16  *
     17  *****************************************************************************
     18  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
     19 */
     20 #ifndef IMPD_DRC_SEL_PROC_DRC_SET_SEL_H
     21 #define IMPD_DRC_SEL_PROC_DRC_SET_SEL_H
     22 
     23 #ifdef __cplusplus
     24 extern "C" {
     25 #endif /* __cplusplus */
     26 
     27 #define SELECTION_FLAG_DRC_TARGET_LOUDNESS_MATCH (1 << 0)
     28 #define SELECTION_FLAG_EXPLICIT_PEAK_INFO_PRESENT (1 << 1)
     29 
     30 typedef struct {
     31   WORD32 drc_instructions_index;
     32   WORD32 downmix_id_request_index;
     33   WORD32 eq_set_id;
     34   FLOAT32 output_peak_level;
     35   FLOAT32 loudness_norm_db_gain_adjusted;
     36   FLOAT32 output_loudness;
     37   FLOAT32 mixing_level;
     38   WORD32 selection_flags;
     39 } ia_selection_candidate_info_struct;
     40 
     41 WORD32
     42 impd_validate_requested_drc_feature(
     43     ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct);
     44 
     45 WORD32
     46 impd_map_requested_effect_bit_idx(WORD32 requested_effect_type,
     47                                   WORD32* effect_bit_idx);
     48 
     49 WORD32
     50 impd_get_fading_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc);
     51 
     52 WORD32
     53 impd_get_ducking_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc);
     54 
     55 WORD32
     56 impd_get_selected_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
     57                           WORD32 drc_set_id_selected);
     58 
     59 WORD32
     60 impd_get_dependent_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc);
     61 
     62 WORD32
     63 impd_get_dependent_drc_instructions(
     64     const ia_drc_config* drc_config,
     65     const ia_drc_instructions_struct* str_drc_instruction_str,
     66     ia_drc_instructions_struct** ppstr_drc_instructions_dependent);
     67 
     68 WORD32
     69 impd_manage_drc_complexity(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
     70                            ia_drc_config* pstr_drc_config);
     71 
     72 WORD32
     73 impd_manage_eq_complexity(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
     74                           ia_drc_config* pstr_drc_config);
     75 
     76 WORD32
     77 impd_manage_complexity(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
     78                        ia_drc_config* pstr_drc_config,
     79                        WORD32* repeat_selection);
     80 
     81 WORD32
     82 impd_get_selected_eq_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
     83                          WORD32 eq_set_id_selected);
     84 WORD32
     85 impd_get_dependent_eq_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc);
     86 
     87 WORD32
     88 impd_get_selected_loud_eq_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
     89                               WORD32 loudEqSetIdSelected);
     90 
     91 WORD32
     92 impd_select_drcs_without_compr_effects(
     93     ia_drc_config* pstr_drc_config, WORD32* match_found_flag,
     94     WORD32* selection_candidate_count,
     95     ia_selection_candidate_info_struct* selection_candidate_info);
     96 
     97 WORD32
     98 impd_match_effect_type_attempt(
     99     ia_drc_config* pstr_drc_config, WORD32 requested_effect_type,
    100     WORD32 stateRequested, WORD32* match_found_flag,
    101     WORD32* selection_candidate_count,
    102     ia_selection_candidate_info_struct* selection_candidate_info);
    103 
    104 WORD32
    105 impd_match_effect_types(
    106     ia_drc_config* pstr_drc_config, WORD32 total_effect_type_requested,
    107     WORD32 desired_effect_type_requested, WORD32* requested_effect_type,
    108     WORD32* selection_candidate_count,
    109     ia_selection_candidate_info_struct* selection_candidate_info);
    110 
    111 WORD32 impd_match_dynamic_range(
    112     ia_drc_config* pstr_drc_config,
    113     ia_drc_loudness_info_set_struct* pstr_loudness_info,
    114     ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
    115     WORD32 num_drc_requests, WORD32* selection_candidate_count,
    116     ia_selection_candidate_info_struct* selection_candidate_info);
    117 
    118 WORD32
    119 impd_match_drc_characteristic_attempt(
    120     ia_drc_config* pstr_drc_config, WORD32 requested_drc_characteristic,
    121     WORD32* match_found_flag, WORD32* selection_candidate_count,
    122     ia_selection_candidate_info_struct* selection_candidate_info);
    123 
    124 WORD32
    125 impd_match_drc_characteristic(
    126     ia_drc_config* pstr_drc_config, WORD32 requested_drc_characteristic,
    127     WORD32* selection_candidate_count,
    128     ia_selection_candidate_info_struct* selection_candidate_info);
    129 
    130 VOID impd_select_drc_coeff3(
    131     ia_drc_config* drc_config,
    132     ia_uni_drc_coeffs_struct** str_p_loc_drc_coefficients_uni_drc);
    133 
    134 WORD32
    135 impd_drc_set_preselection(
    136     ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
    137     ia_drc_config* pstr_drc_config,
    138     ia_drc_loudness_info_set_struct* pstr_loudness_info,
    139     WORD32 restrict_to_drc_with_album_loudness,
    140     ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
    141     WORD32* selection_candidate_count,
    142     ia_selection_candidate_info_struct* selection_candidate_info);
    143 
    144 WORD32 impd_drc_set_final_selection(
    145     ia_drc_config* pstr_drc_config,
    146     ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct,
    147     WORD32* selection_candidate_count,
    148     ia_selection_candidate_info_struct* selection_candidate_info,
    149     WORD32* eq_set_id_valid_flag);
    150 
    151 WORD32 impd_match_eq_set_purpose(
    152     ia_drc_config* drc_config, WORD32 eq_set_purpose_requested,
    153     WORD32* eq_set_id_valid_flag, WORD32* selection_candidate_count,
    154     ia_selection_candidate_info_struct* selection_candidate_info,
    155     ia_selection_candidate_info_struct* selection_candidate_info_step_2);
    156 
    157 WORD32
    158 impd_select_drc_set(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
    159                     WORD32* drc_set_id_selected, WORD32* eq_set_id_selected,
    160                     WORD32* loud_eq_id_sel);
    161 
    162 WORD32
    163 impd_drc_sel_proc_init_dflt(ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc);
    164 
    165 WORD32
    166 impd_drc_sel_proc_init_sel_proc_params(
    167     ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
    168     ia_drc_sel_proc_params_struct* pstr_drc_sel_proc_params_struct);
    169 
    170 WORD32
    171 impd_drc_sel_proc_init_interface_params(
    172     ia_drc_sel_pro_struct* pstr_drc_uni_sel_proc,
    173     ia_drc_interface_struct* pstr_drc_interface);
    174 
    175 #ifdef __cplusplus
    176 }
    177 #endif /* __cplusplus */
    178 
    179 #endif
    180