151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick/******************************************************************************
24908247643e9e97852e847c00bfe7c4259279538Ray Essick *
34908247643e9e97852e847c00bfe7c4259279538Ray Essick * Copyright (C) 2015 The Android Open Source Project
44908247643e9e97852e847c00bfe7c4259279538Ray Essick *
54908247643e9e97852e847c00bfe7c4259279538Ray Essick * Licensed under the Apache License, Version 2.0 (the "License");
64908247643e9e97852e847c00bfe7c4259279538Ray Essick * you may not use this file except in compliance with the License.
74908247643e9e97852e847c00bfe7c4259279538Ray Essick * You may obtain a copy of the License at:
84908247643e9e97852e847c00bfe7c4259279538Ray Essick *
94908247643e9e97852e847c00bfe7c4259279538Ray Essick * http://www.apache.org/licenses/LICENSE-2.0
104908247643e9e97852e847c00bfe7c4259279538Ray Essick *
114908247643e9e97852e847c00bfe7c4259279538Ray Essick * Unless required by applicable law or agreed to in writing, software
124908247643e9e97852e847c00bfe7c4259279538Ray Essick * distributed under the License is distributed on an "AS IS" BASIS,
134908247643e9e97852e847c00bfe7c4259279538Ray Essick * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
144908247643e9e97852e847c00bfe7c4259279538Ray Essick * See the License for the specific language governing permissions and
154908247643e9e97852e847c00bfe7c4259279538Ray Essick * limitations under the License.
164908247643e9e97852e847c00bfe7c4259279538Ray Essick *
1751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick *****************************************************************************
184908247643e9e97852e847c00bfe7c4259279538Ray Essick * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
194908247643e9e97852e847c00bfe7c4259279538Ray Essick*/
2051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#ifndef IMPD_DRC_UNI_TABLES_H
2151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#define IMPD_DRC_UNI_TABLES_H
2251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
2351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#ifdef __cplusplus
24b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuriextern "C" {
2551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#endif
2651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
27b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri#define N_DELTA_TIME_CODE_TABLE_ENTRIES_MAX (512 + 14)
2851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
2951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essicktypedef struct {
30b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri  WORD32 size;
31b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri  WORD32 code;
32b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri  WORD32 value;
3351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} ia_delta_time_code_table_entry_struct;
3451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
3551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essicktypedef struct {
36b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri  WORD32 size;
37b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri  WORD32 code;
38b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri  FLOAT32 value;
39b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri  WORD32 index;
4051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} ia_slope_code_table_struct;
4151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
4251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essicktypedef struct {
43b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri  WORD32 size;
44b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri  WORD32 code;
45b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri  FLOAT32 value;
4651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} ia_delta_gain_code_table_struct;
4751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
4851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essicktypedef struct {
49b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri  ia_delta_time_code_table_entry_struct
50b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri      delta_time_code_table[N_DELTA_TIME_CODE_TABLE_ENTRIES_MAX];
5151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} ia_tables_struct;
524908247643e9e97852e847c00bfe7c4259279538Ray Essick
5351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essicktypedef struct {
54b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri  FLOAT32 in_out_ratio;
55b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri  FLOAT32 exp_lo;
56b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri  FLOAT32 exp_hi;
5751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} ia_cicp_sigmoid_characteristic_param_struct;
5851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
5951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essicktypedef struct {
60b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri  FLOAT32 inLevel;
61b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri  FLOAT32 gain;
6251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} ia_characteristic_node_coordinate_struct;
6351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
6451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essicktypedef struct {
65b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri  WORD32 coordinateCount;
66b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri  ia_characteristic_node_coordinate_struct characteristicNodeCoordinate[5];
6751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick} ia_cicp_node_characteristic_param;
684908247643e9e97852e847c00bfe7c4259279538Ray Essick
6951aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickWORD32
70b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuriimpd_init_tbls(const WORD32 num_gain_max_values, ia_tables_struct* str_tables);
7151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
72b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katurivoid impd_gen_delta_time_code_tbl(
73b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri    const WORD32 num_gain_max_values,
74b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri    ia_delta_time_code_table_entry_struct* delta_time_code_tbl_item);
7551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
76b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katurivoid impd_get_delta_gain_code_tbl(
77b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri    const WORD32 gain_coding_profile,
78b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri    ia_delta_gain_code_table_struct const** delta_time_code_tbl,
79b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri    WORD32* num_entries);
8051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
81b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katurivoid impd_get_slope_code_tbl_and_size(
82b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri    ia_slope_code_table_struct const** slope_code_tbl_entry,
83b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuri    WORD32* num_slope_code_tbl_entries);
8451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
8551aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickWORD32
86b3226ce6f80c78946aa3190cec158fb9852272eaRamesh Katuriimpd_get_delta_tmin(const WORD32 sampling_rate);
8751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
8851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#ifdef __cplusplus
8951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick}
9051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#endif
9151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick#endif
92