You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
234 lines
7.8 KiB
234 lines
7.8 KiB
/******************************************************************************
|
|
*
|
|
* 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_decomp_pre_intra_structs.h
|
|
*
|
|
* \brief
|
|
* This file contains strcutures of pre_enc_loop pass
|
|
*
|
|
* \date
|
|
* 18/09/2012
|
|
*
|
|
* \author
|
|
* Ittiam
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
|
|
#ifndef _IHEVCE_DECOMP_PRE_INTRA_STRUCTS_H_
|
|
#define _IHEVCE_DECOMP_PRE_INTRA_STRUCTS_H_
|
|
|
|
/*****************************************************************************/
|
|
/* Constant Macros */
|
|
/*****************************************************************************/
|
|
|
|
/*For decomposition of every row we need some extra rows above n below that row*/
|
|
#define NUM_EXTRA_ROWS_REQ 3
|
|
|
|
/*Macros for pre intra early decisions*/
|
|
#define NUM_MODES 35
|
|
#define SAD_NOT_VALID 0xFFFFF
|
|
|
|
#define SET_T_AVAILABLE(x) (x = x | (1 << 8))
|
|
#define SET_L_AVAILABLE(x) (x = x | (1 << 7))
|
|
#define SET_TL_AVAILABLE(x) (x = x | (1 << 16))
|
|
#define SET_TR_AVAILABLE(x) (x = x | (1 << 12))
|
|
#define SET_BL_AVAILABLE(x) (x = x | (1 << 3))
|
|
#define SET_ALL_AVAILABLE(x) (x = (1 << 8) + (1 << 7) + (1 << 16) + (1 << 12) + (1 << 3))
|
|
|
|
#define SET_T_UNAVAILABLE(x) (x = x & ~((WORD32)1 << 8))
|
|
#define SET_L_UNAVAILABLE(x) (x = x & ~((WORD32)1 << 7))
|
|
#define SET_TL_UNAVAILABLE(x) (x = x & ~((WORD32)1 << 16))
|
|
#define SET_TR_UNAVAILABLE(x) (x = x & ~((WORD32)1 << 12))
|
|
#define SET_BL_UNAVAILABLE(x) (x = x & ~((WORD32)1 << 3))
|
|
#define SET_ALL_UNAVAILABLE(x) (x = 0)
|
|
|
|
#define CHECK_T_AVAILABLE(x) ((x & (1 << 8)) >> 8)
|
|
#define CHECK_L_AVAILABLE(x) ((x & (1 << 7)) >> 7)
|
|
#define CHECK_TL_AVAILABLE(x) ((x & (1 << 16)) >> 16)
|
|
#define CHECK_TR_AVAILABLE(x) ((x & (1 << 12)) >> 12)
|
|
#define CHECK_BL_AVAILABLE(x) ((x & (1 << 3)) >> 3)
|
|
|
|
/* q format for lamba used in the encoder */
|
|
#define LAMBDA_Q_SHIFT 8
|
|
|
|
/*****************************************************************************/
|
|
/* Enums */
|
|
/*****************************************************************************/
|
|
typedef enum
|
|
{
|
|
DECOMP_PRE_INTRA_CTXT = 0,
|
|
DECOMP_PRE_INTRA_THRDS_CTXT,
|
|
DECOMP_PRE_INTRA_ED_CTXT,
|
|
|
|
/* should always be the last entry */
|
|
NUM_DECOMP_PRE_INTRA_MEM_RECS
|
|
} DECOMP_PRE_INTRA_MEM_TABS_T;
|
|
|
|
/*****************************************************************************/
|
|
/* Structure */
|
|
/*****************************************************************************/
|
|
|
|
/**
|
|
******************************************************************************
|
|
* @brief Context for early intra or inter decision
|
|
******************************************************************************
|
|
*/
|
|
typedef struct
|
|
{
|
|
/** lambda for cost calculation */
|
|
WORD32 lambda;
|
|
|
|
/*Pointer to 4x4 blocks of entire frame */
|
|
ihevce_ed_blk_t *ps_ed_pic;
|
|
|
|
/*Pointer to present 4x4 block */
|
|
ihevce_ed_blk_t *ps_ed;
|
|
|
|
/*Pointer to ctb level data of entire frame */
|
|
ihevce_ed_ctb_l1_t *ps_ed_ctb_l1_pic;
|
|
|
|
/*Pointer to ctb level data of current ctb */
|
|
ihevce_ed_ctb_l1_t *ps_ed_ctb_l1;
|
|
|
|
/*Sum of best SATDs at L1*/
|
|
LWORD64 i8_sum_best_satd;
|
|
|
|
/*Sum of best SATDs at L1*/
|
|
LWORD64 i8_sum_sq_best_satd;
|
|
|
|
/** Encoder quality preset : See IHEVCE_QUALITY_CONFIG_T for presets */
|
|
WORD32 i4_quality_preset;
|
|
|
|
/*following are the changes for reducing the stack memory used by this module. Local variables are copied to context memory */
|
|
|
|
/** Neighbour flags. Used as local variable in pre_intra_process_row function. Shouldnt be used by other functions */
|
|
WORD32 ai4_nbr_flags[64];
|
|
|
|
/** reference data for four 4x4 blocks. This is used as local variable in ed_calc_8x8_blk */
|
|
UWORD8 au1_ref_full_ctb[4][18];
|
|
|
|
/** reference data for 8x8 block. This is used as local variable in ed_calc_8x8_blk */
|
|
UWORD8 au1_ref_8x8[1][33];
|
|
|
|
/** mode bits costs array. This is used as local variable in ed_calc_8x8_blk */
|
|
UWORD16 au2_mode_bits_cost_full_ctb[4][NUM_MODES];
|
|
|
|
/** Pointer to structure containing function pointers of common*/
|
|
func_selector_t *ps_func_selector;
|
|
|
|
} ihevce_ed_ctxt_t; //early decision
|
|
|
|
typedef struct
|
|
{
|
|
/** Actual Width of this layer */
|
|
WORD32 i4_actual_wd;
|
|
|
|
/** Actual height of this layer */
|
|
WORD32 i4_actual_ht;
|
|
|
|
/** Padded width of this layer */
|
|
WORD32 i4_padded_wd;
|
|
|
|
/** Padded height of this layer */
|
|
WORD32 i4_padded_ht;
|
|
|
|
/** input pointer. */
|
|
UWORD8 *pu1_inp;
|
|
|
|
/** stride of input buffer */
|
|
WORD32 i4_inp_stride;
|
|
|
|
/** Decomposition block height size */
|
|
WORD32 i4_decomp_blk_ht;
|
|
|
|
/** Decomposition block width size */
|
|
WORD32 i4_decomp_blk_wd;
|
|
|
|
/** Number of blocks in a row */
|
|
WORD32 i4_num_col_blks;
|
|
|
|
/** Number of rows in a layer */
|
|
WORD32 i4_num_row_blks;
|
|
WORD32 ai4_curr_row_no[MAX_NUM_CTB_ROWS_FRM];
|
|
|
|
WORD32 i4_num_rows_processed;
|
|
} decomp_layer_ctxt_t;
|
|
|
|
typedef struct
|
|
{
|
|
/* Number of layers */
|
|
WORD32 i4_num_layers;
|
|
|
|
/** Handles for all layers. Entry 0 refers to L0 , 3 refers to L3 */
|
|
decomp_layer_ctxt_t as_layers[MAX_NUM_HME_LAYERS];
|
|
|
|
/** Array for working memory of the thread */
|
|
UWORD8 au1_wkg_mem[((MAX_CTB_SIZE >> 1) * (MAX_CTB_SIZE + 2 * NUM_EXTRA_ROWS_REQ))];
|
|
|
|
/** Encoder quality preset : See IHEVCE_QUALITY_CONFIG_T for presets */
|
|
WORD32 i4_quality_preset;
|
|
|
|
/** ed_ctxt pointer. This memory is re-used across layers now */
|
|
ihevce_ed_ctxt_t *ps_ed_ctxt;
|
|
|
|
ihevce_ed_blk_t *ps_layer1_buf;
|
|
ihevce_ed_blk_t *ps_layer2_buf;
|
|
ihevce_ed_ctb_l1_t *ps_ed_ctb_l1;
|
|
|
|
WORD32 ai4_lambda[MAX_NUM_HME_LAYERS];
|
|
|
|
/* pointer to the structure ps_ctb_analyse in pre_enc_me_ctxt_t */
|
|
ctb_analyse_t *ps_ctb_analyse;
|
|
|
|
WORD32 i4_enable_noise_detection;
|
|
|
|
ihevce_ipe_optimised_function_list_t s_ipe_optimised_function_list;
|
|
|
|
ihevce_cmn_opt_func_t s_cmn_opt_func;
|
|
|
|
} ihevce_decomp_pre_intra_ctxt_t;
|
|
|
|
/**
|
|
******************************************************************************
|
|
* @brief Encode loop master context structure
|
|
******************************************************************************
|
|
*/
|
|
typedef struct
|
|
{
|
|
/** Array of encode loop structure */
|
|
ihevce_decomp_pre_intra_ctxt_t *aps_decomp_pre_intra_thrd_ctxt[MAX_NUM_FRM_PROC_THRDS_PRE_ENC];
|
|
|
|
/** Number of processing threads created run time */
|
|
WORD32 i4_num_proc_thrds;
|
|
|
|
} ihevce_decomp_pre_intra_master_ctxt_t;
|
|
|
|
/*****************************************************************************/
|
|
/* Extern Variable Declarations */
|
|
/*****************************************************************************/
|
|
|
|
/*****************************************************************************/
|
|
/* Extern Function Declarations */
|
|
/*****************************************************************************/
|
|
|
|
#endif /* _IHEVCE_DECOMP_PRE_INTRA_STRUCTS_H_ */
|