/******************************************************************************
 *
 * 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_cmn_utils_instr_set_router.h
*
* \brief
*    This file contains declarations related to common utilities used in encoder
*
* \date
*    15/07/2013
*
* \author
*    Ittiam
*
* List of Functions
*
*
******************************************************************************
*/

#ifndef __IHEVCE_CMN_UTILS_INSTR_SET_ROUTER_H_
#define __IHEVCE_CMN_UTILS_INSTR_SET_ROUTER_H_

#include "ihevc_typedefs.h"
#include "ihevce_defs.h"

/*****************************************************************************/
/* Typedefs                                                                  */
/*****************************************************************************/
typedef UWORD32 FT_CALC_HAD_SATD_8BIT(UWORD8 *, WORD32, UWORD8 *, WORD32, WORD16 *, WORD32);

typedef LWORD64 FT_SSD_CALCULATOR(UWORD8 *, UWORD8 *, UWORD32, UWORD32, UWORD32, UWORD32);

typedef LWORD64 FT_SSD_AND_SAD_CALCULATOR(UWORD8 *, WORD32, UWORD8 *, WORD32, WORD32, UWORD32 *);

typedef void FT_CHROMA_INTERLEAVE_2D_COPY(
    UWORD8 *, WORD32, UWORD8 *, WORD32, WORD32, WORD32, CHROMA_PLANE_ID_T);

typedef void FT_COPY_2D(UWORD8 *, WORD32, UWORD8 *, WORD32, WORD32, WORD32);

typedef void FT_2D_SQUARE_COPY(void *, WORD32, void *, WORD32, WORD32, WORD32);

typedef void FT_WT_AVG_2D(
    UWORD8 *,
    UWORD8 *,
    WORD32,
    WORD32,
    WORD32,
    WORD32,
    UWORD8 *,
    WORD32,
    WORD32,
    WORD32,
    WORD32,
    WORD32,
    WORD32);

typedef void
    FT_ITRANS_RECON_DC(UWORD8 *, WORD32, UWORD8 *, WORD32, WORD32, WORD16, CHROMA_PLANE_ID_T);

typedef WORD32 FT_SCAN_COEFFS(WORD16 *, WORD32 *, WORD32, WORD32, UWORD8 *, UWORD8 *, WORD32);

typedef void FT_GET_EO_SAO_PARAMS(void *, WORD32, WORD32 *, WORD32 *);

/*****************************************************************************/
/* Structure                                                                 */
/*****************************************************************************/
typedef struct
{
    FT_CALC_HAD_SATD_8BIT *pf_HAD_4x4_8bit;
    FT_CALC_HAD_SATD_8BIT *pf_HAD_8x8_8bit;
    FT_CALC_HAD_SATD_8BIT *pf_HAD_16x16_8bit;
    FT_CALC_HAD_SATD_8BIT *pf_HAD_32x32_8bit;
    FT_CALC_HAD_SATD_8BIT *pf_AC_HAD_8x8_8bit;
    FT_CALC_HAD_SATD_8BIT *pf_chroma_HAD_4x4_8bit;
    FT_CALC_HAD_SATD_8BIT *pf_chroma_AC_HAD_4x4_8bit;
    FT_CALC_HAD_SATD_8BIT *pf_chroma_HAD_8x8_8bit;
    FT_CALC_HAD_SATD_8BIT *pf_chroma_HAD_16x16_8bit;
    FT_SSD_CALCULATOR *pf_ssd_calculator;
    FT_SSD_CALCULATOR *pf_chroma_interleave_ssd_calculator;
    FT_SSD_AND_SAD_CALCULATOR *pf_ssd_and_sad_calculator;
    FT_CHROMA_INTERLEAVE_2D_COPY *pf_chroma_interleave_2d_copy;
    FT_COPY_2D *pf_copy_2d;
    FT_2D_SQUARE_COPY *pf_2d_square_copy;
    FT_WT_AVG_2D *pf_wt_avg_2d;
    FT_ITRANS_RECON_DC *pf_itrans_recon_dc;
    FT_SCAN_COEFFS *pf_scan_coeffs;
    FT_GET_EO_SAO_PARAMS *pf_get_luma_eo_sao_params;
    FT_GET_EO_SAO_PARAMS *pf_get_chroma_eo_sao_params;
} ihevce_cmn_opt_func_t;

/*****************************************************************************/
/* Extern Function Declarations                                              */
/*****************************************************************************/
void ihevce_cmn_utils_instr_set_router(
    ihevce_cmn_opt_func_t *ps_func_list, UWORD8 u1_is_popcnt_available, IV_ARCH_T e_arch);

/* Function List - C */
FT_CALC_HAD_SATD_8BIT ihevce_HAD_4x4_8bit;
FT_CALC_HAD_SATD_8BIT ihevce_HAD_8x8_8bit;
FT_CALC_HAD_SATD_8BIT ihevce_HAD_16x16_8bit;
FT_CALC_HAD_SATD_8BIT ihevce_HAD_32x32_8bit;
FT_CALC_HAD_SATD_8BIT ihevce_compute_ac_had_8x8_8bit;
FT_CALC_HAD_SATD_8BIT ihevce_chroma_HAD_4x4_8bit;
FT_CALC_HAD_SATD_8BIT ihevce_chroma_compute_AC_HAD_4x4_8bit;
FT_CALC_HAD_SATD_8BIT ihevce_chroma_HAD_8x8_8bit;
FT_CALC_HAD_SATD_8BIT ihevce_chroma_HAD_16x16_8bit;
FT_SSD_CALCULATOR ihevce_ssd_calculator;
FT_SSD_CALCULATOR ihevce_chroma_interleave_ssd_calculator;
FT_SSD_AND_SAD_CALCULATOR ihevce_ssd_and_sad_calculator;
FT_CHROMA_INTERLEAVE_2D_COPY ihevce_chroma_interleave_2d_copy;
FT_COPY_2D ihevce_copy_2d;
FT_2D_SQUARE_COPY ihevce_2d_square_copy_luma;
FT_WT_AVG_2D ihevce_wt_avg_2d;
FT_ITRANS_RECON_DC ihevce_itrans_recon_dc;
FT_SCAN_COEFFS ihevce_scan_coeffs;
FT_GET_EO_SAO_PARAMS ihevce_get_luma_eo_sao_params;
FT_GET_EO_SAO_PARAMS ihevce_get_chroma_eo_sao_params;

#ifdef ENABLE_NEON
FT_CALC_HAD_SATD_8BIT ihevce_HAD_4x4_8bit_neon;
FT_CALC_HAD_SATD_8BIT ihevce_HAD_8x8_8bit_neon;
FT_CALC_HAD_SATD_8BIT ihevce_chroma_compute_AC_HAD_4x4_8bit_neon;
FT_CALC_HAD_SATD_8BIT ihevce_compute_ac_had_8x8_8bit_neon;
FT_CALC_HAD_SATD_8BIT ihevce_HAD_16x16_8bit_neon;
FT_CALC_HAD_SATD_8BIT ihevce_chroma_HAD_4x4_8bit_neon;
FT_CALC_HAD_SATD_8BIT ihevce_chroma_HAD_8x8_8bit_neon;
FT_CALC_HAD_SATD_8BIT ihevce_chroma_HAD_16x16_8bit_neon;
FT_CALC_HAD_SATD_8BIT ihevce_HAD_32x32_8bit_neon;
FT_SSD_CALCULATOR ihevce_ssd_calculator_neon;
FT_SSD_CALCULATOR ihevce_chroma_interleave_ssd_calculator_neon;
FT_SSD_AND_SAD_CALCULATOR ihevce_ssd_and_sad_calculator_neon;
FT_2D_SQUARE_COPY ihevce_2d_square_copy_luma_neon;
FT_CHROMA_INTERLEAVE_2D_COPY ihevce_chroma_interleave_2d_copy_neon;
FT_COPY_2D ihevce_copy_2d_neon;
FT_GET_EO_SAO_PARAMS ihevce_get_luma_eo_sao_params_neon;
FT_ITRANS_RECON_DC ihevce_itrans_recon_dc_neon;
FT_GET_EO_SAO_PARAMS ihevce_get_chroma_eo_sao_params_neon;
FT_SCAN_COEFFS ihevce_scan_coeffs_neon;
FT_WT_AVG_2D ihevce_wt_avg_2d_neon;
#endif

#endif
