blob: 5dd21a992c68f3ad885c7f14b1eaf122b4d3499e [file] [log] [blame]
/******************************************************************************
*
* 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