/****************************************************************************** * * 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_tu_tree_selector.h * * \brief * This file contains definitions and declarations used for TU tree selection * * \date * 20/04/2016 * * \author * Ittiam * ****************************************************************************** */ #ifndef _TU_TREE_SELECTOR_ #define _TU_TREE_SELECTOR_ /*****************************************************************************/ /* Structures */ /*****************************************************************************/ typedef struct { void *pv_src; void *pv_pred; void *pv_recon; WORD32 i4_src_stride; WORD32 i4_pred_stride; WORD32 i4_recon_stride; } src_pred_rec_buf_t; typedef struct { src_pred_rec_buf_t s_src_pred_rec_buf_luma; src_pred_rec_buf_t s_src_pred_rec_buf_chroma; nbr_4x4_t *ps_nbr_data_buf; WORD16 *pi2_deq_data; WORD16 *pi2_deq_data_chroma; UWORD8 **ppu1_ecd; WORD32 i4_nbr_data_buf_stride; WORD32 i4_deq_data_stride; WORD32 i4_deq_data_stride_chroma; } buffer_data_for_tu_t; /*****************************************************************************/ /* Extern Function Declarations */ /*****************************************************************************/ extern WORD32 ihevce_tu_tree_coverage_in_cu(tu_tree_node_t *ps_node); extern UWORD16 ihevce_tu_tree_init( tu_tree_node_t *ps_root, UWORD8 u1_cu_size, UWORD8 u1_min_tree_depth, UWORD8 u1_max_tree_depth, UWORD8 u1_chroma_processing_enabled, UWORD8 u1_is_422); #if !ENABLE_TOP_DOWN_TU_RECURSION extern LWORD64 ihevce_tu_tree_selector( ihevce_enc_loop_ctxt_t *ps_ctxt, tu_tree_node_t *ps_node, buffer_data_for_tu_t *ps_buffer_data, UWORD8 *pu1_cabac_ctxt, WORD32 i4_pred_mode, #if USE_NOISE_TERM_IN_ZERO_CODING_DECISION_ALGORITHMS WORD32 i4_alpha_stim_multiplier, UWORD8 u1_is_cu_noisy, #endif UWORD8 u1_cur_depth, UWORD8 u1_max_depth, UWORD8 u1_part_type, UWORD8 u1_compute_spatial_ssd); #endif extern LWORD64 ihevce_topDown_tu_tree_selector( ihevce_enc_loop_ctxt_t *ps_ctxt, tu_tree_node_t *ps_node, buffer_data_for_tu_t *ps_buffer_data, UWORD8 *pu1_cabac_ctxt, WORD32 i4_pred_mode, #if USE_NOISE_TERM_IN_ZERO_CODING_DECISION_ALGORITHMS WORD32 i4_alpha_stim_multiplier, UWORD8 u1_is_cu_noisy, #endif UWORD8 u1_cur_depth, UWORD8 u1_max_depth, UWORD8 u1_part_type, UWORD8 u1_chroma_processing_enabled, UWORD8 u1_compute_spatial_ssd); extern void ihevce_tu_selector_debriefer( tu_tree_node_t *ps_node, enc_loop_cu_final_prms_t *ps_final_prms, LWORD64 *pi8_total_cost, LWORD64 *pi8_total_non_coded_cost, WORD32 *pi4_num_bytes_used_for_ecd, WORD32 *pi4_num_bits_used_for_encoding, UWORD16 *pu2_tu_ctr, WORD32 i4_cu_qp, UWORD8 u1_cu_posx, UWORD8 u1_cu_posy, UWORD8 u1_chroma_processing_enabled, UWORD8 u1_is_422, TU_POS_T e_tu_pos); extern void ihevce_tuSplitArray_to_tuTree_mapper( tu_tree_node_t *ps_root, WORD32 ai4_tuSplitArray[4], UWORD8 u1_cu_size, UWORD8 u1_tu_size, UWORD8 u1_min_tu_size, UWORD8 u1_max_tu_size, UWORD8 u1_is_skip); #endif