aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2023-01-26 18:44:25 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-01-26 18:44:25 +0000
commitcfac8d308d9514792cabee60d0651ee0c6f7da91 (patch)
treeefe121793edfc3b552583bdfcea2296c7d08829a
parent1bbddd6a6ce5121f7929180ae391c3a259b032a2 (diff)
parent8f2de1e5996456b484eb84f217faa331dac2644b (diff)
downloadlibhevc-cfac8d308d9514792cabee60d0651ee0c6f7da91.tar.gz
Merge "Add riscv64 to libhevc" am: a3cac8c9d7 am: 8f2de1e599
Original change: https://android-review.googlesource.com/c/platform/external/libhevc/+/2402877 Change-Id: Ieb3c7cdca962f2c9f3cdb062b49da0a02329e9be Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--Android.bp15
-rw-r--r--common/ivd.h3
-rw-r--r--common/riscv64/ihevc_func_selector.h227
-rw-r--r--common/riscv64/ihevc_platform_macros.h174
-rw-r--r--decoder/riscv64/ihevcd_function_selector.c76
-rw-r--r--decoder/riscv64/ihevcd_function_selector_generic.c162
6 files changed, 656 insertions, 1 deletions
diff --git a/Android.bp b/Android.bp
index 76ce4c7..a7ca755 100644
--- a/Android.bp
+++ b/Android.bp
@@ -401,6 +401,16 @@ cc_library_static {
"common/x86/ihevc_tables_x86_intr.c",
],
},
+ riscv64: {
+ local_include_dirs: [
+ "common/riscv64",
+ ],
+
+ srcs: [
+ "decoder/riscv64/ihevcd_function_selector.c",
+ "decoder/riscv64/ihevcd_function_selector_generic.c",
+ ],
+ },
},
sanitize: {
@@ -786,6 +796,11 @@ cc_library_static {
],
},
+ riscv64: {
+ local_include_dirs: [
+ "common/riscv64",
+ ],
+ },
},
sanitize: {
integer_overflow: true,
diff --git a/common/ivd.h b/common/ivd.h
index a3dae2d..6e08f91 100644
--- a/common/ivd.h
+++ b/common/ivd.h
@@ -67,7 +67,8 @@ typedef enum
ARCH_X86_SSE42,
ARCH_X86_AVX2,
ARCH_MIPS_GENERIC = 0x200,
- ARCH_MIPS_32
+ ARCH_MIPS_32,
+ ARCH_RISCV64_GENERIC = 0x400,
}IVD_ARCH_T;
/* IVD_SOC_T: SOC Enumeration */
diff --git a/common/riscv64/ihevc_func_selector.h b/common/riscv64/ihevc_func_selector.h
new file mode 100644
index 0000000..20a5a66
--- /dev/null
+++ b/common/riscv64/ihevc_func_selector.h
@@ -0,0 +1,227 @@
+/******************************************************************************
+*
+* 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_func_selector.h
+*
+* @brief
+* For each function decide whether to use C function, or Neon intrinsics
+* or Cortex A8 intrinsics or Neon assembly or cortex a8 assembly
+*
+* @author
+* Harish
+*
+* @remarks
+* None
+*
+*******************************************************************************
+*/
+
+#ifndef __IHEVC_FUNC_SELECTOR_H__
+#define __IHEVC_FUNC_SELECTOR_H__
+
+#include "ihevc_func_types.h"
+
+#define INTER_PRED_LUMA_COPY C
+#define INTER_PRED_LUMA_HORZ C
+#define INTER_PRED_LUMA_VERT C
+#define INTER_PRED_LUMA_COPY_W16OUT C
+#define INTER_PRED_LUMA_HORZ_W16OUT C
+
+#define INTER_PRED_LUMA_VERT_W16OUT C
+#define INTER_PRED_LUMA_VERT_W16INP C
+#define INTER_PRED_LUMA_VERT_W16INP_W16OUT C
+
+#define INTER_PRED_CHROMA_COPY C
+#define INTER_PRED_CHROMA_HORZ C
+#define INTER_PRED_CHROMA_VERT C
+#define INTER_PRED_CHROMA_COPY_W16OUT C
+#define INTER_PRED_CHROMA_HORZ_W16OUT C
+#define INTER_PRED_CHROMA_VERT_W16OUT C
+#define INTER_PRED_CHROMA_VERT_W16INP C
+#define INTER_PRED_CHROMA_VERT_W16INP_W16OUT C
+
+#define WEIGHTED_PRED_UNI C
+#define WEIGHTED_PRED_BI C
+#define WEIGHTED_PRED_BI_DEFAULT C
+#define WEIGHTED_PRED_CHROMA_UNI C
+#define WEIGHTED_PRED_CHROMA_BI C
+#define WEIGHTED_PRED_CHROMA_BI_DEFAULT C
+
+#define PAD_VERT C
+#define PAD_HORZ C
+#define PAD_LEFT_LUMA C
+#define PAD_LEFT_CHROMA C
+#define PAD_RIGHT_LUMA C
+#define PAD_RIGHT_CHROMA C
+
+#define DEBLOCKING_ASM C
+#define DEBLK_LUMA_HORZ C
+#define DEBLK_LUMA_VERT C
+#define DEBLK_CHROMA_HORZ C
+#define DEBLK_CHROMA_VERT C
+
+#define SAO_BAND_OFFSET_LUMA C
+#define SAO_BAND_OFFSET_CHROMA C
+#define SAO_EDGE_OFFSET_CLASS0_LUMA C
+#define SAO_EDGE_OFFSET_CLASS1_LUMA C
+#define SAO_EDGE_OFFSET_CLASS2_LUMA C
+#define SAO_EDGE_OFFSET_CLASS3_LUMA C
+#define SAO_EDGE_OFFSET_CLASS0_CHROMA C
+#define SAO_EDGE_OFFSET_CLASS1_CHROMA C
+#define SAO_EDGE_OFFSET_CLASS2_CHROMA C
+#define SAO_EDGE_OFFSET_CLASS3_CHROMA C
+
+#define INTRA_PRED_LUMA_REF_SUBSTITUTION C
+#define INTRA_PRED_REF_FILTERING C
+#define INTRA_PRED_LUMA_PLANAR C
+#define INTRA_PRED_LUMA_DC C
+#define INTRA_PRED_LUMA_HORZ C
+#define INTRA_PRED_LUMA_VER C
+#define INTRA_PRED_LUMA_MODE_2 C
+#define INTRA_PRED_LUMA_MODE_18_34 C
+#define INTRA_PRED_LUMA_MODE_3_T0_9 C
+#define INTRA_PRED_LUMA_MODE_11_T0_17 C
+#define INTRA_PRED_LUMA_MODE_19_T0_25 C
+#define INTRA_PRED_LUMA_MODE_27_T0_33 C
+
+#define INTRA_PRED_CHROMA_PLANAR C
+#define INTRA_PRED_CHROMA_DC C
+#define INTRA_PRED_CHROMA_HOR C
+#define INTRA_PRED_CHROMA_VER C
+#define INTRA_PRED_CHROMA_MODE_2 C
+#define INTRA_PRED_CHROMA_18_34 C
+#define INTRA_PRED_CHROMA_3_T0_9 C
+#define INTRA_PRED_CHROMA_11_T0_17 C
+#define INTRA_PRED_CHROMA_19_T0_25 C
+#define INTRA_PRED_CHROMA_27_T0_33 C
+#define INTRA_PRED_CHROMA_REF_SUBSTITUTION C
+
+/* Forward transform functions */
+/* Luma */
+#define RESI_TRANS_QUANT_4X4_TTYPE1 C
+#define RESI_TRANS_QUANT_4X4 C
+#define RESI_TRANS_QUANT_8X8 C
+#define RESI_TRANS_QUANT_16X16 C
+#define RESI_TRANS_QUANT_32X32 C
+
+#define RESI_QUANT_4X4_TTYPE1 C
+#define RESI_QUANT_4X4 C
+#define RESI_QUANT_8X8 C
+#define RESI_QUANT_16X16 C
+#define RESI_QUANT_32X32 C
+
+#define RESI_TRANS_4X4_TTYPE1 C
+#define RESI_TRANS_4X4 C
+#define RESI_TRANS_8X8 C
+#define RESI_TRANS_16X16 C
+#define RESI_TRANS_32X32 C
+
+#define RESI_4X4_TTYPE1 C
+#define RESI_4X4 C
+#define RESI_8X8 C
+#define RESI_16X16 C
+#define RESI_32X32 C
+
+#define TRANS_4X4_TTYPE1 C
+#define TRANS_4X4 C
+#define TRANS_8X8 C
+#define TRANS_16X16 C
+#define TRANS_32X32 C
+
+#define QUANT_4X4_TTYPE1 C
+#define QUANT_4X4 C
+#define QUANT_8X8 C
+#define QUANT_16X16 C
+#define QUANT_32X32 C
+
+/* Chroma interleaved*/
+#define CHROMA_RESI_TRANS_QUANT_4X4 C
+#define CHROMA_RESI_TRANS_QUANT_8X8 C
+#define CHROMA_RESI_TRANS_QUANT_16X16 C
+
+#define CHROMA_RESI_QUANT_4X4 C
+#define CHROMA_RESI_QUANT_8X8 C
+#define CHROMA_RESI_QUANT_16X16 C
+
+#define CHROMA_RESI_TRANS_4X4 C
+#define CHROMA_RESI_TRANS_8X8 C
+#define CHROMA_RESI_TRANS_16X16 C
+
+#define CHROMA_RESI_4X4 C
+#define CHROMA_RESI_8X8 C
+#define CHROMA_RESI_16X16 C
+
+/* Inverse transform functions */
+/* Luma */
+#define IQUANT_ITRANS_RECON_4X4_TTYPE1 C
+#define IQUANT_ITRANS_RECON_4X4 C
+#define IQUANT_ITRANS_RECON_8X8 C
+#define IQUANT_ITRANS_RECON_16X16 C
+#define IQUANT_ITRANS_RECON_32X32 C
+
+#define IQUANT_RECON_4X4_TTYPE1 C
+#define IQUANT_RECON_4X4 C
+#define IQUANT_RECON_8X8 C
+#define IQUANT_RECON_16X16 C
+#define IQUANT_RECON_32X32 C
+
+#define ITRANS_RECON_4X4_TTYPE1 C
+#define ITRANS_RECON_4X4 C
+#define ITRANS_RECON_8X8 C
+#define ITRANS_RECON_16X16 C
+#define ITRANS_RECON_32X32 C
+
+#define RECON_4X4_TTYPE1 C
+#define RECON_4X4 C
+#define RECON_8X8 C
+#define RECON_16X16 C
+#define RECON_32X32 C
+
+#define ITRANS_4X4_TTYPE1 C
+#define ITRANS_4X4 C
+#define ITRANS_8X8 C
+#define ITRANS_16X16 C
+#define ITRANS_32X32 C
+
+/* Chroma interleaved */
+#define CHROMA_IQUANT_ITRANS_RECON_4X4 C
+#define CHROMA_IQUANT_ITRANS_RECON_8X8 C
+#define CHROMA_IQUANT_ITRANS_RECON_16X16 C
+
+#define CHROMA_IQUANT_RECON_4X4 C
+#define CHROMA_IQUANT_RECON_8X8 C
+#define CHROMA_IQUANT_RECON_16X16 C
+
+#define CHROMA_ITRANS_RECON_4X4 C
+#define CHROMA_ITRANS_RECON_8X8 C
+#define CHROMA_ITRANS_RECON_16X16 C
+
+#define CHROMA_RECON_4X4 C
+#define CHROMA_RECON_8X8 C
+#define CHROMA_RECON_16X16 C
+
+#define IHEVC_MEMCPY C
+#define IHEVC_MEMSET C
+#define IHEVC_MEMSET_16BIT C
+#define IHEVC_MEMCPY_MUL_8 C
+#define IHEVC_MEMSET_MUL_8 C
+#define IHEVC_MEMSET_16BIT_MUL_8 C
+
+#endif /* __IHEVC_FUNC_SELECTOR_H__ */
diff --git a/common/riscv64/ihevc_platform_macros.h b/common/riscv64/ihevc_platform_macros.h
new file mode 100644
index 0000000..41d20ca
--- /dev/null
+++ b/common/riscv64/ihevc_platform_macros.h
@@ -0,0 +1,174 @@
+/******************************************************************************
+*
+* 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_platform_macros.h
+*
+* @brief
+* Platform specific Macro definitions used in the codec
+*
+* @author
+* Ittiam
+*
+* @remarks
+* None
+*
+*******************************************************************************
+*/
+#ifndef _IHEVC_PLATFORM_MACROS_H_
+#define _IHEVC_PLATFORM_MACROS_H_
+
+#define CLIP_U8(x) CLIP3((x), 0, 255)
+#define CLIP_S8(x) CLIP3((x), -128, 127)
+
+#define CLIP_U10(x) CLIP3((x), 0, 1023);
+#define CLIP_S10(x) CLIP3((x), -512, 511);
+
+#define CLIP_U12(x) CLIP3((x), 0, 4095);
+#define CLIP_S12(x) CLIP3((x), -2048, 2047);
+
+#define CLIP_U14(x) CLIP3((x), 0, 16383);
+#define CLIP_S14(x) CLIP3((x), -8192, 8191);
+
+#define CLIP_U16(x) CLIP3((x), 0, 65535)
+#define CLIP_S16(x) CLIP3((x), -32768, 32767)
+
+#define ITT_BIG_ENDIAN(x) ((x & 0x000000ff) << 24) | \
+ ((x & 0x0000ff00) << 8) | \
+ ((x & 0x00ff0000) >> 8) | \
+ ((UWORD32)x >> 24);
+
+#define SHL(x,y) (((y) < 32) ? ((x) << (y)) : 0)
+#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
+
+#define SHR_NEG(val,shift) ((shift>0)?(val>>shift):(val<<(-shift)))
+#define SHL_NEG(val,shift) ((shift<0)?(val>>(-shift)):(val<<shift))
+
+#define INLINE inline
+
+#define POPCNT_U32(x) __builtin_popcount(x)
+
+static INLINE UWORD32 CLZ(UWORD32 u4_word)
+{
+ if(u4_word)
+ return (__builtin_clz(u4_word));
+ else
+ return 31;
+}
+
+static INLINE UWORD32 CLZNZ(UWORD32 u4_word)
+{
+ return (__builtin_clz(u4_word));
+}
+
+static INLINE UWORD32 CTZ(UWORD32 u4_word)
+{
+ if(0 == u4_word)
+ return 31;
+ else
+ {
+ unsigned int index;
+ index = __builtin_ctz(u4_word);
+ return (UWORD32)index;
+ }
+}
+
+#define DATA_SYNC() __sync_synchronize()
+
+/**
+******************************************************************************
+ * @brief returns postion of msb bit for 32bit input
+******************************************************************************
+ */
+#define GET_POS_MSB_32(r,word) \
+{ \
+ if(word) \
+ { \
+ r = 31 - __builtin_clz(word); \
+ } \
+ else \
+ { \
+ r = -1; \
+ } \
+}
+
+/**
+******************************************************************************
+ * @brief returns postion of msb bit for 64bit input
+******************************************************************************
+ */
+#define GET_POS_MSB_64(r,word) \
+{ \
+ if(word) \
+ { \
+ r = 63 - __builtin_clzll(word); \
+ } \
+ else \
+ { \
+ r = -1; \
+ } \
+}
+
+
+/**
+******************************************************************************
+ * @brief returns max number of bits required to represent input word (max 32bits)
+******************************************************************************
+ */
+#define GETRANGE(r,word) \
+{ \
+ if(word) \
+ { \
+ r = 32 - __builtin_clz(word); \
+ } \
+ else \
+ { \
+ r = 1; \
+ } \
+}
+
+
+/**
+*****************************************************************************************************
+* @brief returns max number of bits required to represent input unsigned long long word (max 64bits)
+*****************************************************************************************************
+*/
+#define GETRANGE64(r,llword) \
+{ \
+ if(llword) \
+ { \
+ r = 64 - __builtin_clzll(llword); \
+ } \
+ else \
+ { \
+ r = 1; \
+ } \
+}
+
+
+
+#define NOP(nop_cnt) {UWORD32 nop_i; for (nop_i = 0; nop_i < nop_cnt; nop_i++) asm("nop");}
+
+
+
+#define MEM_ALIGN8 __attribute__ ((aligned (8)))
+#define MEM_ALIGN16 __attribute__ ((aligned (16)))
+#define MEM_ALIGN32 __attribute__ ((aligned (32)))
+
+#endif /* _IHEVC_PLATFORM_MACROS_H_ */
diff --git a/decoder/riscv64/ihevcd_function_selector.c b/decoder/riscv64/ihevcd_function_selector.c
new file mode 100644
index 0000000..a2a13ed
--- /dev/null
+++ b/decoder/riscv64/ihevcd_function_selector.c
@@ -0,0 +1,76 @@
+/******************************************************************************
+*
+* 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
+* ihevcd_function_selector.c
+*
+* @brief
+* Contains functions to initialize function pointers used in hevc
+*
+* @author
+* Naveen
+*
+* @par List of Functions:
+* @remarks
+* None
+*
+*******************************************************************************
+*/
+/*****************************************************************************/
+/* File Includes */
+/*****************************************************************************/
+#include <stdio.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "ihevc_typedefs.h"
+#include "iv.h"
+#include "ivd.h"
+#include "ihevc_defs.h"
+#include "ihevc_debug.h"
+#include "ihevc_structs.h"
+#include "ihevc_macros.h"
+#include "ihevc_platform_macros.h"
+#include "ihevc_cabac_tables.h"
+#include "ihevc_disp_mgr.h"
+#include "ihevc_buf_mgr.h"
+#include "ihevc_dpb_mgr.h"
+#include "ihevc_error.h"
+
+#include "ihevcd_defs.h"
+#include "ihevcd_function_selector.h"
+#include "ihevcd_structs.h"
+
+void ihevcd_init_function_ptr(void *pv_codec)
+{
+ codec_t *ps_codec = (codec_t *)pv_codec;
+ switch(ps_codec->e_processor_arch)
+ {
+ default:
+ case ARCH_RISCV64_GENERIC:
+ ihevcd_init_function_ptr_generic(pv_codec);
+ }
+}
+
+void ihevcd_init_arch(void *pv_codec)
+{
+ codec_t *ps_codec = (codec_t *)pv_codec;
+ ps_codec->e_processor_arch = ARCH_RISCV64_GENERIC;
+}
diff --git a/decoder/riscv64/ihevcd_function_selector_generic.c b/decoder/riscv64/ihevcd_function_selector_generic.c
new file mode 100644
index 0000000..f8b53ad
--- /dev/null
+++ b/decoder/riscv64/ihevcd_function_selector_generic.c
@@ -0,0 +1,162 @@
+/******************************************************************************
+*
+* 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
+* ihevcd_function_selector.c
+*
+* @brief
+* Contains functions to initialize function pointers used in hevc
+*
+* @author
+* Naveen
+*
+* @par List of Functions:
+* @remarks
+* None
+*
+*******************************************************************************
+*/
+/*****************************************************************************/
+/* File Includes */
+/*****************************************************************************/
+#include <stdio.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "ihevc_typedefs.h"
+#include "iv.h"
+#include "ivd.h"
+#include "ihevc_defs.h"
+#include "ihevc_debug.h"
+#include "ihevc_structs.h"
+#include "ihevc_macros.h"
+#include "ihevc_platform_macros.h"
+#include "ihevc_cabac_tables.h"
+#include "ihevc_disp_mgr.h"
+#include "ihevc_buf_mgr.h"
+#include "ihevc_dpb_mgr.h"
+#include "ihevc_error.h"
+
+#include "ihevcd_defs.h"
+#include "ihevcd_function_selector.h"
+#include "ihevcd_structs.h"
+
+void ihevcd_init_function_ptr_generic(void *pv_codec)
+{
+ codec_t *ps_codec = (codec_t *)pv_codec;
+
+ ps_codec->s_func_selector.ihevc_deblk_chroma_horz_fptr = &ihevc_deblk_chroma_horz;
+ ps_codec->s_func_selector.ihevc_deblk_chroma_vert_fptr = &ihevc_deblk_chroma_vert;
+ ps_codec->s_func_selector.ihevc_deblk_luma_vert_fptr = &ihevc_deblk_luma_vert;
+ ps_codec->s_func_selector.ihevc_deblk_luma_horz_fptr = &ihevc_deblk_luma_horz;
+ ps_codec->s_func_selector.ihevc_inter_pred_chroma_copy_fptr = &ihevc_inter_pred_chroma_copy;
+ ps_codec->s_func_selector.ihevc_inter_pred_chroma_copy_w16out_fptr = &ihevc_inter_pred_chroma_copy_w16out;
+ ps_codec->s_func_selector.ihevc_inter_pred_chroma_horz_fptr = &ihevc_inter_pred_chroma_horz;
+ ps_codec->s_func_selector.ihevc_inter_pred_chroma_horz_w16out_fptr = &ihevc_inter_pred_chroma_horz_w16out;
+ ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_fptr = &ihevc_inter_pred_chroma_vert;
+ ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_w16inp_fptr = &ihevc_inter_pred_chroma_vert_w16inp;
+ ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_w16inp_w16out_fptr = &ihevc_inter_pred_chroma_vert_w16inp_w16out;
+ ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_w16out_fptr = &ihevc_inter_pred_chroma_vert_w16out;
+ ps_codec->s_func_selector.ihevc_inter_pred_luma_horz_fptr = &ihevc_inter_pred_luma_horz;
+ ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_fptr = &ihevc_inter_pred_luma_vert;
+ ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_w16out_fptr = &ihevc_inter_pred_luma_vert_w16out;
+ ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_w16inp_fptr = &ihevc_inter_pred_luma_vert_w16inp;
+ ps_codec->s_func_selector.ihevc_inter_pred_luma_copy_fptr = &ihevc_inter_pred_luma_copy;
+ ps_codec->s_func_selector.ihevc_inter_pred_luma_copy_w16out_fptr = &ihevc_inter_pred_luma_copy_w16out;
+ ps_codec->s_func_selector.ihevc_inter_pred_luma_horz_w16out_fptr = &ihevc_inter_pred_luma_horz_w16out;
+ ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_w16inp_w16out_fptr = &ihevc_inter_pred_luma_vert_w16inp_w16out;
+ ps_codec->s_func_selector.ihevc_intra_pred_chroma_ref_substitution_fptr = &ihevc_intra_pred_chroma_ref_substitution;
+ ps_codec->s_func_selector.ihevc_intra_pred_luma_ref_substitution_fptr = &ihevc_intra_pred_luma_ref_substitution;
+ ps_codec->s_func_selector.ihevc_intra_pred_luma_ref_subst_all_avlble_fptr = &ihevc_intra_pred_luma_ref_subst_all_avlble;
+ ps_codec->s_func_selector.ihevc_intra_pred_ref_filtering_fptr = &ihevc_intra_pred_ref_filtering;
+ ps_codec->s_func_selector.ihevc_intra_pred_chroma_dc_fptr = &ihevc_intra_pred_chroma_dc;
+ ps_codec->s_func_selector.ihevc_intra_pred_chroma_horz_fptr = &ihevc_intra_pred_chroma_horz;
+ ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode2_fptr = &ihevc_intra_pred_chroma_mode2;
+ ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_18_34_fptr = &ihevc_intra_pred_chroma_mode_18_34;
+ ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_27_to_33_fptr = &ihevc_intra_pred_chroma_mode_27_to_33;
+ ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_3_to_9_fptr = &ihevc_intra_pred_chroma_mode_3_to_9;
+ ps_codec->s_func_selector.ihevc_intra_pred_chroma_planar_fptr = &ihevc_intra_pred_chroma_planar;
+ ps_codec->s_func_selector.ihevc_intra_pred_chroma_ver_fptr = &ihevc_intra_pred_chroma_ver;
+ ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_11_to_17_fptr = &ihevc_intra_pred_chroma_mode_11_to_17;
+ ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_19_to_25_fptr = &ihevc_intra_pred_chroma_mode_19_to_25;
+ ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_11_to_17_fptr = &ihevc_intra_pred_luma_mode_11_to_17;
+ ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_19_to_25_fptr = &ihevc_intra_pred_luma_mode_19_to_25;
+ ps_codec->s_func_selector.ihevc_intra_pred_luma_dc_fptr = &ihevc_intra_pred_luma_dc;
+ ps_codec->s_func_selector.ihevc_intra_pred_luma_horz_fptr = &ihevc_intra_pred_luma_horz;
+ ps_codec->s_func_selector.ihevc_intra_pred_luma_mode2_fptr = &ihevc_intra_pred_luma_mode2;
+ ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_18_34_fptr = &ihevc_intra_pred_luma_mode_18_34;
+ ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_27_to_33_fptr = &ihevc_intra_pred_luma_mode_27_to_33;
+ ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_3_to_9_fptr = &ihevc_intra_pred_luma_mode_3_to_9;
+ ps_codec->s_func_selector.ihevc_intra_pred_luma_planar_fptr = &ihevc_intra_pred_luma_planar;
+ ps_codec->s_func_selector.ihevc_intra_pred_luma_ver_fptr = &ihevc_intra_pred_luma_ver;
+ ps_codec->s_func_selector.ihevc_itrans_4x4_ttype1_fptr = &ihevc_itrans_4x4_ttype1;
+ ps_codec->s_func_selector.ihevc_itrans_4x4_fptr = &ihevc_itrans_4x4;
+ ps_codec->s_func_selector.ihevc_itrans_8x8_fptr = &ihevc_itrans_8x8;
+ ps_codec->s_func_selector.ihevc_itrans_16x16_fptr = &ihevc_itrans_16x16;
+ ps_codec->s_func_selector.ihevc_itrans_32x32_fptr = &ihevc_itrans_32x32;
+ ps_codec->s_func_selector.ihevc_itrans_recon_4x4_ttype1_fptr = &ihevc_itrans_recon_4x4_ttype1;
+ ps_codec->s_func_selector.ihevc_itrans_recon_4x4_fptr = &ihevc_itrans_recon_4x4;
+ ps_codec->s_func_selector.ihevc_itrans_recon_8x8_fptr = &ihevc_itrans_recon_8x8;
+ ps_codec->s_func_selector.ihevc_itrans_recon_16x16_fptr = &ihevc_itrans_recon_16x16;
+ ps_codec->s_func_selector.ihevc_itrans_recon_32x32_fptr = &ihevc_itrans_recon_32x32;
+ ps_codec->s_func_selector.ihevc_chroma_itrans_recon_4x4_fptr = &ihevc_chroma_itrans_recon_4x4;
+ ps_codec->s_func_selector.ihevc_chroma_itrans_recon_8x8_fptr = &ihevc_chroma_itrans_recon_8x8;
+ ps_codec->s_func_selector.ihevc_chroma_itrans_recon_16x16_fptr = &ihevc_chroma_itrans_recon_16x16;
+ ps_codec->s_func_selector.ihevc_recon_4x4_ttype1_fptr = &ihevc_recon_4x4_ttype1;
+ ps_codec->s_func_selector.ihevc_recon_4x4_fptr = &ihevc_recon_4x4;
+ ps_codec->s_func_selector.ihevc_recon_8x8_fptr = &ihevc_recon_8x8;
+ ps_codec->s_func_selector.ihevc_recon_16x16_fptr = &ihevc_recon_16x16;
+ ps_codec->s_func_selector.ihevc_recon_32x32_fptr = &ihevc_recon_32x32;
+ ps_codec->s_func_selector.ihevc_chroma_recon_4x4_fptr = &ihevc_chroma_recon_4x4;
+ ps_codec->s_func_selector.ihevc_chroma_recon_8x8_fptr = &ihevc_chroma_recon_8x8;
+ ps_codec->s_func_selector.ihevc_chroma_recon_16x16_fptr = &ihevc_chroma_recon_16x16;
+ ps_codec->s_func_selector.ihevc_memcpy_mul_8_fptr = &ihevc_memcpy_mul_8;
+ ps_codec->s_func_selector.ihevc_memcpy_fptr = &ihevc_memcpy;
+ ps_codec->s_func_selector.ihevc_memset_mul_8_fptr = &ihevc_memset_mul_8;
+ ps_codec->s_func_selector.ihevc_memset_fptr = &ihevc_memset;
+ ps_codec->s_func_selector.ihevc_memset_16bit_mul_8_fptr = &ihevc_memset_16bit_mul_8;
+ ps_codec->s_func_selector.ihevc_memset_16bit_fptr = &ihevc_memset_16bit;
+ ps_codec->s_func_selector.ihevc_pad_left_luma_fptr = &ihevc_pad_left_luma;
+ ps_codec->s_func_selector.ihevc_pad_left_chroma_fptr = &ihevc_pad_left_chroma;
+ ps_codec->s_func_selector.ihevc_pad_right_luma_fptr = &ihevc_pad_right_luma;
+ ps_codec->s_func_selector.ihevc_pad_right_chroma_fptr = &ihevc_pad_right_chroma;
+ ps_codec->s_func_selector.ihevc_weighted_pred_bi_fptr = &ihevc_weighted_pred_bi;
+ ps_codec->s_func_selector.ihevc_weighted_pred_bi_default_fptr = &ihevc_weighted_pred_bi_default;
+ ps_codec->s_func_selector.ihevc_weighted_pred_uni_fptr = &ihevc_weighted_pred_uni;
+ ps_codec->s_func_selector.ihevc_weighted_pred_chroma_bi_fptr = &ihevc_weighted_pred_chroma_bi;
+ ps_codec->s_func_selector.ihevc_weighted_pred_chroma_bi_default_fptr = &ihevc_weighted_pred_chroma_bi_default;
+ ps_codec->s_func_selector.ihevc_weighted_pred_chroma_uni_fptr = &ihevc_weighted_pred_chroma_uni;
+ ps_codec->s_func_selector.ihevc_sao_band_offset_luma_fptr = &ihevc_sao_band_offset_luma;
+ ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr = &ihevc_sao_band_offset_chroma;
+ ps_codec->s_func_selector.ihevc_sao_edge_offset_class0_fptr = &ihevc_sao_edge_offset_class0;
+ ps_codec->s_func_selector.ihevc_sao_edge_offset_class0_chroma_fptr = &ihevc_sao_edge_offset_class0_chroma;
+ ps_codec->s_func_selector.ihevc_sao_edge_offset_class1_fptr = &ihevc_sao_edge_offset_class1;
+ ps_codec->s_func_selector.ihevc_sao_edge_offset_class1_chroma_fptr = &ihevc_sao_edge_offset_class1_chroma;
+ ps_codec->s_func_selector.ihevc_sao_edge_offset_class2_fptr = &ihevc_sao_edge_offset_class2;
+ ps_codec->s_func_selector.ihevc_sao_edge_offset_class2_chroma_fptr = &ihevc_sao_edge_offset_class2_chroma;
+ ps_codec->s_func_selector.ihevc_sao_edge_offset_class3_fptr = &ihevc_sao_edge_offset_class3;
+ ps_codec->s_func_selector.ihevc_sao_edge_offset_class3_chroma_fptr = &ihevc_sao_edge_offset_class3_chroma;
+ ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_rgba8888_fptr = &ihevcd_fmt_conv_420sp_to_rgba8888;
+ ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_rgb565_fptr = &ihevcd_fmt_conv_420sp_to_rgb565;
+ ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_420sp_fptr = &ihevcd_fmt_conv_420sp_to_420sp;
+ ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_420p_fptr = &ihevcd_fmt_conv_420sp_to_420p;
+ ps_codec->s_func_selector.ihevcd_itrans_recon_dc_luma_fptr = &ihevcd_itrans_recon_dc_luma;
+ ps_codec->s_func_selector.ihevcd_itrans_recon_dc_chroma_fptr = &ihevcd_itrans_recon_dc_chroma;
+}