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.

413 lines
18 KiB

/******************************************************************************
*
* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
*
* 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.
*
******************************************************************************/
/**
*******************************************************************************
* @file
* ihevc_intra_pred.h
*
* @brief
* Declarations for the fucntions defined in ihevc_intra_pred_filters
*
* @author
* Mamatha
*
*
* @remarks
* None
*
*******************************************************************************
*/
#ifndef IHEVC_INTRA_PRED_H_
#define IHEVC_INTRA_PRED_H_
/*****************************************************************************/
/* Macro definitions */
/*****************************************************************************/
#define look_up_trailing_zeros(x) (0 == (x) ? 8 : CTZ(x))
#define GET_BIT(y,x) ((y) & (1 << (x)))
/*****************************************************************************/
/* Function Declarations */
/*****************************************************************************/
typedef void ihevc_intra_pred_luma_planar_ft(
UWORD8 *pu1_ref,
WORD32 src_strd,
UWORD8 *pu1_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode);
typedef void ihevc_intra_pred_luma_dc_ft(
UWORD8 *pu1_ref,
WORD32 src_strd,
UWORD8 *pu1_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode);
typedef void ihevc_intra_pred_luma_horz_ft(
UWORD8 *pu1_ref,
WORD32 src_strd,
UWORD8 *pu1_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode);
typedef void ihevc_intra_pred_luma_ver_ft(
UWORD8 *pu1_ref,
WORD32 src_strd,
UWORD8 *pu1_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode);
typedef void ihevc_intra_pred_luma_mode2_ft(
UWORD8 *pu1_ref,
WORD32 src_strd,
UWORD8 *pu1_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode);
typedef void ihevc_intra_pred_luma_mode_18_34_ft(
UWORD8 *pu1_ref,
WORD32 src_strd,
UWORD8 *pu1_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode);
typedef void ihevc_intra_pred_luma_mode_3_to_9_ft(
UWORD8 *pu1_ref,
WORD32 src_strd,
UWORD8 *pu1_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode);
typedef void ihevc_intra_pred_luma_mode_11_to_17_ft(
UWORD8 *pu1_ref,
WORD32 src_strd,
UWORD8 *pu1_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode);
typedef void ihevc_intra_pred_luma_mode_19_to_25_ft(
UWORD8 *pu1_ref,
WORD32 src_strd,
UWORD8 *pu1_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode);
typedef void ihevc_intra_pred_luma_mode_27_to_33_ft(
UWORD8 *pu1_ref,
WORD32 src_strd,
UWORD8 *pu1_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode);
typedef void ihevc_intra_pred_luma_ref_substitution_ft(UWORD8 *pu1_top_left,
UWORD8 *pu1_top,
UWORD8 *pu1_left,
WORD32 src_strd,
WORD32 nt,
WORD32 nbr_flags,
UWORD8 *pu1_dst,
WORD32 dst_strd);
typedef void ihevc_intra_pred_luma_ref_subst_all_avlble_ft(UWORD8 *pu1_top_left,
UWORD8 *pu1_top,
UWORD8 *pu1_left,
WORD32 src_strd,
WORD32 nt,
WORD32 nbr_flags,
UWORD8 *pu1_dst,
WORD32 dst_strd);
typedef void ihevc_intra_pred_ref_filtering_ft(UWORD8 *pu1_src,
WORD32 nt,
UWORD8 *pu1_dst,
WORD32 mode,
WORD32 strong_intra_smoothing_enable_flag);
typedef void ihevc_hbd_intra_pred_luma_planar_ft(
UWORD16 *pu2_ref,
WORD32 src_strd,
UWORD16 *pu2_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode,
UWORD8 bit_depth);
typedef void ihevc_hbd_intra_pred_luma_dc_ft(
UWORD16 *pu2_ref,
WORD32 src_strd,
UWORD16 *pu2_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode,
UWORD8 bit_depth);
typedef void ihevc_hbd_intra_pred_luma_horz_ft(
UWORD16 *pu2_ref,
WORD32 src_strd,
UWORD16 *pu2_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode,
UWORD8 bit_depth);
typedef void ihevc_hbd_intra_pred_luma_ver_ft(
UWORD16 *pu2_ref,
WORD32 src_strd,
UWORD16 *pu2_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode,
UWORD8 bit_depth);
typedef void ihevc_hbd_intra_pred_luma_mode2_ft(
UWORD16 *pu2_ref,
WORD32 src_strd,
UWORD16 *pu2_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode,
UWORD8 bit_depth);
typedef void ihevc_hbd_intra_pred_luma_mode_18_34_ft(
UWORD16 *pu2_ref,
WORD32 src_strd,
UWORD16 *pu2_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode,
UWORD8 bit_depth);
typedef void ihevc_hbd_intra_pred_luma_mode_3_to_9_ft(
UWORD16 *pu2_ref,
WORD32 src_strd,
UWORD16 *pu2_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode,
UWORD8 bit_depth);
typedef void ihevc_hbd_intra_pred_luma_mode_11_to_17_ft(
UWORD16 *pu2_ref,
WORD32 src_strd,
UWORD16 *pu2_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode,
UWORD8 bit_depth);
typedef void ihevc_hbd_intra_pred_luma_mode_19_to_25_ft(
UWORD16 *pu2_ref,
WORD32 src_strd,
UWORD16 *pu2_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode,
UWORD8 bit_depth);
typedef void ihevc_hbd_intra_pred_luma_mode_27_to_33_ft(
UWORD16 *pu2_ref,
WORD32 src_strd,
UWORD16 *pu2_dst,
WORD32 dst_strd,
WORD32 nt,
WORD32 mode,
UWORD8 bit_depth);
typedef void ihevc_hbd_intra_pred_luma_ref_substitution_ft(UWORD16 *pu2_top_left,
UWORD16 *pu2_top,
UWORD16 *pu2_left,
WORD32 src_strd,
WORD32 nt,
WORD32 nbr_flags,
UWORD16 *pu2_dst,
WORD32 dst_strd,
UWORD8 bit_depth);
typedef void ihevc_hbd_intra_pred_ref_filtering_ft(UWORD16 *pu2_src,
WORD32 nt,
UWORD16 *pu2_dst,
WORD32 mode,
WORD32 strong_intra_smoothing_enable_flag,
UWORD8 bit_depth);
/* C function declarations */
ihevc_intra_pred_luma_planar_ft ihevc_intra_pred_luma_planar;
ihevc_intra_pred_luma_dc_ft ihevc_intra_pred_luma_dc;
ihevc_intra_pred_luma_horz_ft ihevc_intra_pred_luma_horz;
ihevc_intra_pred_luma_ver_ft ihevc_intra_pred_luma_ver;
ihevc_intra_pred_luma_mode2_ft ihevc_intra_pred_luma_mode2;
ihevc_intra_pred_luma_mode_18_34_ft ihevc_intra_pred_luma_mode_18_34;
ihevc_intra_pred_luma_mode_3_to_9_ft ihevc_intra_pred_luma_mode_3_to_9;
ihevc_intra_pred_luma_mode_11_to_17_ft ihevc_intra_pred_luma_mode_11_to_17;
ihevc_intra_pred_luma_mode_19_to_25_ft ihevc_intra_pred_luma_mode_19_to_25;
ihevc_intra_pred_luma_mode_27_to_33_ft ihevc_intra_pred_luma_mode_27_to_33;
ihevc_intra_pred_luma_ref_substitution_ft ihevc_intra_pred_luma_ref_substitution;
ihevc_intra_pred_luma_ref_subst_all_avlble_ft ihevc_intra_pred_luma_ref_subst_all_avlble;
ihevc_intra_pred_ref_filtering_ft ihevc_intra_pred_ref_filtering;
ihevc_hbd_intra_pred_luma_planar_ft ihevc_hbd_intra_pred_luma_planar;
ihevc_hbd_intra_pred_luma_dc_ft ihevc_hbd_intra_pred_luma_dc;
ihevc_hbd_intra_pred_luma_horz_ft ihevc_hbd_intra_pred_luma_horz;
ihevc_hbd_intra_pred_luma_ver_ft ihevc_hbd_intra_pred_luma_ver;
ihevc_hbd_intra_pred_luma_mode2_ft ihevc_hbd_intra_pred_luma_mode2;
ihevc_hbd_intra_pred_luma_mode_18_34_ft ihevc_hbd_intra_pred_luma_mode_18_34;
ihevc_hbd_intra_pred_luma_mode_3_to_9_ft ihevc_hbd_intra_pred_luma_mode_3_to_9;
ihevc_hbd_intra_pred_luma_mode_11_to_17_ft ihevc_hbd_intra_pred_luma_mode_11_to_17;
ihevc_hbd_intra_pred_luma_mode_19_to_25_ft ihevc_hbd_intra_pred_luma_mode_19_to_25;
ihevc_hbd_intra_pred_luma_mode_27_to_33_ft ihevc_hbd_intra_pred_luma_mode_27_to_33;
ihevc_hbd_intra_pred_luma_ref_substitution_ft ihevc_hbd_intra_pred_luma_ref_substitution;
ihevc_hbd_intra_pred_ref_filtering_ft ihevc_hbd_intra_pred_ref_filtering;
/* A9Q function declarations */
ihevc_intra_pred_luma_planar_ft ihevc_intra_pred_luma_planar_a9q;
ihevc_intra_pred_luma_dc_ft ihevc_intra_pred_luma_dc_a9q;
ihevc_intra_pred_luma_horz_ft ihevc_intra_pred_luma_horz_a9q;
ihevc_intra_pred_luma_ver_ft ihevc_intra_pred_luma_ver_a9q;
ihevc_intra_pred_luma_mode2_ft ihevc_intra_pred_luma_mode2_a9q;
ihevc_intra_pred_luma_mode_18_34_ft ihevc_intra_pred_luma_mode_18_34_a9q;
ihevc_intra_pred_luma_mode_3_to_9_ft ihevc_intra_pred_luma_mode_3_to_9_a9q;
ihevc_intra_pred_luma_mode_11_to_17_ft ihevc_intra_pred_luma_mode_11_to_17_a9q;
ihevc_intra_pred_luma_mode_19_to_25_ft ihevc_intra_pred_luma_mode_19_to_25_a9q;
ihevc_intra_pred_luma_mode_27_to_33_ft ihevc_intra_pred_luma_mode_27_to_33_a9q;
ihevc_intra_pred_luma_ref_substitution_ft ihevc_intra_pred_luma_ref_substitution_a9q;
ihevc_intra_pred_ref_filtering_ft ihevc_intra_pred_ref_filtering_a9q;
/* A9 A function declarations */
ihevc_intra_pred_luma_planar_ft ihevc_intra_pred_luma_planar_a9a;
ihevc_intra_pred_luma_dc_ft ihevc_intra_pred_luma_dc_a9a;
ihevc_intra_pred_luma_horz_ft ihevc_intra_pred_luma_horz_a9a;
ihevc_intra_pred_luma_ver_ft ihevc_intra_pred_luma_ver_a9a;
ihevc_intra_pred_luma_mode2_ft ihevc_intra_pred_luma_mode2_a9a;
ihevc_intra_pred_luma_mode_18_34_ft ihevc_intra_pred_luma_mode_18_34_a9a;
ihevc_intra_pred_luma_mode_3_to_9_ft ihevc_intra_pred_luma_mode_3_to_9_a9a;
ihevc_intra_pred_luma_mode_11_to_17_ft ihevc_intra_pred_luma_mode_11_to_17_a9a;
ihevc_intra_pred_luma_mode_19_to_25_ft ihevc_intra_pred_luma_mode_19_to_25_a9a;
ihevc_intra_pred_luma_mode_27_to_33_ft ihevc_intra_pred_luma_mode_27_to_33_a9a;
ihevc_intra_pred_luma_ref_substitution_ft ihevc_intra_pred_luma_ref_substitution_a9a;
ihevc_intra_pred_ref_filtering_ft ihevc_intra_pred_ref_filtering_a9a;
/* NEONINTR function declarations */
ihevc_intra_pred_luma_planar_ft ihevc_intra_pred_luma_planar_neonintr;
ihevc_intra_pred_luma_dc_ft ihevc_intra_pred_luma_dc_neonintr;
ihevc_intra_pred_luma_horz_ft ihevc_intra_pred_luma_horz_neonintr;
ihevc_intra_pred_luma_ver_ft ihevc_intra_pred_luma_ver_neonintr;
ihevc_intra_pred_luma_mode2_ft ihevc_intra_pred_luma_mode2_neonintr;
ihevc_intra_pred_luma_mode_18_34_ft ihevc_intra_pred_luma_mode_18_34_neonintr;
ihevc_intra_pred_luma_mode_3_to_9_ft ihevc_intra_pred_luma_mode_3_to_9_neonintr;
ihevc_intra_pred_luma_mode_11_to_17_ft ihevc_intra_pred_luma_mode_11_to_17_neonintr;
ihevc_intra_pred_luma_mode_19_to_25_ft ihevc_intra_pred_luma_mode_19_to_25_neonintr;
ihevc_intra_pred_luma_mode_27_to_33_ft ihevc_intra_pred_luma_mode_27_to_33_neonintr;
ihevc_intra_pred_luma_ref_substitution_ft ihevc_intra_pred_luma_ref_substitution_neonintr;
ihevc_intra_pred_ref_filtering_ft ihevc_intra_pred_ref_filtering_neonintr;
/* SSSE31 function declarations */
ihevc_intra_pred_luma_planar_ft ihevc_intra_pred_luma_planar_ssse3;
ihevc_intra_pred_luma_dc_ft ihevc_intra_pred_luma_dc_ssse3;
ihevc_intra_pred_luma_horz_ft ihevc_intra_pred_luma_horz_ssse3;
ihevc_intra_pred_luma_ver_ft ihevc_intra_pred_luma_ver_ssse3;
ihevc_intra_pred_luma_mode2_ft ihevc_intra_pred_luma_mode2_ssse3;
ihevc_intra_pred_luma_mode_18_34_ft ihevc_intra_pred_luma_mode_18_34_ssse3;
ihevc_intra_pred_luma_mode_3_to_9_ft ihevc_intra_pred_luma_mode_3_to_9_ssse3;
ihevc_intra_pred_luma_mode_11_to_17_ft ihevc_intra_pred_luma_mode_11_to_17_ssse3;
ihevc_intra_pred_luma_mode_19_to_25_ft ihevc_intra_pred_luma_mode_19_to_25_ssse3;
ihevc_intra_pred_luma_mode_27_to_33_ft ihevc_intra_pred_luma_mode_27_to_33_ssse3;
ihevc_intra_pred_luma_ref_substitution_ft ihevc_intra_pred_luma_ref_substitution_ssse3;
ihevc_intra_pred_ref_filtering_ft ihevc_intra_pred_ref_filtering_ssse3;
/* SSE42 function declarations */
ihevc_intra_pred_luma_dc_ft ihevc_intra_pred_luma_dc_sse42;
ihevc_intra_pred_luma_horz_ft ihevc_intra_pred_luma_horz_sse42;
ihevc_intra_pred_luma_ver_ft ihevc_intra_pred_luma_ver_sse42;
ihevc_intra_pred_luma_mode_3_to_9_ft ihevc_intra_pred_luma_mode_3_to_9_sse42;
ihevc_intra_pred_luma_mode_11_to_17_ft ihevc_intra_pred_luma_mode_11_to_17_sse42;
ihevc_intra_pred_luma_mode_19_to_25_ft ihevc_intra_pred_luma_mode_19_to_25_sse42;
ihevc_intra_pred_luma_mode_27_to_33_ft ihevc_intra_pred_luma_mode_27_to_33_sse42;
ihevc_intra_pred_ref_filtering_ft ihevc_intra_pred_ref_filtering_sse42;
ihevc_hbd_intra_pred_luma_planar_ft ihevc_hbd_intra_pred_luma_planar_sse42;
ihevc_hbd_intra_pred_luma_dc_ft ihevc_hbd_intra_pred_luma_dc_sse42;
ihevc_hbd_intra_pred_luma_horz_ft ihevc_hbd_intra_pred_luma_horz_sse42;
ihevc_hbd_intra_pred_luma_ver_ft ihevc_hbd_intra_pred_luma_ver_sse42;
ihevc_hbd_intra_pred_luma_mode2_ft ihevc_hbd_intra_pred_luma_mode2_sse42;
ihevc_hbd_intra_pred_luma_mode_18_34_ft ihevc_hbd_intra_pred_luma_mode_18_34_sse42;
ihevc_hbd_intra_pred_luma_mode_3_to_9_ft ihevc_hbd_intra_pred_luma_mode_3_to_9_sse42;
ihevc_hbd_intra_pred_luma_mode_11_to_17_ft ihevc_hbd_intra_pred_luma_mode_11_to_17_sse42;
ihevc_hbd_intra_pred_luma_mode_19_to_25_ft ihevc_hbd_intra_pred_luma_mode_19_to_25_sse42;
ihevc_hbd_intra_pred_luma_mode_27_to_33_ft ihevc_hbd_intra_pred_luma_mode_27_to_33_sse42;
ihevc_hbd_intra_pred_luma_ref_substitution_ft ihevc_hbd_intra_pred_luma_ref_substitution_sse42;
ihevc_hbd_intra_pred_ref_filtering_ft ihevc_hbd_intra_pred_ref_filtering_sse42;
/* AVX function declaration*/
ihevc_intra_pred_luma_dc_ft ihevc_intra_pred_luma_dc_avx;
ihevc_intra_pred_luma_mode_18_34_ft ihevc_intra_pred_luma_mode_18_34_avx;
ihevc_intra_pred_luma_ver_ft ihevc_intra_pred_luma_ver_avx;
ihevc_hbd_intra_pred_luma_dc_ft ihevc_hbd_intra_pred_luma_dc_avx;
ihevc_hbd_intra_pred_luma_mode_18_34_ft ihevc_hbd_intra_pred_luma_mode_18_34_avx;
ihevc_hbd_intra_pred_luma_ver_ft ihevc_hbd_intra_pred_luma_ver_avx;
ihevc_hbd_intra_pred_ref_filtering_ft ihevc_hbd_intra_pred_ref_filtering_avx;
/* armv8 function declarations */
ihevc_intra_pred_luma_planar_ft ihevc_intra_pred_luma_planar_av8;
ihevc_intra_pred_luma_dc_ft ihevc_intra_pred_luma_dc_av8;
ihevc_intra_pred_luma_horz_ft ihevc_intra_pred_luma_horz_av8;
ihevc_intra_pred_luma_ver_ft ihevc_intra_pred_luma_ver_av8;
ihevc_intra_pred_luma_mode2_ft ihevc_intra_pred_luma_mode2_av8;
ihevc_intra_pred_luma_mode_18_34_ft ihevc_intra_pred_luma_mode_18_34_av8;
ihevc_intra_pred_luma_mode_3_to_9_ft ihevc_intra_pred_luma_mode_3_to_9_av8;
ihevc_intra_pred_luma_mode_11_to_17_ft ihevc_intra_pred_luma_mode_11_to_17_av8;
ihevc_intra_pred_luma_mode_19_to_25_ft ihevc_intra_pred_luma_mode_19_to_25_av8;
ihevc_intra_pred_luma_mode_27_to_33_ft ihevc_intra_pred_luma_mode_27_to_33_av8;
ihevc_intra_pred_luma_ref_substitution_ft ihevc_intra_pred_luma_ref_substitution_av8;
ihevc_intra_pred_ref_filtering_ft ihevc_intra_pred_ref_filtering_av8;
#endif /* IHEVC_INTRA_PRED_H_ */