/****************************************************************************** * * 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_me_instr_set_router.h * * \brief * This file contains declarations related to me utilities used in encoder * * \date * 15/07/2013 * * \author * Ittiam * * List of Functions * * ****************************************************************************** */ #ifndef __IHEVCE_ME_INSTR_SET_ROUTER_H_ #define __IHEVCE_ME_INSTR_SET_ROUTER_H_ /*****************************************************************************/ /* Typedefs */ /*****************************************************************************/ typedef void FT_SAD_EVALUATOR(err_prms_t *); typedef void FT_PART_SADS_EVALUATOR( grid_ctxt_t *, UWORD8 *, WORD32, WORD32 **, cand_t *, WORD32 *, CU_SIZE_T); typedef void FT_PART_SADS_EVALUATOR_16X16CU(grid_ctxt_t *, UWORD8 *, WORD32, UWORD16 **, cand_t *, WORD32 *); typedef void FT_CALC_SAD_AND_RESULT( hme_search_prms_t *, wgt_pred_ctxt_t *, err_prms_t *, result_upd_prms_t *, U08 **, S32); typedef void FT_CALC_SAD_AND_RESULT_SUBPEL(err_prms_t *, result_upd_prms_t *); typedef void FT_QPEL_INTERP_AVG(interp_prms_t *, S32, S32, S32); typedef void FT_QPEL_INTERP_AVG_1PT(interp_prms_t *, S32, S32, S32, U08 **, S32 *); typedef void FT_QPEL_INTERP_AVG_2PT(interp_prms_t *, S32, S32, U08 **, S32 *); typedef void FT_GET_WT_INP(layer_ctxt_t *, wgt_pred_ctxt_t *, S32, S32, S32, S32, S32, U08); typedef void FT_STORE_4X4_SADS(hme_search_prms_t *, layer_ctxt_t *, range_prms_t *, wgt_pred_ctxt_t *, S16 *); typedef void FT_COMBINE_4X4_SADS_AND_COMPUTE_COST( S08, range_prms_t *, range_prms_t *, hme_mv_t *, hme_mv_t *, pred_ctxt_t *, PF_MV_COST_FXN, S16 *, S16 *, S16 *); typedef void FT_MV_CLIPPER(hme_search_prms_t *, S32, S08, U08, U08, U08); typedef void FT_COMPUTE_VARIANCE(U08 *, S32, S32 *, U32 *, S32, U08); typedef void FT_COMPUTE_DISTORTION( U08 *, S32, S32 *, ULWORD64 *, ULWORD64 *, S32 *, S32, S32, S32, S32, S32, U08); /*****************************************************************************/ /* Structure */ /*****************************************************************************/ // clang-format off typedef struct { FT_SAD_EVALUATOR *pf_evalsad_pt_npu_mxn_8bit; FT_SAD_EVALUATOR *pf_evalsad_grid_npu_MxN; FT_SAD_EVALUATOR *pf_evalsad_pt_npu_8x4_8bit; FT_SAD_EVALUATOR *pf_evalsad_pt_npu_16x4_8bit; FT_SAD_EVALUATOR *pf_evalsad_pt_npu_16x12_8bit; FT_SAD_EVALUATOR *pf_evalsad_pt_npu_24x32_8bit; FT_SAD_EVALUATOR *pf_evalsad_pt_npu_12x16_8bit; FT_SAD_EVALUATOR *pf_evalsad_pt_npu_width_multiple_4_8bit; FT_SAD_EVALUATOR *pf_evalsad_pt_npu_width_multiple_8_8bit; FT_SAD_EVALUATOR *pf_evalsad_pt_npu_width_multiple_16_8bit; FT_PART_SADS_EVALUATOR_16X16CU *pf_compute_4x4_sads_for_16x16_blk; FT_PART_SADS_EVALUATOR *pf_evalsad_grid_pu_MxM; FT_CALC_SAD_AND_RESULT *pf_calc_sad_and_1_best_result_generic; FT_CALC_SAD_AND_RESULT *pf_calc_stim_injected_sad_and_1_best_result_generic; FT_CALC_SAD_AND_RESULT *pf_calc_stim_injected_sad_and_1_best_result_num_part_eq_1; FT_CALC_SAD_AND_RESULT *pf_calc_stim_injected_sad_and_1_best_result_num_square_parts; FT_CALC_SAD_AND_RESULT *pf_calc_stim_injected_sad_and_1_best_result_num_part_lt_9; FT_CALC_SAD_AND_RESULT *pf_calc_stim_injected_sad_and_1_best_result_num_part_lt_17; FT_CALC_SAD_AND_RESULT *pf_calc_sad_and_1_best_result_num_part_eq_1; FT_CALC_SAD_AND_RESULT *pf_calc_sad_and_1_best_result_num_part_1_for_grid; FT_CALC_SAD_AND_RESULT *pf_calc_sad_and_1_best_result_num_square_parts; FT_CALC_SAD_AND_RESULT *pf_calc_sad_and_1_best_result_num_part_lt_9; FT_CALC_SAD_AND_RESULT *pf_calc_sad_and_1_best_result_num_part_lt_17; FT_CALC_SAD_AND_RESULT *pf_calc_pt_sad_and_1_best_result_explicit_generic; FT_CALC_SAD_AND_RESULT *pf_calc_pt_sad_and_1_best_result_explicit_8x8; FT_CALC_SAD_AND_RESULT *pf_calc_pt_sad_and_1_best_result_explicit_8x8_for_grid; FT_CALC_SAD_AND_RESULT *pf_calc_pt_sad_and_1_best_result_explicit_8x8_4x4; FT_CALC_SAD_AND_RESULT *pf_calc_pt_sad_and_2_best_results_explicit_generic; FT_CALC_SAD_AND_RESULT *pf_calc_pt_sad_and_2_best_results_explicit_8x8; FT_CALC_SAD_AND_RESULT *pf_calc_pt_sad_and_2_best_results_explicit_8x8_for_grid; FT_CALC_SAD_AND_RESULT *pf_calc_pt_sad_and_2_best_results_explicit_8x8_4x4; FT_CALC_SAD_AND_RESULT_SUBPEL *pf_calc_sad_and_1_best_result_subpel_generic; FT_CALC_SAD_AND_RESULT_SUBPEL *pf_calc_sad_and_1_best_result_subpel_num_part_eq_1; FT_CALC_SAD_AND_RESULT_SUBPEL *pf_calc_sad_and_1_best_result_subpel_square_parts; FT_CALC_SAD_AND_RESULT_SUBPEL *pf_calc_sad_and_1_best_result_subpel_num_part_lt_9; FT_CALC_SAD_AND_RESULT_SUBPEL *pf_calc_sad_and_1_best_result_subpel_num_part_lt_17; FT_CALC_SAD_AND_RESULT *pf_calc_sad_and_2_best_results_generic; FT_CALC_SAD_AND_RESULT *pf_calc_stim_injected_sad_and_2_best_results_generic; FT_CALC_SAD_AND_RESULT *pf_calc_stim_injected_sad_and_2_best_results_num_part_eq_1; FT_CALC_SAD_AND_RESULT *pf_calc_stim_injected_sad_and_2_best_results_num_square_parts; FT_CALC_SAD_AND_RESULT *pf_calc_stim_injected_sad_and_2_best_results_num_part_lt_9; FT_CALC_SAD_AND_RESULT *pf_calc_stim_injected_sad_and_2_best_results_num_part_lt_17; FT_CALC_SAD_AND_RESULT *pf_calc_sad_and_2_best_results_num_part_eq_1; FT_CALC_SAD_AND_RESULT *pf_calc_sad_and_2_best_results_num_part_1_for_grid; FT_CALC_SAD_AND_RESULT *pf_calc_sad_and_2_best_results_num_square_parts; FT_CALC_SAD_AND_RESULT *pf_calc_sad_and_2_best_results_num_part_lt_9; FT_CALC_SAD_AND_RESULT *pf_calc_sad_and_2_best_results_num_part_lt_17; FT_CALC_SAD_AND_RESULT_SUBPEL *pf_calc_sad_and_2_best_results_subpel_generic; FT_CALC_SAD_AND_RESULT_SUBPEL *pf_calc_sad_and_2_best_results_subpel_num_part_eq_1; FT_CALC_SAD_AND_RESULT_SUBPEL *pf_calc_sad_and_2_best_results_subpel_square_parts; FT_CALC_SAD_AND_RESULT_SUBPEL *pf_calc_sad_and_2_best_results_subpel_num_part_lt_9; FT_CALC_SAD_AND_RESULT_SUBPEL *pf_calc_sad_and_2_best_results_subpel_num_part_lt_17; FT_QPEL_INTERP_AVG *pf_qpel_interp_avg_generic; FT_QPEL_INTERP_AVG_1PT *pf_qpel_interp_avg_1pt; FT_QPEL_INTERP_AVG_2PT *pf_qpel_interp_avg_2pt_vert_with_reuse; FT_QPEL_INTERP_AVG_2PT *pf_qpel_interp_avg_2pt_horz_with_reuse; FT_GET_WT_INP *pf_get_wt_inp_generic; FT_GET_WT_INP *pf_get_wt_inp_8x8; FT_GET_WT_INP *pf_get_wt_inp_ctb; FT_STORE_4X4_SADS *pf_store_4x4_sads_high_speed; FT_STORE_4X4_SADS *pf_store_4x4_sads_high_quality; FT_COMBINE_4X4_SADS_AND_COMPUTE_COST *pf_combine_4x4_sads_and_compute_cost_high_speed; FT_COMBINE_4X4_SADS_AND_COMPUTE_COST *pf_combine_4x4_sads_and_compute_cost_high_quality; FT_MV_CLIPPER *pf_mv_clipper; FT_COMPUTE_VARIANCE *pf_compute_variance_for_all_parts; FT_COMPUTE_DISTORTION *pf_compute_stim_injected_distortion_for_all_parts; } ihevce_me_optimised_function_list_t; /*****************************************************************************/ /* Extern Function Declarations */ /*****************************************************************************/ void ihevce_me_instr_set_router( ihevce_me_optimised_function_list_t *ps_func_list, IV_ARCH_T e_arch); PF_SAD_FXN_T hme_get_sad_fxn( BLK_SIZE_T e_blk_size, S32 i4_grid_mask, S32 i4_part_mask); void ihevce_sifter_sad_fxn_assigner( FT_SAD_EVALUATOR **ppf_evalsad_pt_npu_mxn, IV_ARCH_T e_arch); void hme_evalsad_grid_pu_MxM(err_prms_t *ps_prms); FT_CALC_SAD_AND_RESULT *hme_get_calc_sad_and_result_fxn(S08 i1_grid_flag, U08 u1_is_cu_noisy, S32 i4_part_mask, S32 num_parts, S32 num_results); /* Function List - C */ FT_SAD_EVALUATOR hme_evalsad_pt_npu_MxN_8bit; FT_SAD_EVALUATOR hme_evalsad_grid_npu_MxN; FT_PART_SADS_EVALUATOR compute_part_sads_for_MxM_blk; FT_PART_SADS_EVALUATOR_16X16CU compute_4x4_sads_for_16x16_blk; FT_CALC_SAD_AND_RESULT hme_calc_sad_and_1_best_result; FT_CALC_SAD_AND_RESULT hme_calc_stim_injected_sad_and_1_best_result; FT_CALC_SAD_AND_RESULT hme_calc_pt_sad_and_result_explicit; FT_CALC_SAD_AND_RESULT_SUBPEL hme_calc_sad_and_1_best_result_subpel; FT_CALC_SAD_AND_RESULT hme_calc_sad_and_2_best_results; FT_CALC_SAD_AND_RESULT hme_calc_stim_injected_sad_and_2_best_results; FT_CALC_SAD_AND_RESULT_SUBPEL hme_calc_sad_and_2_best_results_subpel; FT_QPEL_INTERP_AVG hme_qpel_interp_avg; FT_QPEL_INTERP_AVG_1PT hme_qpel_interp_avg_1pt; FT_QPEL_INTERP_AVG_2PT hme_qpel_interp_avg_2pt_vert_with_reuse; FT_QPEL_INTERP_AVG_2PT hme_qpel_interp_avg_2pt_horz_with_reuse; FT_GET_WT_INP hme_get_wt_inp; FT_STORE_4X4_SADS hme_store_4x4_sads_high_speed; FT_STORE_4X4_SADS hme_store_4x4_sads_high_quality; FT_COMBINE_4X4_SADS_AND_COMPUTE_COST hme_combine_4x4_sads_and_compute_cost_high_speed; FT_COMBINE_4X4_SADS_AND_COMPUTE_COST hme_combine_4x4_sads_and_compute_cost_high_quality; FT_MV_CLIPPER hme_mv_clipper; FT_COMPUTE_VARIANCE hme_compute_variance_for_all_parts; FT_COMPUTE_DISTORTION hme_compute_stim_injected_distortion_for_all_parts; /* Function List - Neon */ #ifdef ENABLE_NEON FT_SAD_EVALUATOR hme_evalsad_pt_npu_MxN_8bit_neon; FT_SAD_EVALUATOR hme_evalsad_grid_npu_MxN_neon; FT_PART_SADS_EVALUATOR compute_part_sads_for_MxM_blk_neon; FT_PART_SADS_EVALUATOR_16X16CU compute_4x4_sads_for_16x16_blk_neon; FT_CALC_SAD_AND_RESULT hme_calc_sad_and_1_best_result_neon; FT_CALC_SAD_AND_RESULT_SUBPEL hme_calc_sad_and_1_best_result_subpel_neon; FT_QPEL_INTERP_AVG hme_qpel_interp_avg_neon; FT_QPEL_INTERP_AVG_1PT hme_qpel_interp_avg_1pt_neon; FT_QPEL_INTERP_AVG_2PT hme_qpel_interp_avg_2pt_vert_with_reuse_neon; FT_QPEL_INTERP_AVG_2PT hme_qpel_interp_avg_2pt_horz_with_reuse_neon; FT_GET_WT_INP hme_get_wt_inp_8x8_neon; FT_GET_WT_INP hme_get_wt_inp_ctb_neon; FT_STORE_4X4_SADS hme_store_4x4_sads_high_speed_neon; FT_STORE_4X4_SADS hme_store_4x4_sads_high_quality_neon; FT_COMBINE_4X4_SADS_AND_COMPUTE_COST hme_combine_4x4_sads_and_compute_cost_high_speed_neon; FT_COMBINE_4X4_SADS_AND_COMPUTE_COST hme_combine_4x4_sads_and_compute_cost_high_quality_neon; #endif // clang-format on #endif