/****************************************************************************** * * 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 */ /*! ****************************************************************************** * \file ihevce_had_satd.h * * \brief * This file contains function prototypes of HAD and SATD functions * * \date * 18/09/2012 * * \author * Ittiam * ****************************************************************************** */ #ifndef _IHEVCE_HAD_SATD_H_ #define _IHEVCE_HAD_SATD_H_ /*****************************************************************************/ /* Constant Macros */ /*****************************************************************************/ /*****************************************************************************/ /* Function Macros */ /*****************************************************************************/ /*****************************************************************************/ /* Typedefs */ /*****************************************************************************/ /*****************************************************************************/ /* Enums */ /*****************************************************************************/ /* @breif enum for hadamard transform block sizes supported : 4x4 to 32x32 */ typedef enum { HAD_4x4 = 0, HAD_8x8 = 1, HAD_16x16 = 2, HAD_32x32 = 3, HAD_INVALID = 4 } HAD_SIZE_T; /*****************************************************************************/ /* Structure */ /*****************************************************************************/ /*****************************************************************************/ /* Extern Function Declarations */ /*****************************************************************************/ UWORD32 ihevce_HAD_4x4_8bit( UWORD8 *pu1_origin, WORD32 src_strd, UWORD8 *pu1_pred_buf, WORD32 pred_strd, WORD16 *pi2_dst, WORD32 dst_strd); UWORD32 ihevce_HAD_8x8_8bit( UWORD8 *pu1_origin, WORD32 src_strd, UWORD8 *pu1_pred_buf, WORD32 pred_strd, WORD16 *pi2_dst, WORD32 dst_strd); UWORD32 ihevce_compute_ac_had_8x8_8bit( UWORD8 *pu1_origin, WORD32 src_strd, UWORD8 *pu1_pred_buf, WORD32 pred_strd, WORD16 *pi2_dst, WORD32 dst_strd); UWORD32 ihevce_HAD_16x16_8bit( UWORD8 *pu1_origin, WORD32 src_strd, UWORD8 *pu1_pred_buf, WORD32 pred_strd, WORD16 *pi2_dst, WORD32 dst_strd); UWORD32 ihevce_HAD_32x32_8bit( UWORD8 *pu1_origin, WORD32 src_strd, UWORD8 *pu1_pred_buf, WORD32 pred_strd, WORD16 *pi2_dst, WORD32 dst_strd); typedef WORD32 FT_HAD_16X16_R( UWORD8 *pu1_src, WORD32 src_strd, UWORD8 *pu1_pred, WORD32 pred_strd, WORD16 *pi2_dst, WORD32 dst_strd, WORD32 **ppi4_hsad, WORD32 **ppi4_tu_split, WORD32 **ppi4_tu_early_cbf, WORD32 pos_x_y_4x4, WORD32 num_4x4_in_row, WORD32 lambda, WORD32 lambda_q_shift, WORD32 i4_frm_qstep, WORD32 i4_cur_depth, WORD32 i4_max_depth, WORD32 i4_max_tr_size, WORD32 *pi4_tu_split_cost, void *pv_func_sel); typedef UWORD32 FT_HAD_32X32_USING_16X16( WORD16 *pi2_16x16_had, WORD32 had16_strd, WORD16 *pi2_dst, WORD32 dst_strd, WORD32 i4_frm_qstep, WORD32 *pi4_cbf); typedef UWORD32 ihevce_compute_16x16HAD_using_8x8_ft( WORD16 *pi2_8x8_had, WORD32 had8_strd, WORD16 *pi2_dst, WORD32 dst_strd, WORD32 i4_frm_qstep, WORD32 *pi4_cbf); typedef WORD32 FT_HAD_8X8_USING_4_4X4_R( UWORD8 *pu1_src, WORD32 src_strd, UWORD8 *pu1_pred, WORD32 pred_strd, WORD16 *pi2_dst, WORD32 dst_strd, WORD32 **ppi4_hsad, WORD32 **ppi4_tu_split, WORD32 **ppi4_tu_early_cbf, WORD32 pos_x_y_4x4, WORD32 num_4x4_in_row, WORD32 lambda, WORD32 lambda_q_shift, WORD32 i4_frm_qstep, WORD32 i4_cur_depth, WORD32 i4_max_depth, WORD32 i4_max_tr_size, WORD32 *pi4_tu_split_cost, void *pv_func_sel); WORD32 ihevce_had_16x16_r_noise_detect( UWORD8 *pu1_src, WORD32 src_strd, UWORD8 *pu1_pred, WORD32 pred_strd, WORD16 *pi2_dst, WORD32 dst_strd, WORD32 pos_x_y_4x4, WORD32 num_4x4_in_row, WORD32 scaling_for_pred); UWORD32 ihevce_compute_8x8HAD_using_4x4_noise_detect( WORD16 *pi2_4x4_had, WORD32 had4_strd, WORD16 *pi2_dst, WORD32 dst_strd, WORD32 i4_frm_qstep, WORD32 *pi4_cbf); void ihevce_had4_4x4_noise_detect( UWORD8 *pu1_src, WORD32 src_strd, UWORD8 *pu1_pred, WORD32 pred_strd, WORD16 *pi2_dst4x4, WORD16 *pi2_residue, WORD32 dst_strd, WORD32 scaling_for_pred); void ihevce_had_8x8_using_4_4x4_noise_detect( UWORD8 *pu1_src, WORD32 src_strd, UWORD8 *pu1_pred, WORD32 pred_strd, WORD16 *pi2_dst, WORD32 dst_strd, WORD32 pos_x_y_4x4, WORD32 num_4x4_in_row, WORD32 scaling_for_pred); void ihevce_had_8x8_using_4_4x4( UWORD8 *pu1_src, WORD32 src_strd, UWORD8 *pu1_pred, WORD32 pred_strd, WORD16 *pi2_dst, WORD32 dst_strd, WORD32 **ppi4_hsad, WORD32 pos_x_y_4x4, WORD32 num_4x4_in_row); typedef void ihevce_had_nxn_r_ft( UWORD8 *pu1_src, WORD32 src_strd, UWORD8 *pu1_pred, WORD32 pred_strd, WORD16 *pi2_dst, WORD32 dst_strd, WORD32 **ppi4_hsad, WORD32 **ppi4_tu_split, WORD32 **ppi4_tu_early_cbf, WORD32 pos_x_y_4x4, WORD32 num_4x4_in_row, WORD32 lambda, WORD32 lambda_q_shift, WORD32 i4_frm_qstep, WORD32 i4_cur_depth, WORD32 i4_max_depth, WORD32 i4_max_tr_size, WORD32 *pi4_tu_split_cost, void *pv_func_sel); UWORD32 ihevce_mat_add_shift_satd_16bit( WORD16 *pi2_buf1, WORD32 buf1_strd, WORD16 *pi2_buf2, WORD32 buf2_strd, WORD16 *pi2_dst, WORD32 dst_strd, WORD32 size, WORD32 shift, WORD32 threshold, WORD32 *pi4_cbf); UWORD32 ihevce_mat_sub_shift_satd_16bit( WORD16 *pi2_buf1, WORD32 buf1_strd, WORD16 *pi2_buf2, WORD32 buf2_strd, WORD16 *pi2_dst, WORD32 dst_strd, WORD32 size, WORD32 shift, WORD32 threshold, WORD32 *pi4_cbf); void ihevce_mat_add_16bit( WORD16 *pi2_buf1, WORD32 buf1_strd, WORD16 *pi2_buf2, WORD32 buf2_strd, WORD16 *pi2_dst, WORD32 dst_strd, WORD32 size, WORD32 threshold); void ihevce_mat_sub_16bit( WORD16 *pi2_buf1, WORD32 buf1_strd, WORD16 *pi2_buf2, WORD32 buf2_strd, WORD16 *pi2_dst, WORD32 dst_strd, WORD32 size, WORD32 threshold); UWORD32 ihevce_compute_16x16HAD_using_8x8_noise_detect( WORD16 *pi2_8x8_had, WORD32 had8_strd, WORD16 *pi2_dst, WORD32 dst_strd, WORD32 i4_frm_qstep, WORD32 *pi4_cbf); /******* C declarations ****************/ FT_HAD_8X8_USING_4_4X4_R ihevce_had_8x8_using_4_4x4_r; FT_HAD_16X16_R ihevce_had_16x16_r; FT_HAD_32X32_USING_16X16 ihevce_compute_32x32HAD_using_16x16; /******** A9Q declarations **********/ FT_HAD_8X8_USING_4_4X4_R ihevce_had_8x8_using_4_4x4_r_neon; FT_HAD_16X16_R ihevce_had_16x16_r_neon; FT_HAD_32X32_USING_16X16 ihevce_compute_32x32HAD_using_16x16_neon; #endif /* _IHEVCE_HAD_SATD_H_ */