blob: 2ec601010f47aa0ed86d3ad16c14ea97dbdb3310 [file] [log] [blame]
/******************************************************************************
* *
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*****************************************************************************
* Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
*/
#ifndef IXHEAACD_MPS_DECOR_H
#define IXHEAACD_MPS_DECOR_H
#define DECOR_ALPHA (0.8f)
#define ONE_MINUS_DECOR_ALPHA (1 - DECOR_ALPHA)
#define DECOR_GAMMA (1.5f)
#define DUCK_ALPHA (26214)
#define DUCK_GAMMA (24576)
#define DUCK_ONEMINUSALPHA (6554)
enum {
REVERB_BAND_0 = 0,
REVERB_BAND_1 = 1,
REVERB_BAND_2 = 2,
REVERB_BAND_3 = 3
};
enum { DECOR_CONFIG_0 = 0, DECOR_CONFIG_1 = 1, DECOR_CONFIG_2 = 2 };
struct ia_mps_dec_ducker_interface {
VOID(*apply)
(ia_mps_dec_ducker_interface *const self, WORD32 const time_slots,
WORD32 const *input_real, WORD32 const *input_imag, WORD32 *output_real,
WORD32 *output_imag, ia_mps_dec_mps_tables_struct *ia_mps_dec_mps_table_ptr,
VOID *scratch);
};
typedef struct {
WORD32 hybrid_bands;
WORD32 parameter_bands;
WORD32 alpha;
WORD32 one_minus_alpha;
WORD32 gamma;
WORD32 abs_thr;
WORD16 qalpha;
WORD16 qgamma;
WORD32 smooth_direct_nrg[MAX_PARAMETER_BANDS];
WORD32 smooth_reverb_nrg[MAX_PARAMETER_BANDS];
WORD16 q_smooth_direct_nrg[MAX_PARAMETER_BANDS];
WORD16 q_smooth_reverb_nrg[MAX_PARAMETER_BANDS];
} ia_mps_dec_duck_instance_struct;
VOID ixheaacd_decorr_apply(ia_heaac_mps_state_struct *pstr_mps_state, WORD32 length,
WORD32 *input_real, WORD32 *input_imag,
WORD32 *output_real, WORD32 *output_imag,
WORD32 index);
WORD32 ixheaacd_decorr_create(
ia_mps_dec_decorr_dec_handle hDecorrDec, WORD32 subbands, WORD32 seed,
WORD32 dec_type, WORD32 decorr_config,
ia_mps_dec_mps_tables_struct *ia_mps_dec_mps_table);
IA_ERRORCODE ixheaacd_mps_decor_init(ia_mps_decor_struct *, WORD32, WORD32, WORD32);
VOID ixheaacd_mps_decor_apply(
ia_mps_decor_struct *self,
ia_cmplx_flt_struct in[MAX_TIME_SLOTS][MAX_HYBRID_BANDS_MPS],
ia_cmplx_flt_struct out[MAX_TIME_SLOTS][MAX_HYBRID_BANDS_MPS],
WORD32 length, WORD32 res_bands, WORD32 ldmps_present);
#endif /* IXHEAACD_MPS_DECOR_H */