summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMao Han <han_mao@linux.alibaba.com>2022-12-06 00:51:49 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-12-06 00:51:49 +0000
commit22d3e0bd89cd31bb8fe075e8d96fde360c09db52 (patch)
tree73dbb868e635b0ecbe5198a93827fcaae8e11023
parent63bb6d16273c2d62e67b8024438a3249af6228b1 (diff)
parent3f09b52eba851c54e440474b2c3946e6948ce3ac (diff)
downloadlibmpeg2-22d3e0bd89cd31bb8fe075e8d96fde360c09db52.tar.gz
Add riscv64 support am: 7aa57c1135 am: b082ab0ce6 am: 3f09b52eba
Original change: https://android-review.googlesource.com/c/platform/external/libmpeg2/+/2168947 Change-Id: I9d65d0a7d6cb16662d36a80b25066025ae92fd2a Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--Android.bp11
-rw-r--r--common/icv.h1
-rw-r--r--common/riscv/icv_platform_macros.h65
-rw-r--r--common/riscv/ideint_function_selector.c110
-rw-r--r--common/riscv/impeg2_platform_macros.h48
-rw-r--r--decoder/impeg2d_deinterlace.c3
-rw-r--r--decoder/ivd.h3
-rw-r--r--decoder/riscv/impeg2d_function_selector.c82
8 files changed, 321 insertions, 2 deletions
diff --git a/Android.bp b/Android.bp
index 87203a0..f99ae5c 100644
--- a/Android.bp
+++ b/Android.bp
@@ -148,6 +148,17 @@ cc_library_static {
],
},
+ riscv64: {
+ local_include_dirs: [
+ "common/riscv",
+ ],
+
+ srcs: [
+ "decoder/riscv/impeg2d_function_selector.c",
+ "common/riscv/ideint_function_selector.c",
+ ],
+ },
+
x86: {
cflags: [
"-DX86",
diff --git a/common/icv.h b/common/icv.h
index 7ab4645..73f56e1 100644
--- a/common/icv.h
+++ b/common/icv.h
@@ -77,6 +77,7 @@ typedef enum
ICV_X86_AVX2,
ICV_MIPS_GENERIC = 0x2000,
ICV_MIPS_32,
+ ICV_RISCV_GENERIC = 0x3000,
}ICV_ARCH_T;
/** SOC Enumeration */
diff --git a/common/riscv/icv_platform_macros.h b/common/riscv/icv_platform_macros.h
new file mode 100644
index 0000000..4b268f6
--- /dev/null
+++ b/common/riscv/icv_platform_macros.h
@@ -0,0 +1,65 @@
+/******************************************************************************
+ *
+ * Copyright (C) 2015 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
+* icv_platform_macros.h
+*
+* @brief
+* This header files contains all the platform/toolchain specific macros
+*
+* @author
+* Ittiam
+*
+* @par List of Functions:
+*
+* @remarks
+* None
+*
+*******************************************************************************
+*/
+#ifndef _ICV_PLATFORM_MACROS_H_
+#define _ICV_PLATFORM_MACROS_H_
+
+static __inline UWORD32 CLZ(UWORD32 u4_word)
+{
+ if(u4_word)
+ return(__builtin_clz(u4_word));
+ else
+ return 32;
+}
+
+#define CLIP_U8(x) CLIP3(0, 255, (x))
+#define CLIP_S8(x) CLIP3(-128, 127, (x))
+
+#define CLIP_U10(x) CLIP3(0, 1023, (x))
+#define CLIP_S10(x) CLIP3(-512, 511, (x))
+
+#define CLIP_U12(x) CLIP3(0, 4095, (x))
+#define CLIP_S12(x) CLIP3(-2048, 2047, (x))
+
+#define CLIP_U16(x) CLIP3(0, 65535, (x))
+#define CLIP_S16(x) CLIP3(-32768, 32767, (x))
+
+#define NOP(nop_cnt) {UWORD32 nop_i; for (nop_i = 0; nop_i < nop_cnt; nop_i++) asm("nop");}
+
+#define INLINE inline
+
+#endif /* _ICV_PLATFORM_MACROS_H_ */
diff --git a/common/riscv/ideint_function_selector.c b/common/riscv/ideint_function_selector.c
new file mode 100644
index 0000000..9f2e4bd
--- /dev/null
+++ b/common/riscv/ideint_function_selector.c
@@ -0,0 +1,110 @@
+/******************************************************************************
+ *
+ * Copyright (C) 2015 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
+* ideint_function_selector.c
+*
+* @brief
+* This file contains the function selector related code
+*
+* @author
+* Ittiam
+*
+* @par List of Functions:
+* ih264e_init_function_ptr
+*
+* @remarks
+* None
+*
+*******************************************************************************
+*/
+/*****************************************************************************/
+/* File Includes */
+/*****************************************************************************/
+/* System include files */
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+
+/* User include files */
+#include "icv_datatypes.h"
+#include "icv_macros.h"
+#include "icv_platform_macros.h"
+#include "icv.h"
+#include "icv_variance.h"
+#include "icv_sad.h"
+#include "ideint.h"
+
+#include "ideint_defs.h"
+#include "ideint_structs.h"
+#include "ideint_utils.h"
+#include "ideint_cac.h"
+#include "ideint_debug.h"
+#include "ideint_function_selector.h"
+
+
+/**
+*******************************************************************************
+*
+* @brief
+* Call corresponding function pointer initialization function
+*
+* @par Description
+* Call corresponding function pointer initialization function
+*
+* @param[in] ps_ctxt
+* Context
+*
+* @returns none
+*
+* @remarks none
+*
+*******************************************************************************
+*/
+void ideint_init_function_ptr(ctxt_t *ps_ctxt)
+{
+ ideint_init_function_ptr_generic(ps_ctxt);
+}
+
+/**
+*******************************************************************************
+*
+* @brief Determine the architecture of the encoder executing environment
+*
+* @par Description: This routine returns the architecture of the enviro-
+* ment in which the current encoder is being tested
+*
+* @param[in] void
+*
+* @returns IV_ARCH_T
+* architecture
+*
+* @remarks none
+*
+*******************************************************************************
+*/
+ICV_ARCH_T ideint_default_arch(void)
+{
+ return ICV_RISCV_GENERIC;
+}
diff --git a/common/riscv/impeg2_platform_macros.h b/common/riscv/impeg2_platform_macros.h
new file mode 100644
index 0000000..a5912e2
--- /dev/null
+++ b/common/riscv/impeg2_platform_macros.h
@@ -0,0 +1,48 @@
+/******************************************************************************
+ *
+ * Copyright (C) 2015 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
+*/
+#ifndef __IMPEG2_PLATFORM_MACROS_H__
+#define __IMPEG2_PLATFORM_MACROS_H__
+
+
+#define CONV_LE_TO_BE(u4_temp2,u4_temp1) u4_temp2 = (u4_temp1 << 24) | \
+ ((u4_temp1 & 0xff00) << 8) | \
+ ((u4_temp1 & 0xff0000) >> 8) | \
+ (u4_temp1 >> 24);
+static __inline UWORD32 CLZ(UWORD32 u4_word)
+{
+ if(u4_word)
+ return (__builtin_clz(u4_word));
+ else
+ return 32;
+}
+
+
+#define CLIP_U8(x) ((x) > 255) ? (255) : (((x) < 0) ? (0) : (x))
+#define CLIP_S8(x) ((x) > 127) ? (127) : (((x) < -128) ? (-128) : (x))
+
+#define CLIP_U12(x) ((x) > 4095) ? (4095) : (((x) < 0) ? (0) : (x))
+#define CLIP_S12(x) ((x) > 2047) ? (2047) : (((x) < -2048) ? (-2048) : (x))
+
+#define CLIP_U16(x) ((x) > 65535) ? (65535) : (((x) < 0) ? (0) : (x))
+#define CLIP_S16(x) ((x) > 32767) ? (32767) : (((x) < -32768) ? (-32768) : (x))
+
+#define INLINE
+
+#endif /* __IMPEG2_PLATFORM_MACROS_H__ */
diff --git a/decoder/impeg2d_deinterlace.c b/decoder/impeg2d_deinterlace.c
index 89e5c1a..3787367 100644
--- a/decoder/impeg2d_deinterlace.c
+++ b/decoder/impeg2d_deinterlace.c
@@ -65,7 +65,8 @@ static const arch_map_t gas_impeg2d_arch_mapping[] =
{ARCH_X86_SSE42, ICV_X86_SSE42},
{ARCH_X86_AVX2, ICV_X86_AVX2},
{ARCH_MIPS_GENERIC, ICV_MIPS_GENERIC},
- {ARCH_MIPS_32, ICV_MIPS_32}
+ {ARCH_MIPS_32, ICV_MIPS_32},
+ {ARCH_RISCV_GENERIC, ICV_RISCV_GENERIC},
};
diff --git a/decoder/ivd.h b/decoder/ivd.h
index abc6604..86f4376 100644
--- a/decoder/ivd.h
+++ b/decoder/ivd.h
@@ -69,7 +69,8 @@ typedef enum
ARCH_X86_SSE42,
ARCH_X86_AVX2,
ARCH_MIPS_GENERIC = 0x200,
- ARCH_MIPS_32
+ ARCH_MIPS_32,
+ ARCH_RISCV_GENERIC = 0x300,
}IVD_ARCH_T;
/* IVD_SOC_T: SOC Enumeration */
diff --git a/decoder/riscv/impeg2d_function_selector.c b/decoder/riscv/impeg2d_function_selector.c
new file mode 100644
index 0000000..780c736
--- /dev/null
+++ b/decoder/riscv/impeg2d_function_selector.c
@@ -0,0 +1,82 @@
+/******************************************************************************
+ *
+ * Copyright (C) 2015 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
+* impeg2d_function_selector.c
+*
+* @brief
+* Contains functions to initialize function pointers used in mpeg2
+*
+* @author
+* Naveen
+*
+* @par List of Functions:
+* @remarks
+* None
+*
+*******************************************************************************
+*/
+/*****************************************************************************/
+/* File Includes */
+/*****************************************************************************/
+#include <stdio.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "iv_datatypedef.h"
+#include "iv.h"
+
+#include "impeg2_buf_mgr.h"
+#include "impeg2_disp_mgr.h"
+#include "impeg2_defs.h"
+#include "impeg2_platform_macros.h"
+#include "impeg2_inter_pred.h"
+#include "impeg2_idct.h"
+#include "impeg2_globals.h"
+#include "impeg2_mem_func.h"
+#include "impeg2_format_conv.h"
+#include "impeg2_macros.h"
+
+#include "ivd.h"
+#include "impeg2d.h"
+#include "impeg2d_bitstream.h"
+#include "impeg2d_structs.h"
+#include "impeg2d_vld_tables.h"
+#include "impeg2d_vld.h"
+#include "impeg2d_pic_proc.h"
+#include "impeg2d_debug.h"
+#include "impeg2d_mc.h"
+#include "impeg2d_function_selector.h"
+
+void impeg2d_init_function_ptr(void *pv_codec)
+{
+ dec_state_t *ps_codec = (dec_state_t *)pv_codec;
+
+ impeg2d_init_function_ptr_generic(ps_codec);
+}
+
+void impeg2d_init_arch(void *pv_codec)
+{
+ dec_state_t *ps_codec = (dec_state_t *)pv_codec;
+
+ ps_codec->e_processor_arch = ARCH_RISCV_GENERIC;
+}