1*c83a76b0SSuyog Pawar /****************************************************************************** 2*c83a76b0SSuyog Pawar * 3*c83a76b0SSuyog Pawar * Copyright (C) 2018 The Android Open Source Project 4*c83a76b0SSuyog Pawar * 5*c83a76b0SSuyog Pawar * Licensed under the Apache License, Version 2.0 (the "License"); 6*c83a76b0SSuyog Pawar * you may not use this file except in compliance with the License. 7*c83a76b0SSuyog Pawar * You may obtain a copy of the License at: 8*c83a76b0SSuyog Pawar * 9*c83a76b0SSuyog Pawar * http://www.apache.org/licenses/LICENSE-2.0 10*c83a76b0SSuyog Pawar * 11*c83a76b0SSuyog Pawar * Unless required by applicable law or agreed to in writing, software 12*c83a76b0SSuyog Pawar * distributed under the License is distributed on an "AS IS" BASIS, 13*c83a76b0SSuyog Pawar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*c83a76b0SSuyog Pawar * See the License for the specific language governing permissions and 15*c83a76b0SSuyog Pawar * limitations under the License. 16*c83a76b0SSuyog Pawar * 17*c83a76b0SSuyog Pawar ***************************************************************************** 18*c83a76b0SSuyog Pawar * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*c83a76b0SSuyog Pawar */ 20*c83a76b0SSuyog Pawar /** 21*c83a76b0SSuyog Pawar ******************************************************************************* 22*c83a76b0SSuyog Pawar * @file 23*c83a76b0SSuyog Pawar * ihevc_quant_iquant_ssd.h 24*c83a76b0SSuyog Pawar * 25*c83a76b0SSuyog Pawar * @brief 26*c83a76b0SSuyog Pawar * Functions declarations for quantization, followed by Inverse 27*c83a76b0SSuyog Pawar * quantization to find transform domain SSD 28*c83a76b0SSuyog Pawar * 29*c83a76b0SSuyog Pawar * @author 30*c83a76b0SSuyog Pawar * Ittiam 31*c83a76b0SSuyog Pawar * 32*c83a76b0SSuyog Pawar * @remarks 33*c83a76b0SSuyog Pawar * None 34*c83a76b0SSuyog Pawar * 35*c83a76b0SSuyog Pawar ******************************************************************************* 36*c83a76b0SSuyog Pawar */ 37*c83a76b0SSuyog Pawar 38*c83a76b0SSuyog Pawar 39*c83a76b0SSuyog Pawar #ifndef _IHEVC_QUANT_IQUANT_SSD_H_ 40*c83a76b0SSuyog Pawar #define _IHEVC_QUANT_IQUANT_SSD_H_ 41*c83a76b0SSuyog Pawar 42*c83a76b0SSuyog Pawar typedef WORD32 ihevc_quant_iquant_ssd_ft 43*c83a76b0SSuyog Pawar ( 44*c83a76b0SSuyog Pawar WORD16 *pi2_coeffs, 45*c83a76b0SSuyog Pawar WORD16 *pi2_quant_coeff, 46*c83a76b0SSuyog Pawar WORD16 *pi2_q_dst, 47*c83a76b0SSuyog Pawar WORD16 *pi2_iq_dst, 48*c83a76b0SSuyog Pawar WORD32 trans_size, 49*c83a76b0SSuyog Pawar WORD32 qp_div,/* qpscaled / 6 */ 50*c83a76b0SSuyog Pawar WORD32 qp_rem,/* qpscaled % 6 */ 51*c83a76b0SSuyog Pawar WORD32 q_add, 52*c83a76b0SSuyog Pawar WORD32 *pi4_quant_round_factor_0_1, 53*c83a76b0SSuyog Pawar WORD32 *pi4_quant_round_factor_1_2, 54*c83a76b0SSuyog Pawar WORD32 src_strd, 55*c83a76b0SSuyog Pawar WORD32 dst_q_strd, 56*c83a76b0SSuyog Pawar WORD32 dst_iq_strd, 57*c83a76b0SSuyog Pawar UWORD8 *csbf, 58*c83a76b0SSuyog Pawar WORD32 csbf_strd, 59*c83a76b0SSuyog Pawar WORD32 *zero_col, 60*c83a76b0SSuyog Pawar WORD32 *zero_row, 61*c83a76b0SSuyog Pawar WORD16 *pi2_dequant_coeff, 62*c83a76b0SSuyog Pawar LWORD64 *pi8_cost 63*c83a76b0SSuyog Pawar ); 64*c83a76b0SSuyog Pawar 65*c83a76b0SSuyog Pawar typedef ihevc_quant_iquant_ssd_ft ihevc_quant_iquant_ssd_rdoq_ft; 66*c83a76b0SSuyog Pawar 67*c83a76b0SSuyog Pawar typedef ihevc_quant_iquant_ssd_ft ihevc_quant_iquant_ssd_flat_scale_mat_ft; 68*c83a76b0SSuyog Pawar 69*c83a76b0SSuyog Pawar typedef ihevc_quant_iquant_ssd_ft ihevc_quant_iquant_ssd_flat_scale_mat_rdoq_ft; 70*c83a76b0SSuyog Pawar 71*c83a76b0SSuyog Pawar typedef ihevc_quant_iquant_ssd_ft ihevc_q_iq_ssd_flat_scale_mat_var_rnd_fact_ft; 72*c83a76b0SSuyog Pawar 73*c83a76b0SSuyog Pawar typedef ihevc_quant_iquant_ssd_ft ihevc_q_iq_ssd_var_rnd_fact_ft; 74*c83a76b0SSuyog Pawar 75*c83a76b0SSuyog Pawar typedef WORD32 ihevc_hbd_quant_iquant_ssd_ft 76*c83a76b0SSuyog Pawar ( 77*c83a76b0SSuyog Pawar WORD16 *pi2_coeffs, 78*c83a76b0SSuyog Pawar WORD16 *pi2_quant_coeff, 79*c83a76b0SSuyog Pawar WORD16 *pi2_q_dst, 80*c83a76b0SSuyog Pawar WORD16 *pi2_iq_dst, 81*c83a76b0SSuyog Pawar WORD32 trans_size, 82*c83a76b0SSuyog Pawar WORD32 qp_div,/* qpscaled / 6 */ 83*c83a76b0SSuyog Pawar WORD32 qp_rem,/* qpscaled % 6 */ 84*c83a76b0SSuyog Pawar WORD32 q_add, 85*c83a76b0SSuyog Pawar WORD32 *pi4_quant_round_factor_0_1, 86*c83a76b0SSuyog Pawar WORD32 *pi4_quant_round_factor_1_2, 87*c83a76b0SSuyog Pawar WORD32 src_strd, 88*c83a76b0SSuyog Pawar WORD32 dst_q_strd, 89*c83a76b0SSuyog Pawar WORD32 dst_iq_strd, 90*c83a76b0SSuyog Pawar UWORD8 *csbf, 91*c83a76b0SSuyog Pawar WORD32 csbf_strd, 92*c83a76b0SSuyog Pawar WORD32 *zero_col, 93*c83a76b0SSuyog Pawar WORD32 *zero_row, 94*c83a76b0SSuyog Pawar WORD16 *pi2_dequant_coeff, 95*c83a76b0SSuyog Pawar LWORD64 *pi8_cost, 96*c83a76b0SSuyog Pawar WORD32 i4_bit_depth 97*c83a76b0SSuyog Pawar ); 98*c83a76b0SSuyog Pawar 99*c83a76b0SSuyog Pawar 100*c83a76b0SSuyog Pawar typedef ihevc_hbd_quant_iquant_ssd_ft ihevc_hbd_quant_iquant_ssd_rdoq_ft; 101*c83a76b0SSuyog Pawar 102*c83a76b0SSuyog Pawar typedef ihevc_hbd_quant_iquant_ssd_ft ihevc_hbd_quant_iquant_ssd_flat_scale_mat_ft; 103*c83a76b0SSuyog Pawar 104*c83a76b0SSuyog Pawar typedef ihevc_hbd_quant_iquant_ssd_ft ihevc_hbd_quant_iquant_ssd_flat_scale_mat_rdoq_ft; 105*c83a76b0SSuyog Pawar 106*c83a76b0SSuyog Pawar typedef ihevc_hbd_quant_iquant_ssd_ft ihevc_hbd_q_iq_ssd_flat_scale_mat_var_rnd_fact_ft; 107*c83a76b0SSuyog Pawar 108*c83a76b0SSuyog Pawar typedef ihevc_hbd_quant_iquant_ssd_ft ihevc_hbd_q_iq_ssd_var_rnd_fact_ft; 109*c83a76b0SSuyog Pawar 110*c83a76b0SSuyog Pawar /* C function declarations */ 111*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_ft ihevc_quant_iquant_ssd; 112*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_rdoq_ft ihevc_quant_iquant_ssd_rdoq; 113*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_flat_scale_mat_ft ihevc_quant_iquant_ssd_flat_scale_mat; 114*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_flat_scale_mat_rdoq_ft ihevc_quant_iquant_ssd_flat_scale_mat_rdoq; 115*c83a76b0SSuyog Pawar ihevc_q_iq_ssd_var_rnd_fact_ft ihevc_q_iq_ssd_var_rnd_fact; 116*c83a76b0SSuyog Pawar ihevc_q_iq_ssd_flat_scale_mat_var_rnd_fact_ft ihevc_q_iq_ssd_flat_scale_mat_var_rnd_fact; 117*c83a76b0SSuyog Pawar 118*c83a76b0SSuyog Pawar ihevc_hbd_quant_iquant_ssd_ft ihevc_hbd_quant_iquant_ssd; 119*c83a76b0SSuyog Pawar ihevc_hbd_quant_iquant_ssd_rdoq_ft ihevc_hbd_quant_iquant_ssd_rdoq; 120*c83a76b0SSuyog Pawar ihevc_hbd_quant_iquant_ssd_flat_scale_mat_ft ihevc_hbd_quant_iquant_ssd_flat_scale_mat; 121*c83a76b0SSuyog Pawar ihevc_hbd_quant_iquant_ssd_flat_scale_mat_rdoq_ft ihevc_hbd_quant_iquant_ssd_flat_scale_mat_rdoq; 122*c83a76b0SSuyog Pawar ihevc_hbd_q_iq_ssd_var_rnd_fact_ft ihevc_hbd_q_iq_ssd_var_rnd_fact; 123*c83a76b0SSuyog Pawar ihevc_hbd_q_iq_ssd_flat_scale_mat_var_rnd_fact_ft ihevc_hbd_q_iq_ssd_flat_scale_mat_var_rnd_fact; 124*c83a76b0SSuyog Pawar 125*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_ft ihevc_quant_iquant; 126*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_rdoq_ft ihevc_quant_iquant_rdoq; 127*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_flat_scale_mat_ft ihevc_quant_iquant_flat_scale_mat; 128*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_flat_scale_mat_rdoq_ft ihevc_quant_iquant_flat_scale_mat_rdoq; 129*c83a76b0SSuyog Pawar ihevc_q_iq_ssd_var_rnd_fact_ft ihevc_q_iq_var_rnd_fact; 130*c83a76b0SSuyog Pawar ihevc_q_iq_ssd_flat_scale_mat_var_rnd_fact_ft ihevc_q_iq_flat_scale_mat_var_rnd_fact; 131*c83a76b0SSuyog Pawar 132*c83a76b0SSuyog Pawar ihevc_hbd_quant_iquant_ssd_ft ihevc_hbd_quant_iquant; 133*c83a76b0SSuyog Pawar ihevc_hbd_quant_iquant_ssd_rdoq_ft ihevc_hbd_quant_iquant_rdoq; 134*c83a76b0SSuyog Pawar ihevc_hbd_quant_iquant_ssd_flat_scale_mat_ft ihevc_hbd_quant_iquant_flat_scale_mat; 135*c83a76b0SSuyog Pawar ihevc_hbd_quant_iquant_ssd_flat_scale_mat_rdoq_ft ihevc_hbd_quant_iquant_flat_scale_mat_rdoq; 136*c83a76b0SSuyog Pawar ihevc_hbd_q_iq_ssd_var_rnd_fact_ft ihevc_hbd_q_iq_var_rnd_fact; 137*c83a76b0SSuyog Pawar ihevc_hbd_q_iq_ssd_flat_scale_mat_var_rnd_fact_ft ihevc_hbd_q_iq_flat_scale_mat_var_rnd_fact; 138*c83a76b0SSuyog Pawar 139*c83a76b0SSuyog Pawar /* SSE42 function declarations */ 140*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_flat_scale_mat_ft ihevc_quant_iquant_ssd_flat_scale_mat_sse42; 141*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_flat_scale_mat_rdoq_ft ihevc_quant_iquant_ssd_flat_scale_mat_rdoq_sse42; 142*c83a76b0SSuyog Pawar ihevc_q_iq_ssd_flat_scale_mat_var_rnd_fact_ft ihevc_q_iq_ssd_flat_scale_mat_var_rnd_fact_sse42; 143*c83a76b0SSuyog Pawar 144*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_flat_scale_mat_ft ihevc_quant_iquant_flat_scale_mat_sse42; 145*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_flat_scale_mat_rdoq_ft ihevc_quant_iquant_flat_scale_mat_rdoq_sse42; 146*c83a76b0SSuyog Pawar ihevc_q_iq_ssd_flat_scale_mat_var_rnd_fact_ft ihevc_q_iq_flat_scale_mat_var_rnd_fact_sse42; 147*c83a76b0SSuyog Pawar 148*c83a76b0SSuyog Pawar ihevc_hbd_quant_iquant_ssd_flat_scale_mat_ft ihevc_hbd_quant_iquant_ssd_flat_scale_mat_sse42; 149*c83a76b0SSuyog Pawar ihevc_hbd_quant_iquant_ssd_flat_scale_mat_rdoq_ft ihevc_hbd_quant_iquant_ssd_flat_scale_mat_rdoq_sse42; 150*c83a76b0SSuyog Pawar ihevc_hbd_q_iq_ssd_flat_scale_mat_var_rnd_fact_ft ihevc_hbd_q_iq_ssd_flat_scale_mat_var_rnd_fact_sse42; 151*c83a76b0SSuyog Pawar 152*c83a76b0SSuyog Pawar ihevc_hbd_quant_iquant_ssd_flat_scale_mat_ft ihevc_hbd_quant_iquant_flat_scale_mat_sse42; 153*c83a76b0SSuyog Pawar ihevc_hbd_quant_iquant_ssd_flat_scale_mat_rdoq_ft ihevc_hbd_quant_iquant_flat_scale_mat_rdoq_sse42; 154*c83a76b0SSuyog Pawar ihevc_hbd_q_iq_ssd_flat_scale_mat_var_rnd_fact_ft ihevc_hbd_q_iq_flat_scale_mat_var_rnd_fact_sse42; 155*c83a76b0SSuyog Pawar 156*c83a76b0SSuyog Pawar /* AVX function declarations */ 157*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_flat_scale_mat_ft ihevc_quant_iquant_ssd_flat_scale_mat_avx; 158*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_flat_scale_mat_rdoq_ft ihevc_quant_iquant_ssd_flat_scale_mat_rdoq_avx; 159*c83a76b0SSuyog Pawar ihevc_q_iq_ssd_flat_scale_mat_var_rnd_fact_ft ihevc_q_iq_ssd_flat_scale_mat_var_rnd_fact_avx; 160*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_flat_scale_mat_ft ihevc_quant_iquant_flat_scale_mat_avx; 161*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_flat_scale_mat_rdoq_ft ihevc_quant_iquant_flat_scale_mat_rdoq_avx; 162*c83a76b0SSuyog Pawar ihevc_q_iq_ssd_flat_scale_mat_var_rnd_fact_ft ihevc_q_iq_flat_scale_mat_var_rnd_fact_avx; 163*c83a76b0SSuyog Pawar 164*c83a76b0SSuyog Pawar ihevc_hbd_quant_iquant_ssd_flat_scale_mat_ft ihevc_hbd_quant_iquant_ssd_flat_scale_mat_avx; 165*c83a76b0SSuyog Pawar ihevc_hbd_quant_iquant_ssd_flat_scale_mat_rdoq_ft ihevc_hbd_quant_iquant_ssd_flat_scale_mat_rdoq_avx; 166*c83a76b0SSuyog Pawar ihevc_hbd_q_iq_ssd_flat_scale_mat_var_rnd_fact_ft ihevc_hbd_q_iq_ssd_flat_scale_mat_var_rnd_fact_avx; 167*c83a76b0SSuyog Pawar 168*c83a76b0SSuyog Pawar ihevc_hbd_quant_iquant_ssd_flat_scale_mat_ft ihevc_hbd_quant_iquant_flat_scale_mat_avx; 169*c83a76b0SSuyog Pawar ihevc_hbd_quant_iquant_ssd_flat_scale_mat_rdoq_ft ihevc_hbd_quant_iquant_flat_scale_mat_rdoq_avx; 170*c83a76b0SSuyog Pawar ihevc_hbd_q_iq_ssd_flat_scale_mat_var_rnd_fact_ft ihevc_hbd_q_iq_flat_scale_mat_var_rnd_fact_avx; 171*c83a76b0SSuyog Pawar 172*c83a76b0SSuyog Pawar #ifndef DISABLE_AVX2 173*c83a76b0SSuyog Pawar /* AVX2 function declarations */ 174*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_flat_scale_mat_ft ihevc_quant_iquant_ssd_flat_scale_mat_avx2; 175*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_flat_scale_mat_rdoq_ft ihevc_quant_iquant_ssd_flat_scale_mat_rdoq_avx2; 176*c83a76b0SSuyog Pawar 177*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_flat_scale_mat_ft ihevc_quant_iquant_flat_scale_mat_avx2; 178*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_flat_scale_mat_rdoq_ft ihevc_quant_iquant_flat_scale_mat_rdoq_avx2; 179*c83a76b0SSuyog Pawar 180*c83a76b0SSuyog Pawar ihevc_hbd_quant_iquant_ssd_flat_scale_mat_ft ihevc_hbd_quant_iquant_ssd_flat_scale_mat_avx2; 181*c83a76b0SSuyog Pawar #endif 182*c83a76b0SSuyog Pawar 183*c83a76b0SSuyog Pawar /* Neon function declarations */ 184*c83a76b0SSuyog Pawar ihevc_quant_iquant_ssd_flat_scale_mat_ft ihevc_quant_iquant_ssd_flat_scale_mat_neon; 185*c83a76b0SSuyog Pawar ihevc_q_iq_ssd_flat_scale_mat_var_rnd_fact_ft ihevc_q_iq_ssd_flat_scale_mat_var_rnd_fact_neon; 186*c83a76b0SSuyog Pawar 187*c83a76b0SSuyog Pawar #endif /*_IHEVC_QUANT_IQUANT_SSD_H_*/ 188