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 ihevce_had_satd.h 23*c83a76b0SSuyog Pawar * 24*c83a76b0SSuyog Pawar * \brief 25*c83a76b0SSuyog Pawar * This file contains function prototypes of HAD and SATD functions 26*c83a76b0SSuyog Pawar * 27*c83a76b0SSuyog Pawar * \date 28*c83a76b0SSuyog Pawar * 18/09/2012 29*c83a76b0SSuyog Pawar * 30*c83a76b0SSuyog Pawar * \author 31*c83a76b0SSuyog Pawar * Ittiam 32*c83a76b0SSuyog Pawar * 33*c83a76b0SSuyog Pawar ****************************************************************************** 34*c83a76b0SSuyog Pawar */ 35*c83a76b0SSuyog Pawar 36*c83a76b0SSuyog Pawar #ifndef _IHEVCE_HAD_SATD_H_ 37*c83a76b0SSuyog Pawar #define _IHEVCE_HAD_SATD_H_ 38*c83a76b0SSuyog Pawar 39*c83a76b0SSuyog Pawar /*****************************************************************************/ 40*c83a76b0SSuyog Pawar /* Constant Macros */ 41*c83a76b0SSuyog Pawar /*****************************************************************************/ 42*c83a76b0SSuyog Pawar 43*c83a76b0SSuyog Pawar /*****************************************************************************/ 44*c83a76b0SSuyog Pawar /* Function Macros */ 45*c83a76b0SSuyog Pawar /*****************************************************************************/ 46*c83a76b0SSuyog Pawar 47*c83a76b0SSuyog Pawar /*****************************************************************************/ 48*c83a76b0SSuyog Pawar /* Typedefs */ 49*c83a76b0SSuyog Pawar /*****************************************************************************/ 50*c83a76b0SSuyog Pawar 51*c83a76b0SSuyog Pawar /*****************************************************************************/ 52*c83a76b0SSuyog Pawar /* Enums */ 53*c83a76b0SSuyog Pawar /*****************************************************************************/ 54*c83a76b0SSuyog Pawar 55*c83a76b0SSuyog Pawar /* @breif enum for hadamard transform block sizes supported : 4x4 to 32x32 */ 56*c83a76b0SSuyog Pawar typedef enum 57*c83a76b0SSuyog Pawar { 58*c83a76b0SSuyog Pawar HAD_4x4 = 0, 59*c83a76b0SSuyog Pawar HAD_8x8 = 1, 60*c83a76b0SSuyog Pawar HAD_16x16 = 2, 61*c83a76b0SSuyog Pawar HAD_32x32 = 3, 62*c83a76b0SSuyog Pawar HAD_INVALID = 4 63*c83a76b0SSuyog Pawar } HAD_SIZE_T; 64*c83a76b0SSuyog Pawar 65*c83a76b0SSuyog Pawar /*****************************************************************************/ 66*c83a76b0SSuyog Pawar /* Structure */ 67*c83a76b0SSuyog Pawar /*****************************************************************************/ 68*c83a76b0SSuyog Pawar 69*c83a76b0SSuyog Pawar /*****************************************************************************/ 70*c83a76b0SSuyog Pawar /* Extern Function Declarations */ 71*c83a76b0SSuyog Pawar /*****************************************************************************/ 72*c83a76b0SSuyog Pawar 73*c83a76b0SSuyog Pawar UWORD32 ihevce_HAD_4x4_8bit( 74*c83a76b0SSuyog Pawar UWORD8 *pu1_origin, 75*c83a76b0SSuyog Pawar WORD32 src_strd, 76*c83a76b0SSuyog Pawar UWORD8 *pu1_pred_buf, 77*c83a76b0SSuyog Pawar WORD32 pred_strd, 78*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 79*c83a76b0SSuyog Pawar WORD32 dst_strd); 80*c83a76b0SSuyog Pawar 81*c83a76b0SSuyog Pawar UWORD32 ihevce_HAD_8x8_8bit( 82*c83a76b0SSuyog Pawar UWORD8 *pu1_origin, 83*c83a76b0SSuyog Pawar WORD32 src_strd, 84*c83a76b0SSuyog Pawar UWORD8 *pu1_pred_buf, 85*c83a76b0SSuyog Pawar WORD32 pred_strd, 86*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 87*c83a76b0SSuyog Pawar WORD32 dst_strd); 88*c83a76b0SSuyog Pawar 89*c83a76b0SSuyog Pawar UWORD32 ihevce_compute_ac_had_8x8_8bit( 90*c83a76b0SSuyog Pawar UWORD8 *pu1_origin, 91*c83a76b0SSuyog Pawar WORD32 src_strd, 92*c83a76b0SSuyog Pawar UWORD8 *pu1_pred_buf, 93*c83a76b0SSuyog Pawar WORD32 pred_strd, 94*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 95*c83a76b0SSuyog Pawar WORD32 dst_strd); 96*c83a76b0SSuyog Pawar 97*c83a76b0SSuyog Pawar UWORD32 ihevce_HAD_16x16_8bit( 98*c83a76b0SSuyog Pawar UWORD8 *pu1_origin, 99*c83a76b0SSuyog Pawar WORD32 src_strd, 100*c83a76b0SSuyog Pawar UWORD8 *pu1_pred_buf, 101*c83a76b0SSuyog Pawar WORD32 pred_strd, 102*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 103*c83a76b0SSuyog Pawar WORD32 dst_strd); 104*c83a76b0SSuyog Pawar 105*c83a76b0SSuyog Pawar UWORD32 ihevce_HAD_32x32_8bit( 106*c83a76b0SSuyog Pawar UWORD8 *pu1_origin, 107*c83a76b0SSuyog Pawar WORD32 src_strd, 108*c83a76b0SSuyog Pawar UWORD8 *pu1_pred_buf, 109*c83a76b0SSuyog Pawar WORD32 pred_strd, 110*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 111*c83a76b0SSuyog Pawar WORD32 dst_strd); 112*c83a76b0SSuyog Pawar 113*c83a76b0SSuyog Pawar typedef WORD32 FT_HAD_16X16_R( 114*c83a76b0SSuyog Pawar UWORD8 *pu1_src, 115*c83a76b0SSuyog Pawar WORD32 src_strd, 116*c83a76b0SSuyog Pawar UWORD8 *pu1_pred, 117*c83a76b0SSuyog Pawar WORD32 pred_strd, 118*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 119*c83a76b0SSuyog Pawar WORD32 dst_strd, 120*c83a76b0SSuyog Pawar WORD32 **ppi4_hsad, 121*c83a76b0SSuyog Pawar WORD32 **ppi4_tu_split, 122*c83a76b0SSuyog Pawar WORD32 **ppi4_tu_early_cbf, 123*c83a76b0SSuyog Pawar WORD32 pos_x_y_4x4, 124*c83a76b0SSuyog Pawar WORD32 num_4x4_in_row, 125*c83a76b0SSuyog Pawar WORD32 lambda, 126*c83a76b0SSuyog Pawar WORD32 lambda_q_shift, 127*c83a76b0SSuyog Pawar WORD32 i4_frm_qstep, 128*c83a76b0SSuyog Pawar WORD32 i4_cur_depth, 129*c83a76b0SSuyog Pawar WORD32 i4_max_depth, 130*c83a76b0SSuyog Pawar WORD32 i4_max_tr_size, 131*c83a76b0SSuyog Pawar WORD32 *pi4_tu_split_cost, 132*c83a76b0SSuyog Pawar void *pv_func_sel); 133*c83a76b0SSuyog Pawar 134*c83a76b0SSuyog Pawar typedef UWORD32 FT_HAD_32X32_USING_16X16( 135*c83a76b0SSuyog Pawar WORD16 *pi2_16x16_had, 136*c83a76b0SSuyog Pawar WORD32 had16_strd, 137*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 138*c83a76b0SSuyog Pawar WORD32 dst_strd, 139*c83a76b0SSuyog Pawar WORD32 i4_frm_qstep, 140*c83a76b0SSuyog Pawar WORD32 *pi4_cbf); 141*c83a76b0SSuyog Pawar 142*c83a76b0SSuyog Pawar typedef UWORD32 ihevce_compute_16x16HAD_using_8x8_ft( 143*c83a76b0SSuyog Pawar WORD16 *pi2_8x8_had, 144*c83a76b0SSuyog Pawar WORD32 had8_strd, 145*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 146*c83a76b0SSuyog Pawar WORD32 dst_strd, 147*c83a76b0SSuyog Pawar WORD32 i4_frm_qstep, 148*c83a76b0SSuyog Pawar WORD32 *pi4_cbf); 149*c83a76b0SSuyog Pawar 150*c83a76b0SSuyog Pawar typedef WORD32 FT_HAD_8X8_USING_4_4X4_R( 151*c83a76b0SSuyog Pawar UWORD8 *pu1_src, 152*c83a76b0SSuyog Pawar WORD32 src_strd, 153*c83a76b0SSuyog Pawar UWORD8 *pu1_pred, 154*c83a76b0SSuyog Pawar WORD32 pred_strd, 155*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 156*c83a76b0SSuyog Pawar WORD32 dst_strd, 157*c83a76b0SSuyog Pawar WORD32 **ppi4_hsad, 158*c83a76b0SSuyog Pawar WORD32 **ppi4_tu_split, 159*c83a76b0SSuyog Pawar WORD32 **ppi4_tu_early_cbf, 160*c83a76b0SSuyog Pawar WORD32 pos_x_y_4x4, 161*c83a76b0SSuyog Pawar WORD32 num_4x4_in_row, 162*c83a76b0SSuyog Pawar WORD32 lambda, 163*c83a76b0SSuyog Pawar WORD32 lambda_q_shift, 164*c83a76b0SSuyog Pawar WORD32 i4_frm_qstep, 165*c83a76b0SSuyog Pawar WORD32 i4_cur_depth, 166*c83a76b0SSuyog Pawar WORD32 i4_max_depth, 167*c83a76b0SSuyog Pawar WORD32 i4_max_tr_size, 168*c83a76b0SSuyog Pawar WORD32 *pi4_tu_split_cost, 169*c83a76b0SSuyog Pawar void *pv_func_sel); 170*c83a76b0SSuyog Pawar 171*c83a76b0SSuyog Pawar WORD32 ihevce_had_16x16_r_noise_detect( 172*c83a76b0SSuyog Pawar UWORD8 *pu1_src, 173*c83a76b0SSuyog Pawar WORD32 src_strd, 174*c83a76b0SSuyog Pawar UWORD8 *pu1_pred, 175*c83a76b0SSuyog Pawar WORD32 pred_strd, 176*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 177*c83a76b0SSuyog Pawar WORD32 dst_strd, 178*c83a76b0SSuyog Pawar WORD32 pos_x_y_4x4, 179*c83a76b0SSuyog Pawar WORD32 num_4x4_in_row, 180*c83a76b0SSuyog Pawar WORD32 scaling_for_pred); 181*c83a76b0SSuyog Pawar 182*c83a76b0SSuyog Pawar UWORD32 ihevce_compute_8x8HAD_using_4x4_noise_detect( 183*c83a76b0SSuyog Pawar WORD16 *pi2_4x4_had, 184*c83a76b0SSuyog Pawar WORD32 had4_strd, 185*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 186*c83a76b0SSuyog Pawar WORD32 dst_strd, 187*c83a76b0SSuyog Pawar WORD32 i4_frm_qstep, 188*c83a76b0SSuyog Pawar WORD32 *pi4_cbf); 189*c83a76b0SSuyog Pawar void ihevce_had4_4x4_noise_detect( 190*c83a76b0SSuyog Pawar UWORD8 *pu1_src, 191*c83a76b0SSuyog Pawar WORD32 src_strd, 192*c83a76b0SSuyog Pawar UWORD8 *pu1_pred, 193*c83a76b0SSuyog Pawar WORD32 pred_strd, 194*c83a76b0SSuyog Pawar WORD16 *pi2_dst4x4, 195*c83a76b0SSuyog Pawar WORD16 *pi2_residue, 196*c83a76b0SSuyog Pawar WORD32 dst_strd, 197*c83a76b0SSuyog Pawar WORD32 scaling_for_pred); 198*c83a76b0SSuyog Pawar 199*c83a76b0SSuyog Pawar void ihevce_had_8x8_using_4_4x4_noise_detect( 200*c83a76b0SSuyog Pawar UWORD8 *pu1_src, 201*c83a76b0SSuyog Pawar WORD32 src_strd, 202*c83a76b0SSuyog Pawar UWORD8 *pu1_pred, 203*c83a76b0SSuyog Pawar WORD32 pred_strd, 204*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 205*c83a76b0SSuyog Pawar WORD32 dst_strd, 206*c83a76b0SSuyog Pawar WORD32 pos_x_y_4x4, 207*c83a76b0SSuyog Pawar WORD32 num_4x4_in_row, 208*c83a76b0SSuyog Pawar WORD32 scaling_for_pred); 209*c83a76b0SSuyog Pawar 210*c83a76b0SSuyog Pawar void ihevce_had_8x8_using_4_4x4( 211*c83a76b0SSuyog Pawar UWORD8 *pu1_src, 212*c83a76b0SSuyog Pawar WORD32 src_strd, 213*c83a76b0SSuyog Pawar UWORD8 *pu1_pred, 214*c83a76b0SSuyog Pawar WORD32 pred_strd, 215*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 216*c83a76b0SSuyog Pawar WORD32 dst_strd, 217*c83a76b0SSuyog Pawar WORD32 **ppi4_hsad, 218*c83a76b0SSuyog Pawar WORD32 pos_x_y_4x4, 219*c83a76b0SSuyog Pawar WORD32 num_4x4_in_row); 220*c83a76b0SSuyog Pawar 221*c83a76b0SSuyog Pawar typedef void ihevce_had_nxn_r_ft( 222*c83a76b0SSuyog Pawar UWORD8 *pu1_src, 223*c83a76b0SSuyog Pawar WORD32 src_strd, 224*c83a76b0SSuyog Pawar UWORD8 *pu1_pred, 225*c83a76b0SSuyog Pawar WORD32 pred_strd, 226*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 227*c83a76b0SSuyog Pawar WORD32 dst_strd, 228*c83a76b0SSuyog Pawar WORD32 **ppi4_hsad, 229*c83a76b0SSuyog Pawar WORD32 **ppi4_tu_split, 230*c83a76b0SSuyog Pawar WORD32 **ppi4_tu_early_cbf, 231*c83a76b0SSuyog Pawar WORD32 pos_x_y_4x4, 232*c83a76b0SSuyog Pawar WORD32 num_4x4_in_row, 233*c83a76b0SSuyog Pawar WORD32 lambda, 234*c83a76b0SSuyog Pawar WORD32 lambda_q_shift, 235*c83a76b0SSuyog Pawar WORD32 i4_frm_qstep, 236*c83a76b0SSuyog Pawar WORD32 i4_cur_depth, 237*c83a76b0SSuyog Pawar WORD32 i4_max_depth, 238*c83a76b0SSuyog Pawar WORD32 i4_max_tr_size, 239*c83a76b0SSuyog Pawar WORD32 *pi4_tu_split_cost, 240*c83a76b0SSuyog Pawar void *pv_func_sel); 241*c83a76b0SSuyog Pawar 242*c83a76b0SSuyog Pawar UWORD32 ihevce_mat_add_shift_satd_16bit( 243*c83a76b0SSuyog Pawar WORD16 *pi2_buf1, 244*c83a76b0SSuyog Pawar WORD32 buf1_strd, 245*c83a76b0SSuyog Pawar WORD16 *pi2_buf2, 246*c83a76b0SSuyog Pawar WORD32 buf2_strd, 247*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 248*c83a76b0SSuyog Pawar WORD32 dst_strd, 249*c83a76b0SSuyog Pawar WORD32 size, 250*c83a76b0SSuyog Pawar WORD32 shift, 251*c83a76b0SSuyog Pawar WORD32 threshold, 252*c83a76b0SSuyog Pawar WORD32 *pi4_cbf); 253*c83a76b0SSuyog Pawar 254*c83a76b0SSuyog Pawar UWORD32 ihevce_mat_sub_shift_satd_16bit( 255*c83a76b0SSuyog Pawar WORD16 *pi2_buf1, 256*c83a76b0SSuyog Pawar WORD32 buf1_strd, 257*c83a76b0SSuyog Pawar WORD16 *pi2_buf2, 258*c83a76b0SSuyog Pawar WORD32 buf2_strd, 259*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 260*c83a76b0SSuyog Pawar WORD32 dst_strd, 261*c83a76b0SSuyog Pawar WORD32 size, 262*c83a76b0SSuyog Pawar WORD32 shift, 263*c83a76b0SSuyog Pawar WORD32 threshold, 264*c83a76b0SSuyog Pawar WORD32 *pi4_cbf); 265*c83a76b0SSuyog Pawar 266*c83a76b0SSuyog Pawar void ihevce_mat_add_16bit( 267*c83a76b0SSuyog Pawar WORD16 *pi2_buf1, 268*c83a76b0SSuyog Pawar WORD32 buf1_strd, 269*c83a76b0SSuyog Pawar WORD16 *pi2_buf2, 270*c83a76b0SSuyog Pawar WORD32 buf2_strd, 271*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 272*c83a76b0SSuyog Pawar WORD32 dst_strd, 273*c83a76b0SSuyog Pawar WORD32 size, 274*c83a76b0SSuyog Pawar WORD32 threshold); 275*c83a76b0SSuyog Pawar 276*c83a76b0SSuyog Pawar void ihevce_mat_sub_16bit( 277*c83a76b0SSuyog Pawar WORD16 *pi2_buf1, 278*c83a76b0SSuyog Pawar WORD32 buf1_strd, 279*c83a76b0SSuyog Pawar WORD16 *pi2_buf2, 280*c83a76b0SSuyog Pawar WORD32 buf2_strd, 281*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 282*c83a76b0SSuyog Pawar WORD32 dst_strd, 283*c83a76b0SSuyog Pawar WORD32 size, 284*c83a76b0SSuyog Pawar WORD32 threshold); 285*c83a76b0SSuyog Pawar 286*c83a76b0SSuyog Pawar UWORD32 ihevce_compute_16x16HAD_using_8x8_noise_detect( 287*c83a76b0SSuyog Pawar WORD16 *pi2_8x8_had, 288*c83a76b0SSuyog Pawar WORD32 had8_strd, 289*c83a76b0SSuyog Pawar WORD16 *pi2_dst, 290*c83a76b0SSuyog Pawar WORD32 dst_strd, 291*c83a76b0SSuyog Pawar WORD32 i4_frm_qstep, 292*c83a76b0SSuyog Pawar WORD32 *pi4_cbf); 293*c83a76b0SSuyog Pawar 294*c83a76b0SSuyog Pawar /******* C declarations ****************/ 295*c83a76b0SSuyog Pawar FT_HAD_8X8_USING_4_4X4_R ihevce_had_8x8_using_4_4x4_r; 296*c83a76b0SSuyog Pawar FT_HAD_16X16_R ihevce_had_16x16_r; 297*c83a76b0SSuyog Pawar FT_HAD_32X32_USING_16X16 ihevce_compute_32x32HAD_using_16x16; 298*c83a76b0SSuyog Pawar 299*c83a76b0SSuyog Pawar /******** A9Q declarations **********/ 300*c83a76b0SSuyog Pawar FT_HAD_8X8_USING_4_4X4_R ihevce_had_8x8_using_4_4x4_r_neon; 301*c83a76b0SSuyog Pawar FT_HAD_16X16_R ihevce_had_16x16_r_neon; 302*c83a76b0SSuyog Pawar FT_HAD_32X32_USING_16X16 ihevce_compute_32x32HAD_using_16x16_neon; 303*c83a76b0SSuyog Pawar 304*c83a76b0SSuyog Pawar #endif /* _IHEVCE_HAD_SATD_H_ */ 305