// SPDX-License-Identifier: MIT // // Copyright 2024 Advanced Micro Devices, Inc. #include "spl_debug.h" #include "dc_spl_filters.h" #include "dc_spl_scl_filters.h" #include "dc_spl_scl_easf_filters.h" //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 03-Apr-2024 // <coeffDescrip> 3t_64p_LanczosEd_p_0.3_p_10qb_ // <num_taps> 3 // <num_phases> 64 // <scale_ratio> input/output = 0.300000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_3tap_64p_ratio_0_30[99] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 03-Apr-2024 // <coeffDescrip> 3t_64p_LanczosEd_p_0.4_p_10qb_ // <num_taps> 3 // <num_phases> 64 // <scale_ratio> input/output = 0.400000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_3tap_64p_ratio_0_40[99] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 03-Apr-2024 // <coeffDescrip> 3t_64p_LanczosEd_p_0.5_p_10qb_ // <num_taps> 3 // <num_phases> 64 // <scale_ratio> input/output = 0.500000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_3tap_64p_ratio_0_50[99] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 03-Apr-2024 // <coeffDescrip> 3t_64p_LanczosEd_p_0.6_p_10qb_ // <num_taps> 3 // <num_phases> 64 // <scale_ratio> input/output = 0.600000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_3tap_64p_ratio_0_60[99] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 03-Apr-2024 // <coeffDescrip> 3t_64p_LanczosEd_p_0.7_p_10qb_ // <num_taps> 3 // <num_phases> 64 // <scale_ratio> input/output = 0.700000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_3tap_64p_ratio_0_70[99] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 03-Apr-2024 // <coeffDescrip> 3t_64p_LanczosEd_p_0.8_p_10qb_ // <num_taps> 3 // <num_phases> 64 // <scale_ratio> input/output = 0.800000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_3tap_64p_ratio_0_80[99] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 03-Apr-2024 // <coeffDescrip> 3t_64p_LanczosEd_p_0.9_p_10qb_ // <num_taps> 3 // <num_phases> 64 // <scale_ratio> input/output = 0.900000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_3tap_64p_ratio_0_90[99] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 03-Apr-2024 // <coeffDescrip> 3t_64p_LanczosEd_p_1_p_10qb_ // <num_taps> 3 // <num_phases> 64 // <scale_ratio> input/output = 1.000000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_3tap_64p_ratio_1_00[99] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 03-Apr-2024 // <coeffDescrip> 4t_64p_LanczosEd_p_0.3_p_10qb_ // <num_taps> 4 // <num_phases> 64 // <scale_ratio> input/output = 0.300000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_4tap_64p_ratio_0_30[132] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 03-Apr-2024 // <coeffDescrip> 4t_64p_LanczosEd_p_0.4_p_10qb_ // <num_taps> 4 // <num_phases> 64 // <scale_ratio> input/output = 0.400000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_4tap_64p_ratio_0_40[132] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 03-Apr-2024 // <coeffDescrip> 4t_64p_LanczosEd_p_0.5_p_10qb_ // <num_taps> 4 // <num_phases> 64 // <scale_ratio> input/output = 0.500000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_4tap_64p_ratio_0_50[132] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 03-Apr-2024 // <coeffDescrip> 4t_64p_LanczosEd_p_0.6_p_10qb_ // <num_taps> 4 // <num_phases> 64 // <scale_ratio> input/output = 0.600000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_4tap_64p_ratio_0_60[132] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 03-Apr-2024 // <coeffDescrip> 4t_64p_LanczosEd_p_0.7_p_10qb_ // <num_taps> 4 // <num_phases> 64 // <scale_ratio> input/output = 0.700000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_4tap_64p_ratio_0_70[132] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 03-Apr-2024 // <coeffDescrip> 4t_64p_LanczosEd_p_0.8_p_10qb_ // <num_taps> 4 // <num_phases> 64 // <scale_ratio> input/output = 0.800000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_4tap_64p_ratio_0_80[132] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 03-Apr-2024 // <coeffDescrip> 4t_64p_LanczosEd_p_0.9_p_10qb_ // <num_taps> 4 // <num_phases> 64 // <scale_ratio> input/output = 0.900000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_4tap_64p_ratio_0_90[132] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 03-Apr-2024 // <coeffDescrip> 4t_64p_LanczosEd_p_1_p_10qb_ // <num_taps> 4 // <num_phases> 64 // <scale_ratio> input/output = 1.000000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_4tap_64p_ratio_1_00[132] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 02-Apr-2024 // <coeffDescrip> 6t_64p_LanczosEd_p_0.3_p_10qb_ // <num_taps> 6 // <num_phases> 64 // <scale_ratio> input/output = 0.300000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_6tap_64p_ratio_0_30[198] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 02-Apr-2024 // <coeffDescrip> 6t_64p_LanczosEd_p_0.4_p_10qb_ // <num_taps> 6 // <num_phases> 64 // <scale_ratio> input/output = 0.400000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_6tap_64p_ratio_0_40[198] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 02-Apr-2024 // <coeffDescrip> 6t_64p_LanczosEd_p_0.5_p_10qb_ // <num_taps> 6 // <num_phases> 64 // <scale_ratio> input/output = 0.500000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_6tap_64p_ratio_0_50[198] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 02-Apr-2024 // <coeffDescrip> 6t_64p_LanczosEd_p_0.6_p_10qb_ // <num_taps> 6 // <num_phases> 64 // <scale_ratio> input/output = 0.600000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_6tap_64p_ratio_0_60[198] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 02-Apr-2024 // <coeffDescrip> 6t_64p_LanczosEd_p_0.7_p_10qb_ // <num_taps> 6 // <num_phases> 64 // <scale_ratio> input/output = 0.700000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_6tap_64p_ratio_0_70[198] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 02-Apr-2024 // <coeffDescrip> 6t_64p_LanczosEd_p_0.8_p_10qb_ // <num_taps> 6 // <num_phases> 64 // <scale_ratio> input/output = 0.800000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_6tap_64p_ratio_0_80[198] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 02-Apr-2024 // <coeffDescrip> 6t_64p_LanczosEd_p_0.9_p_10qb_ // <num_taps> 6 // <num_phases> 64 // <scale_ratio> input/output = 0.900000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_6tap_64p_ratio_0_90[198] = …; //======================================================== // <using> gen_scaler_coeffs_cnf_file.m // <using> make_test_script.m // <date> 02-Apr-2024 // <coeffDescrip> 6t_64p_LanczosEd_p_1_p_10qb_ // <num_taps> 6 // <num_phases> 64 // <scale_ratio> input/output = 1.000000000000 // <CoefType> LanczosEd // <CoefQuant> S1.10 //======================================================== static const uint16_t easf_filter_6tap_64p_ratio_1_00[198] = …; /* Converted scaler coeff tables from S1.10 to S1.12 */ static uint16_t easf_filter_3tap_64p_ratio_0_30_s1_12[99]; static uint16_t easf_filter_3tap_64p_ratio_0_40_s1_12[99]; static uint16_t easf_filter_3tap_64p_ratio_0_50_s1_12[99]; static uint16_t easf_filter_3tap_64p_ratio_0_60_s1_12[99]; static uint16_t easf_filter_3tap_64p_ratio_0_70_s1_12[99]; static uint16_t easf_filter_3tap_64p_ratio_0_80_s1_12[99]; static uint16_t easf_filter_3tap_64p_ratio_0_90_s1_12[99]; static uint16_t easf_filter_3tap_64p_ratio_1_00_s1_12[99]; static uint16_t easf_filter_4tap_64p_ratio_0_30_s1_12[132]; static uint16_t easf_filter_4tap_64p_ratio_0_40_s1_12[132]; static uint16_t easf_filter_4tap_64p_ratio_0_50_s1_12[132]; static uint16_t easf_filter_4tap_64p_ratio_0_60_s1_12[132]; static uint16_t easf_filter_4tap_64p_ratio_0_70_s1_12[132]; static uint16_t easf_filter_4tap_64p_ratio_0_80_s1_12[132]; static uint16_t easf_filter_4tap_64p_ratio_0_90_s1_12[132]; static uint16_t easf_filter_4tap_64p_ratio_1_00_s1_12[132]; static uint16_t easf_filter_6tap_64p_ratio_0_30_s1_12[198]; static uint16_t easf_filter_6tap_64p_ratio_0_40_s1_12[198]; static uint16_t easf_filter_6tap_64p_ratio_0_50_s1_12[198]; static uint16_t easf_filter_6tap_64p_ratio_0_60_s1_12[198]; static uint16_t easf_filter_6tap_64p_ratio_0_70_s1_12[198]; static uint16_t easf_filter_6tap_64p_ratio_0_80_s1_12[198]; static uint16_t easf_filter_6tap_64p_ratio_0_90_s1_12[198]; static uint16_t easf_filter_6tap_64p_ratio_1_00_s1_12[198]; struct scale_ratio_to_reg_value_lookup easf_v_bf3_mode_lookup[] = …; struct scale_ratio_to_reg_value_lookup easf_h_bf3_mode_lookup[] = …; struct scale_ratio_to_reg_value_lookup easf_reducer_gain6_6tap_lookup[] = …; struct scale_ratio_to_reg_value_lookup easf_reducer_gain4_6tap_lookup[] = …; struct scale_ratio_to_reg_value_lookup easf_gain_ring6_6tap_lookup[] = …; struct scale_ratio_to_reg_value_lookup easf_gain_ring4_6tap_lookup[] = …; struct scale_ratio_to_reg_value_lookup easf_reducer_gain6_4tap_lookup[] = …; struct scale_ratio_to_reg_value_lookup easf_reducer_gain4_4tap_lookup[] = …; struct scale_ratio_to_reg_value_lookup easf_gain_ring6_4tap_lookup[] = …; struct scale_ratio_to_reg_value_lookup easf_gain_ring4_4tap_lookup[] = …; struct scale_ratio_to_reg_value_lookup easf_3tap_dntilt_uptilt_offset_lookup[] = …; struct scale_ratio_to_reg_value_lookup easf_3tap_uptilt_maxval_lookup[] = …; struct scale_ratio_to_reg_value_lookup easf_3tap_dntilt_slope_lookup[] = …; struct scale_ratio_to_reg_value_lookup easf_3tap_uptilt1_slope_lookup[] = …; struct scale_ratio_to_reg_value_lookup easf_3tap_uptilt2_slope_lookup[] = …; struct scale_ratio_to_reg_value_lookup easf_3tap_uptilt2_offset_lookup[] = …; void spl_init_easf_filter_coeffs(void) { … } uint16_t *spl_get_easf_filter_3tap_64p(struct spl_fixed31_32 ratio) { … } uint16_t *spl_get_easf_filter_4tap_64p(struct spl_fixed31_32 ratio) { … } uint16_t *spl_get_easf_filter_6tap_64p(struct spl_fixed31_32 ratio) { … } uint16_t *spl_dscl_get_easf_filter_coeffs_64p(int taps, struct spl_fixed31_32 ratio) { … } void spl_set_filters_data(struct dscl_prog_data *dscl_prog_data, const struct spl_scaler_data *data, bool enable_easf_v, bool enable_easf_h) { … } static uint32_t spl_easf_get_scale_ratio_to_reg_value(struct spl_fixed31_32 ratio, struct scale_ratio_to_reg_value_lookup *lookup_table_base_ptr, unsigned int num_entries) { … } uint32_t spl_get_v_bf3_mode(struct spl_fixed31_32 ratio) { … } uint32_t spl_get_h_bf3_mode(struct spl_fixed31_32 ratio) { … } uint32_t spl_get_reducer_gain6(int taps, struct spl_fixed31_32 ratio) { … } uint32_t spl_get_reducer_gain4(int taps, struct spl_fixed31_32 ratio) { … } uint32_t spl_get_gainRing6(int taps, struct spl_fixed31_32 ratio) { … } uint32_t spl_get_gainRing4(int taps, struct spl_fixed31_32 ratio) { … } uint32_t spl_get_3tap_dntilt_uptilt_offset(int taps, struct spl_fixed31_32 ratio) { … } uint32_t spl_get_3tap_uptilt_maxval(int taps, struct spl_fixed31_32 ratio) { … } uint32_t spl_get_3tap_dntilt_slope(int taps, struct spl_fixed31_32 ratio) { … } uint32_t spl_get_3tap_uptilt1_slope(int taps, struct spl_fixed31_32 ratio) { … } uint32_t spl_get_3tap_uptilt2_slope(int taps, struct spl_fixed31_32 ratio) { … } uint32_t spl_get_3tap_uptilt2_offset(int taps, struct spl_fixed31_32 ratio) { … }