305 lines
8.1 KiB
C
305 lines
8.1 KiB
C
/******************************************************************************
|
|
*
|
|
* 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_ */
|