aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-04-28 15:59:07 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-04-28 15:59:07 +0000
commit8f5121e002c625b5e3505ce2dc2000540ea6a646 (patch)
tree593d6ce54298be2f99429f640d100338e21b1752
parent7e4cc1a1336ee3f5b1406b9e43409909e261e55a (diff)
parentc087ee43dcf56e7b588efda38738c7f39c9755ec (diff)
downloadlibhevc-android13-frc-permission-release.tar.gz
Snap for 8512216 from c087ee43dcf56e7b588efda38738c7f39c9755ec to tm-frc-permission-releaset_frc_per_330444010android13-frc-permission-release
Change-Id: I9998c57356d46bee4c28ed59151b3b8cb8caba6f
-rw-r--r--CMakeLists.txt133
-rw-r--r--README.md53
-rw-r--r--cmake/toolchains/aarch32_toolchain.cmake7
-rw-r--r--cmake/toolchains/aarch64_toolchain.cmake13
-rw-r--r--cmake/utils.cmake115
-rw-r--r--common/common.cmake233
-rwxr-xr-xdecoder/libhevcdec.cmake78
-rw-r--r--encoder/hme_err_compute.c24
-rw-r--r--encoder/hme_refine.c5
-rw-r--r--encoder/ihevce_enc_loop_pass.c10
-rw-r--r--encoder/ihevce_error_check.c33
-rw-r--r--encoder/libhevcenc.cmake140
-rw-r--r--fuzzer/README.md82
-rw-r--r--fuzzer/hevc_dec_fuzzer.cmake2
-rw-r--r--fuzzer/hevc_enc_fuzzer.cmake2
-rw-r--r--fuzzer/hevc_enc_fuzzer.cpp1
-rwxr-xr-xfuzzer/ossfuzz.sh19
-rw-r--r--test/decoder/hevcdec.cmake2
-rw-r--r--test/encoder/hevcenc.cmake2
19 files changed, 728 insertions, 226 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a0116f5..590f117 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,6 @@
-cmake_minimum_required(VERSION 3.5)
+cmake_minimum_required(VERSION 3.9.1)
+project(libhevc C CXX)
+enable_language(ASM)
set(HEVC_ROOT "${CMAKE_CURRENT_SOURCE_DIR}")
set(HEVC_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}")
@@ -14,123 +16,30 @@ if("${HEVC_ROOT}" STREQUAL "${HEVC_CONFIG_DIR}")
"And re-run CMake from the build directory.")
endif()
-set(THREADS_PREFER_PTHREAD_FLAG ON)
+set(THREADS_PREFER_PTHREAD_FLAG TRUE)
find_package(Threads REQUIRED)
-set(CMAKE_STATIC_LIBRARY_PREFIX "")
-if(SANITIZE)
- string(TOLOWER ${SANITIZE} SANITIZE)
+set(CMAKE_STATIC_LIBRARY_PREFIX "")
- set(CMAKE_SANITIZER_C_FLAGS "-fno-omit-frame-pointer -fsanitize=${SANITIZE}")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_SANITIZER_C_FLAGS}")
+if(${CMAKE_CROSSCOMPILING})
+ set(THREADS_PTHREAD_ARG
+ "2"
+ CACHE STRING
+ "Refer https://gitlab.kitware.com/cmake/cmake/-/issues/16920" FORCE)
endif()
-list(APPEND LIBHEVCDEC_SRCS
- "${HEVC_ROOT}/common/ithread.c"
- "${HEVC_ROOT}/decoder/ihevcd_api.c"
- "${HEVC_ROOT}/common/ihevc_quant_tables.c"
- "${HEVC_ROOT}/common/ihevc_inter_pred_filters.c"
- "${HEVC_ROOT}/common/ihevc_weighted_pred.c"
- "${HEVC_ROOT}/common/ihevc_padding.c"
- "${HEVC_ROOT}/common/ihevc_deblk_edge_filter.c"
- "${HEVC_ROOT}/common/ihevc_deblk_tables.c"
- "${HEVC_ROOT}/common/ihevc_cabac_tables.c"
- "${HEVC_ROOT}/common/ihevc_common_tables.c"
- "${HEVC_ROOT}/common/ihevc_intra_pred_filters.c"
- "${HEVC_ROOT}/common/ihevc_chroma_intra_pred_filters.c"
- "${HEVC_ROOT}/common/ihevc_mem_fns.c"
- "${HEVC_ROOT}/common/ihevc_sao.c"
- "${HEVC_ROOT}/common/ihevc_trans_tables.c"
- "${HEVC_ROOT}/common/ihevc_recon.c"
- "${HEVC_ROOT}/common/ihevc_itrans.c"
- "${HEVC_ROOT}/common/ihevc_itrans_recon.c"
- "${HEVC_ROOT}/common/ihevc_iquant_recon.c"
- "${HEVC_ROOT}/common/ihevc_iquant_itrans_recon.c"
- "${HEVC_ROOT}/common/ihevc_itrans_recon_32x32.c"
- "${HEVC_ROOT}/common/ihevc_itrans_recon_16x16.c"
- "${HEVC_ROOT}/common/ihevc_itrans_recon_8x8.c"
- "${HEVC_ROOT}/common/ihevc_chroma_itrans_recon.c"
- "${HEVC_ROOT}/common/ihevc_chroma_iquant_recon.c"
- "${HEVC_ROOT}/common/ihevc_chroma_iquant_itrans_recon.c"
- "${HEVC_ROOT}/common/ihevc_chroma_recon.c"
- "${HEVC_ROOT}/common/ihevc_chroma_itrans_recon_16x16.c"
- "${HEVC_ROOT}/common/ihevc_chroma_itrans_recon_8x8.c"
- "${HEVC_ROOT}/common/ihevc_buf_mgr.c"
- "${HEVC_ROOT}/common/ihevc_disp_mgr.c"
- "${HEVC_ROOT}/common/ihevc_dpb_mgr.c"
- "${HEVC_ROOT}/common/ithread.c"
- "${HEVC_ROOT}/decoder/ihevcd_version.c"
- "${HEVC_ROOT}/decoder/ihevcd_api.c"
- "${HEVC_ROOT}/decoder/ihevcd_decode.c"
- "${HEVC_ROOT}/decoder/ihevcd_nal.c"
- "${HEVC_ROOT}/decoder/ihevcd_bitstream.c"
- "${HEVC_ROOT}/decoder/ihevcd_parse_headers.c"
- "${HEVC_ROOT}/decoder/ihevcd_parse_slice_header.c"
- "${HEVC_ROOT}/decoder/ihevcd_parse_slice.c"
- "${HEVC_ROOT}/decoder/ihevcd_parse_residual.c"
- "${HEVC_ROOT}/decoder/ihevcd_cabac.c"
- "${HEVC_ROOT}/decoder/ihevcd_intra_pred_mode_prediction.c"
- "${HEVC_ROOT}/decoder/ihevcd_process_slice.c"
- "${HEVC_ROOT}/decoder/ihevcd_utils.c"
- "${HEVC_ROOT}/decoder/ihevcd_job_queue.c"
- "${HEVC_ROOT}/decoder/ihevcd_ref_list.c"
- "${HEVC_ROOT}/decoder/ihevcd_get_mv.c"
- "${HEVC_ROOT}/decoder/ihevcd_mv_pred.c"
- "${HEVC_ROOT}/decoder/ihevcd_mv_merge.c"
- "${HEVC_ROOT}/decoder/ihevcd_iquant_itrans_recon_ctb.c"
- "${HEVC_ROOT}/decoder/ihevcd_itrans_recon_dc.c"
- "${HEVC_ROOT}/decoder/ihevcd_common_tables.c"
- "${HEVC_ROOT}/decoder/ihevcd_boundary_strength.c"
- "${HEVC_ROOT}/decoder/ihevcd_deblk.c"
- "${HEVC_ROOT}/decoder/ihevcd_inter_pred.c"
- "${HEVC_ROOT}/decoder/ihevcd_sao.c"
- "${HEVC_ROOT}/decoder/ihevcd_ilf_padding.c"
- "${HEVC_ROOT}/decoder/ihevcd_fmt_conv.c")
-
-list(
- APPEND LIBHEVCDEC_X86_SRCS
- "${HEVC_ROOT}/decoder/x86/ihevcd_function_selector.c"
- "${HEVC_ROOT}/decoder/x86/ihevcd_function_selector_generic.c"
- "${HEVC_ROOT}/decoder/x86/ihevcd_function_selector_ssse3.c"
- "${HEVC_ROOT}/decoder/x86/ihevcd_function_selector_sse42.c"
- "${HEVC_ROOT}/common/x86/ihevc_inter_pred_filters_ssse3_intr.c"
- "${HEVC_ROOT}/common/x86/ihevc_weighted_pred_ssse3_intr.c"
- "${HEVC_ROOT}/common/x86/ihevc_intra_pred_filters_ssse3_intr.c"
- "${HEVC_ROOT}/common/x86/ihevc_chroma_intra_pred_filters_ssse3_intr.c"
- "${HEVC_ROOT}/common/x86/ihevc_itrans_recon_ssse3_intr.c"
- "${HEVC_ROOT}/common/x86/ihevc_itrans_recon_16x16_ssse3_intr.c"
- "${HEVC_ROOT}/common/x86/ihevc_itrans_recon_32x32_ssse3_intr.c"
- "${HEVC_ROOT}/common/x86/ihevc_sao_ssse3_intr.c"
- "${HEVC_ROOT}/common/x86/ihevc_deblk_ssse3_intr.c"
- "${HEVC_ROOT}/common/x86/ihevc_padding_ssse3_intr.c"
- "${HEVC_ROOT}/common/x86/ihevc_mem_fns_ssse3_intr.c"
- "${HEVC_ROOT}/decoder/x86/ihevcd_fmt_conv_ssse3_intr.c"
- "${HEVC_ROOT}/decoder/x86/ihevcd_it_rec_dc_ssse3_intr.c"
- "${HEVC_ROOT}/common/x86/ihevc_inter_pred_filters_sse42_intr.c"
- "${HEVC_ROOT}/common/x86/ihevc_weighted_pred_sse42_intr.c"
- "${HEVC_ROOT}/common/x86/ihevc_intra_pred_filters_sse42_intr.c"
- "${HEVC_ROOT}/common/x86/ihevc_chroma_intra_pred_filters_sse42_intr.c"
- "${HEVC_ROOT}/common/x86/ihevc_itrans_recon_sse42_intr.c"
- "${HEVC_ROOT}/common/x86/ihevc_16x16_itrans_recon_sse42_intr.c"
- "${HEVC_ROOT}/common/x86/ihevc_32x32_itrans_recon_sse42_intr.c"
- "${HEVC_ROOT}/decoder/x86/ihevcd_it_rec_dc_sse42_intr.c"
- "${HEVC_ROOT}/common/x86/ihevc_tables_x86_intr.c")
-
-set(LIBHEVCDEC_INCLUDES ${HEVC_ROOT}/common ${HEVC_ROOT}/decoder)
+include("${HEVC_ROOT}/cmake/utils.cmake")
-set(LIBHEVCDEC_X86_C_FLAGS "-DX86 -DDISABLE_AVX2 -msse4.2 -mno-avx \
- -DDEFAULT_ARCH=D_ARCH_X86_SSE42 -DMULTICORE")
-set(LIBHEVCDEC_X86_INCLUDES ${HEVC_ROOT}/common/x86 ${HEVC_ROOT}/decoder/x86)
-set(LIBHEVCDEC_C_FLAGS "${LIBHEVCDEC_X86_C_FLAGS}")
+libhevc_add_compile_options()
+libhevc_add_definitions()
+libhevc_set_link_libraries()
-include_directories(${LIBHEVCDEC_INCLUDES} ${LIBHEVCDEC_X86_INCLUDES})
-add_library(libhevcdec ${LIBHEVCDEC_SRCS} ${LIBHEVCDEC_X86_SRCS})
-set_target_properties(libhevcdec
- PROPERTIES COMPILE_FLAGS "${LIBHEVCDEC_C_FLAGS}")
+include("${HEVC_ROOT}/common/common.cmake")
+include("${HEVC_ROOT}/decoder/libhevcdec.cmake")
+include("${HEVC_ROOT}/encoder/libhevcenc.cmake")
-list(APPEND HEVCDEC_SRCS "${HEVC_ROOT}/test/decoder/main.c")
+include("${HEVC_ROOT}/test/decoder/hevcdec.cmake")
+include("${HEVC_ROOT}/test/encoder/hevcenc.cmake")
-add_executable(hevcdec ${HEVCDEC_SRCS})
-set_target_properties(hevcdec PROPERTIES COMPILE_FLAGS "-DMD5_DISABLE \
- -DPROFILE_ENABLE")
-target_link_libraries(hevcdec libhevcdec Threads::Threads)
+include("${HEVC_ROOT}/fuzzer/hevc_dec_fuzzer.cmake")
+include("${HEVC_ROOT}/fuzzer/hevc_enc_fuzzer.cmake")
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..a9e5758
--- /dev/null
+++ b/README.md
@@ -0,0 +1,53 @@
+# LIBHEVC
+## Getting Started Document
+
+# LibHEVC build steps
+
+Supports:
+- aarch32/aarch64 on Linux.
+- aarch32/aarch64 on Android.
+- x86_32/x86_64 on Linux.
+
+## Native Builds
+Use the following commands for building on the target machine
+
+```
+$ cd external/libhevc
+$ mkdir build
+$ cd build
+$ cmake ..
+$ make
+```
+
+## Cross-compiler based builds
+
+### Building for x86_32 on a x86_64 Linux machine
+```
+$ cd external/libhevc
+$ mkdir build
+$ cd build
+$ CFLAGS="-m32" CXXFLAGS="-m32" LDFLAGS="-m32" cmake ..
+$ make
+```
+
+### Building for aarch32/aarch64
+Update 'CMAKE_C_COMPILER', 'CMAKE_CXX_COMPILER', 'CMAKE_C_COMPILER_AR', and
+'CMAKE_CXX_COMPILER_AR' in CMAKE_TOOLCHAIN_FILE passed below
+
+```
+$ cd external/libhevc
+$ mkdir build
+$ cd build
+```
+
+#### For aarch64
+```
+$ cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/aarch64_toolchain.cmake
+$ make
+```
+
+#### For aarch32
+```
+$ cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/aarch32_toolchain.cmake
+$ make
+```
diff --git a/cmake/toolchains/aarch32_toolchain.cmake b/cmake/toolchains/aarch32_toolchain.cmake
new file mode 100644
index 0000000..5fabde2
--- /dev/null
+++ b/cmake/toolchains/aarch32_toolchain.cmake
@@ -0,0 +1,7 @@
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR aarch32)
+
+# Modify these variables with paths to appropriate compilers that can produce
+# armv7 targets
+set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
+set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
diff --git a/cmake/toolchains/aarch64_toolchain.cmake b/cmake/toolchains/aarch64_toolchain.cmake
new file mode 100644
index 0000000..5efbf77
--- /dev/null
+++ b/cmake/toolchains/aarch64_toolchain.cmake
@@ -0,0 +1,13 @@
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR aarch64)
+
+# Modify these variables with paths to appropriate compilers that can produce
+# armv8 targets
+set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
+set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
+set(CMAKE_C_COMPILER_AR
+ aarch64-linux-gnu-gcc-ar
+ CACHE FILEPATH "Archiver")
+set(CMAKE_CXX_COMPILER_AR
+ aarch64-linux-gnu-gcc-ar
+ CACHE FILEPATH "Archiver")
diff --git a/cmake/utils.cmake b/cmake/utils.cmake
new file mode 100644
index 0000000..57b939f
--- /dev/null
+++ b/cmake/utils.cmake
@@ -0,0 +1,115 @@
+include(CheckCXXCompilerFlag)
+
+# Adds compiler options for all targets
+function(libhevc_add_compile_options)
+ if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64")
+ add_compile_options(-march=armv8-a)
+ elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch32")
+ add_compile_options(-march=armv7-a -mfpu=neon)
+ else()
+ add_compile_options(-msse4.2 -mno-avx)
+ endif()
+
+ set(CMAKE_REQUIRED_FLAGS -fsanitize=fuzzer-no-link)
+ check_cxx_compiler_flag(-fsanitize=fuzzer-no-link
+ COMPILER_HAS_SANITIZE_FUZZER)
+ unset(CMAKE_REQUIRED_FLAGS)
+
+ if(DEFINED SANITIZE)
+ set(CMAKE_REQUIRED_FLAGS -fsanitize=${SANITIZE})
+ check_cxx_compiler_flag(-fsanitize=${SANITIZE} COMPILER_HAS_SANITIZER)
+ unset(CMAKE_REQUIRED_FLAGS)
+
+ if(NOT COMPILER_HAS_SANITIZER)
+ message(
+ FATAL_ERROR "ERROR: Compiler doesn't support -fsanitize=${SANITIZE}")
+ return()
+ endif()
+ add_compile_options(-fno-omit-frame-pointer -fsanitize=${SANITIZE})
+ endif()
+
+endfunction()
+
+# Adds defintions for all targets
+function(libhevc_add_definitions)
+ add_definitions(-DPROFILE_ENABLE -DMD5_DISABLE)
+
+ if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64")
+ add_definitions(-DARMV8 -DDEFAULT_ARCH=D_ARCH_ARMV8_GENERIC)
+ elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch32")
+ add_definitions(-DARMV7 -DDEFAULT_ARCH=D_ARCH_ARM_A9Q)
+ else()
+ add_definitions(-DX86 -DX86_LINUX=1 -DDISABLE_AVX2
+ -DDEFAULT_ARCH=D_ARCH_X86_SSE42)
+ endif()
+endfunction()
+
+# Adds libraries needed for executables
+function(libhevc_set_link_libraries)
+ link_libraries(Threads::Threads m)
+endfunction()
+
+# cmake-format: off
+# Adds a target for an executable
+#
+# Arguments:
+# NAME: Name of the executatble
+# LIB: Library that executable depends on
+# SOURCES: Source files
+#
+# Optional Arguments:
+# INCLUDES: Include paths
+# LIBS: Additional libraries
+# FUZZER: flag to specify if the target is a fuzzer binary
+# cmake-format: on
+
+function(libhevc_add_executable NAME LIB)
+ set(multi_value_args SOURCES INCLUDES LIBS)
+ set(optional_args FUZZER)
+ cmake_parse_arguments(ARG "${optional_args}" "${single_value_args}"
+ "${multi_value_args}" ${ARGN})
+
+ # Check if compiler supports -fsanitize=fuzzer. If not, skip building fuzzer
+ # binary
+ if(ARG_FUZZER)
+ if(NOT COMPILER_HAS_SANITIZE_FUZZER)
+ message("Compiler doesn't support -fsanitize=fuzzer. Skipping ${NAME}")
+ return()
+ endif()
+ endif()
+
+ add_executable(${NAME} ${ARG_SOURCES})
+ target_include_directories(${NAME} PRIVATE ${ARG_INCLUDES})
+ add_dependencies(${NAME} ${LIB} ${ARG_LIBS})
+
+ target_link_libraries(${NAME} ${LIB} ${ARG_LIBS})
+ if(ARG_FUZZER)
+ target_compile_options(${NAME}
+ PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-std=c++17>)
+ if(DEFINED ENV{LIB_FUZZING_ENGINE})
+ set_target_properties(${NAME} PROPERTIES LINK_FLAGS
+ $ENV{LIB_FUZZING_ENGINE})
+ elseif(DEFINED SANITIZE)
+ set_target_properties(${NAME} PROPERTIES LINK_FLAGS
+ -fsanitize=fuzzer,${SANITIZE})
+ else()
+ set_target_properties(${NAME} PROPERTIES LINK_FLAGS -fsanitize=fuzzer)
+ endif()
+ else()
+ if(DEFINED SANITIZE)
+ set_target_properties(${NAME} PROPERTIES LINK_FLAGS
+ -fsanitize=${SANITIZE})
+ endif()
+ endif()
+endfunction()
+
+# cmake-format: off
+# Adds a target for a fuzzer binary
+# Calls libhevc_add_executable with all arguments with FUZZER set to 1
+# Arguments:
+# Refer to libhevc_add_executable's arguments
+# cmake-format: on
+
+function(libhevc_add_fuzzer NAME LIB)
+ libhevc_add_executable(${NAME} ${LIB} FUZZER 1 ${ARGV})
+endfunction()
diff --git a/common/common.cmake b/common/common.cmake
new file mode 100644
index 0000000..12ac33a
--- /dev/null
+++ b/common/common.cmake
@@ -0,0 +1,233 @@
+# src files
+list(
+ APPEND
+ LIBHEVC_COMMON_SRCS
+ "${HEVC_ROOT}/common/ithread.c"
+ "${HEVC_ROOT}/common/ihevc_quant_tables.c"
+ "${HEVC_ROOT}/common/ihevc_inter_pred_filters.c"
+ "${HEVC_ROOT}/common/ihevc_weighted_pred.c"
+ "${HEVC_ROOT}/common/ihevc_padding.c"
+ "${HEVC_ROOT}/common/ihevc_deblk_edge_filter.c"
+ "${HEVC_ROOT}/common/ihevc_deblk_tables.c"
+ "${HEVC_ROOT}/common/ihevc_cabac_tables.c"
+ "${HEVC_ROOT}/common/ihevc_common_tables.c"
+ "${HEVC_ROOT}/common/ihevc_intra_pred_filters.c"
+ "${HEVC_ROOT}/common/ihevc_chroma_intra_pred_filters.c"
+ "${HEVC_ROOT}/common/ihevc_mem_fns.c"
+ "${HEVC_ROOT}/common/ihevc_sao.c"
+ "${HEVC_ROOT}/common/ihevc_trans_tables.c"
+ "${HEVC_ROOT}/common/ihevc_recon.c"
+ "${HEVC_ROOT}/common/ihevc_itrans.c"
+ "${HEVC_ROOT}/common/ihevc_itrans_recon.c"
+ "${HEVC_ROOT}/common/ihevc_iquant_recon.c"
+ "${HEVC_ROOT}/common/ihevc_iquant_itrans_recon.c"
+ "${HEVC_ROOT}/common/ihevc_itrans_recon_32x32.c"
+ "${HEVC_ROOT}/common/ihevc_itrans_recon_16x16.c"
+ "${HEVC_ROOT}/common/ihevc_itrans_recon_8x8.c"
+ "${HEVC_ROOT}/common/ihevc_chroma_itrans_recon.c"
+ "${HEVC_ROOT}/common/ihevc_chroma_iquant_recon.c"
+ "${HEVC_ROOT}/common/ihevc_chroma_iquant_itrans_recon.c"
+ "${HEVC_ROOT}/common/ihevc_chroma_recon.c"
+ "${HEVC_ROOT}/common/ihevc_chroma_itrans_recon_16x16.c"
+ "${HEVC_ROOT}/common/ihevc_chroma_itrans_recon_8x8.c"
+ "${HEVC_ROOT}/common/ihevc_buf_mgr.c"
+ "${HEVC_ROOT}/common/ihevc_disp_mgr.c"
+ "${HEVC_ROOT}/common/ihevc_dpb_mgr.c"
+ "${HEVC_ROOT}/common/ithread.c"
+ "${HEVC_ROOT}/common/ihevc_cabac_tables.c"
+ "${HEVC_ROOT}/common/ihevc_chroma_intra_pred_filters.c"
+ "${HEVC_ROOT}/common/ihevc_chroma_itrans_recon.c"
+ "${HEVC_ROOT}/common/ihevc_chroma_itrans_recon_16x16.c"
+ "${HEVC_ROOT}/common/ihevc_chroma_itrans_recon_8x8.c"
+ "${HEVC_ROOT}/common/ihevc_common_tables.c"
+ "${HEVC_ROOT}/common/ihevc_deblk_edge_filter.c"
+ "${HEVC_ROOT}/common/ihevc_deblk_tables.c"
+ "${HEVC_ROOT}/common/ihevc_hbd_deblk_edge_filter.c"
+ "${HEVC_ROOT}/common/ihevc_inter_pred_filters.c"
+ "${HEVC_ROOT}/common/ihevc_intra_pred_filters.c"
+ "${HEVC_ROOT}/common/ihevc_iquant_recon.c"
+ "${HEVC_ROOT}/common/ihevc_itrans_recon.c"
+ "${HEVC_ROOT}/common/ihevc_itrans_recon_16x16.c"
+ "${HEVC_ROOT}/common/ihevc_itrans_recon_32x32.c"
+ "${HEVC_ROOT}/common/ihevc_itrans_recon_8x8.c"
+ "${HEVC_ROOT}/common/ihevc_mem_fns.c"
+ "${HEVC_ROOT}/common/ihevc_padding.c"
+ "${HEVC_ROOT}/common/ihevc_quant_iquant_ssd.c"
+ "${HEVC_ROOT}/common/ihevc_quant_tables.c"
+ "${HEVC_ROOT}/common/ihevc_resi_trans.c"
+ "${HEVC_ROOT}/common/ihevc_sao.c"
+ "${HEVC_ROOT}/common/ihevc_trans_tables.c"
+ "${HEVC_ROOT}/common/ihevc_weighted_pred.c")
+
+ include_directories(${HEVC_ROOT}/common)
+
+# arm/x86 sources
+if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
+ list(
+ APPEND
+ LIBHEVC_COMMON_ASMS
+ "${HEVC_ROOT}/common/arm64/ihevc_deblk_chroma_horz.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_deblk_chroma_vert.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_deblk_luma_horz.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_deblk_luma_vert.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_inter_pred_chroma_copy.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_inter_pred_chroma_copy_w16out.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_inter_pred_chroma_horz.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_inter_pred_chroma_horz_w16out.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_inter_pred_chroma_vert.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_inter_pred_chroma_vert_w16inp.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_inter_pred_chroma_vert_w16inp_w16out.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_inter_pred_chroma_vert_w16out.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_inter_pred_filters_luma_horz.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_inter_pred_filters_luma_vert.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_inter_pred_filters_luma_vert_w16inp.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_inter_pred_filters_luma_vert_w16out.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_inter_pred_luma_copy.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_inter_pred_luma_copy_w16out.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_inter_pred_luma_horz_w16out.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_inter_pred_luma_vert_w16inp_w16out.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_chroma_dc.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_chroma_horz.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_chroma_mode_18_34.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_chroma_mode_27_to_33.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_chroma_mode2.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_chroma_mode_3_to_9.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_chroma_planar.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_chroma_ver.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_filters_chroma_mode_11_to_17.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_filters_chroma_mode_19_to_25.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_filters_luma_mode_11_to_17.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_filters_luma_mode_19_to_25.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_luma_dc.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_luma_horz.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_luma_mode_18_34.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_luma_mode_27_to_33.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_luma_mode2.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_luma_mode_3_to_9.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_luma_planar.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_intra_pred_luma_vert.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_itrans_recon_16x16.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_itrans_recon_32x32.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_itrans_recon_4x4.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_itrans_recon_4x4_ttype1.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_itrans_recon_8x8.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_mem_fns.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_neon_macros.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_padding.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_sao_band_offset_chroma.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_sao_band_offset_luma.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_sao_edge_offset_class0_chroma.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_sao_edge_offset_class0.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_sao_edge_offset_class1_chroma.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_sao_edge_offset_class1.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_sao_edge_offset_class2_chroma.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_sao_edge_offset_class2.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_sao_edge_offset_class3_chroma.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_sao_edge_offset_class3.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_weighted_pred_bi_default.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_weighted_pred_bi.s"
+ "${HEVC_ROOT}/common/arm64/ihevc_weighted_pred_uni.s")
+
+ include_directories(${HEVC_ROOT}/common/arm64)
+elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch32")
+ list(
+ APPEND
+ LIBHEVC_COMMON_ASMS
+ "${HEVC_ROOT}/common/arm/ihevc_cmn_utils_neon.h"
+ "${HEVC_ROOT}/common/arm/ihevc_deblk_chroma_horz.s"
+ "${HEVC_ROOT}/common/arm/ihevc_deblk_chroma_vert.s"
+ "${HEVC_ROOT}/common/arm/ihevc_deblk_luma_horz.s"
+ "${HEVC_ROOT}/common/arm/ihevc_deblk_luma_vert.s"
+ "${HEVC_ROOT}/common/arm/ihevc_func_selector.h"
+ "${HEVC_ROOT}/common/arm/ihevc_inter_pred_chroma_copy.s"
+ "${HEVC_ROOT}/common/arm/ihevc_inter_pred_chroma_copy_w16out.s"
+ "${HEVC_ROOT}/common/arm/ihevc_inter_pred_chroma_horz.s"
+ "${HEVC_ROOT}/common/arm/ihevc_inter_pred_chroma_horz_w16out.s"
+ "${HEVC_ROOT}/common/arm/ihevc_inter_pred_chroma_vert.s"
+ "${HEVC_ROOT}/common/arm/ihevc_inter_pred_chroma_vert_w16inp.s"
+ "${HEVC_ROOT}/common/arm/ihevc_inter_pred_chroma_vert_w16inp_w16out.s"
+ "${HEVC_ROOT}/common/arm/ihevc_inter_pred_chroma_vert_w16out.s"
+ "${HEVC_ROOT}/common/arm/ihevc_inter_pred_filters_luma_horz.s"
+ "${HEVC_ROOT}/common/arm/ihevc_inter_pred_filters_luma_vert.s"
+ "${HEVC_ROOT}/common/arm/ihevc_inter_pred_filters_luma_vert_w16inp.s"
+ "${HEVC_ROOT}/common/arm/ihevc_inter_pred_luma_copy.s"
+ "${HEVC_ROOT}/common/arm/ihevc_inter_pred_luma_copy_w16out.s"
+ "${HEVC_ROOT}/common/arm/ihevc_inter_pred_luma_horz_w16out.s"
+ "${HEVC_ROOT}/common/arm/ihevc_inter_pred_luma_vert_w16inp_w16out.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_chroma_dc.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_chroma_horz.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_chroma_mode_18_34.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_chroma_mode_27_to_33.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_chroma_mode2.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_chroma_mode_3_to_9.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_chroma_planar.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_chroma_ver.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_filters_chroma_mode_11_to_17.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_filters_chroma_mode_19_to_25.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_filters_luma_mode_11_to_17.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_filters_luma_mode_19_to_25.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_filters_neon_intr.c"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_luma_dc.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_luma_horz.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_luma_mode_18_34.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_luma_mode_27_to_33.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_luma_mode2.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_luma_mode_3_to_9.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_luma_planar.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_pred_luma_vert.s"
+ "${HEVC_ROOT}/common/arm/ihevc_intra_ref_substitution_a9q.c"
+ "${HEVC_ROOT}/common/arm/ihevc_itrans_recon_16x16.s"
+ "${HEVC_ROOT}/common/arm/ihevc_itrans_recon_32x32.s"
+ "${HEVC_ROOT}/common/arm/ihevc_itrans_recon_4x4.s"
+ "${HEVC_ROOT}/common/arm/ihevc_itrans_recon_4x4_ttype1.s"
+ "${HEVC_ROOT}/common/arm/ihevc_itrans_recon_8x8.s"
+ "${HEVC_ROOT}/common/arm/ihevc_mem_fns.s"
+ "${HEVC_ROOT}/common/arm/ihevc_padding.s"
+ "${HEVC_ROOT}/common/arm/ihevc_platform_macros.h"
+ "${HEVC_ROOT}/common/arm/ihevc_quant_iquant_ssd_neon_intr.c"
+ "${HEVC_ROOT}/common/arm/ihevc_resi_trans_32x32_a9q.s"
+ "${HEVC_ROOT}/common/arm/ihevc_resi_trans_neon_32x32.c"
+ "${HEVC_ROOT}/common/arm/ihevc_resi_trans_neon.c"
+ "${HEVC_ROOT}/common/arm/ihevc_resi_trans.s"
+ "${HEVC_ROOT}/common/arm/ihevc_sao_band_offset_chroma.s"
+ "${HEVC_ROOT}/common/arm/ihevc_sao_band_offset_luma.s"
+ "${HEVC_ROOT}/common/arm/ihevc_sao_edge_offset_class0_chroma.s"
+ "${HEVC_ROOT}/common/arm/ihevc_sao_edge_offset_class0.s"
+ "${HEVC_ROOT}/common/arm/ihevc_sao_edge_offset_class1_chroma.s"
+ "${HEVC_ROOT}/common/arm/ihevc_sao_edge_offset_class1.s"
+ "${HEVC_ROOT}/common/arm/ihevc_sao_edge_offset_class2_chroma.s"
+ "${HEVC_ROOT}/common/arm/ihevc_sao_edge_offset_class2.s"
+ "${HEVC_ROOT}/common/arm/ihevc_sao_edge_offset_class3_chroma.s"
+ "${HEVC_ROOT}/common/arm/ihevc_sao_edge_offset_class3.s"
+ "${HEVC_ROOT}/common/arm/ihevc_weighted_pred_bi_default.s"
+ "${HEVC_ROOT}/common/arm/ihevc_weighted_pred_bi.s"
+ "${HEVC_ROOT}/common/arm/ihevc_weighted_pred_neon_intr.c"
+ "${HEVC_ROOT}/common/arm/ihevc_weighted_pred_uni.s")
+
+ include_directories(${HEVC_ROOT}/common/arm)
+else()
+ list(
+ APPEND
+ LIBHEVC_COMMON_SRCS
+ "${HEVC_ROOT}/common/x86/ihevc_inter_pred_filters_ssse3_intr.c"
+ "${HEVC_ROOT}/common/x86/ihevc_weighted_pred_ssse3_intr.c"
+ "${HEVC_ROOT}/common/x86/ihevc_intra_pred_filters_ssse3_intr.c"
+ "${HEVC_ROOT}/common/x86/ihevc_chroma_intra_pred_filters_ssse3_intr.c"
+ "${HEVC_ROOT}/common/x86/ihevc_itrans_recon_ssse3_intr.c"
+ "${HEVC_ROOT}/common/x86/ihevc_itrans_recon_16x16_ssse3_intr.c"
+ "${HEVC_ROOT}/common/x86/ihevc_itrans_recon_32x32_ssse3_intr.c"
+ "${HEVC_ROOT}/common/x86/ihevc_sao_ssse3_intr.c"
+ "${HEVC_ROOT}/common/x86/ihevc_deblk_ssse3_intr.c"
+ "${HEVC_ROOT}/common/x86/ihevc_padding_ssse3_intr.c"
+ "${HEVC_ROOT}/common/x86/ihevc_mem_fns_ssse3_intr.c"
+ "${HEVC_ROOT}/common/x86/ihevc_inter_pred_filters_sse42_intr.c"
+ "${HEVC_ROOT}/common/x86/ihevc_weighted_pred_sse42_intr.c"
+ "${HEVC_ROOT}/common/x86/ihevc_intra_pred_filters_sse42_intr.c"
+ "${HEVC_ROOT}/common/x86/ihevc_chroma_intra_pred_filters_sse42_intr.c"
+ "${HEVC_ROOT}/common/x86/ihevc_itrans_recon_sse42_intr.c"
+ "${HEVC_ROOT}/common/x86/ihevc_16x16_itrans_recon_sse42_intr.c"
+ "${HEVC_ROOT}/common/x86/ihevc_32x32_itrans_recon_sse42_intr.c"
+ "${HEVC_ROOT}/common/x86/ihevc_tables_x86_intr.c")
+
+ include_directories(${HEVC_ROOT}/common/x86)
+endif()
diff --git a/decoder/libhevcdec.cmake b/decoder/libhevcdec.cmake
new file mode 100755
index 0000000..87ea024
--- /dev/null
+++ b/decoder/libhevcdec.cmake
@@ -0,0 +1,78 @@
+# src files
+list(
+ APPEND
+ LIBHEVCDEC_SRCS
+ "${HEVC_ROOT}/decoder/ihevcd_version.c"
+ "${HEVC_ROOT}/decoder/ihevcd_api.c"
+ "${HEVC_ROOT}/decoder/ihevcd_decode.c"
+ "${HEVC_ROOT}/decoder/ihevcd_nal.c"
+ "${HEVC_ROOT}/decoder/ihevcd_bitstream.c"
+ "${HEVC_ROOT}/decoder/ihevcd_parse_headers.c"
+ "${HEVC_ROOT}/decoder/ihevcd_parse_slice_header.c"
+ "${HEVC_ROOT}/decoder/ihevcd_parse_slice.c"
+ "${HEVC_ROOT}/decoder/ihevcd_parse_residual.c"
+ "${HEVC_ROOT}/decoder/ihevcd_cabac.c"
+ "${HEVC_ROOT}/decoder/ihevcd_intra_pred_mode_prediction.c"
+ "${HEVC_ROOT}/decoder/ihevcd_process_slice.c"
+ "${HEVC_ROOT}/decoder/ihevcd_utils.c"
+ "${HEVC_ROOT}/decoder/ihevcd_job_queue.c"
+ "${HEVC_ROOT}/decoder/ihevcd_ref_list.c"
+ "${HEVC_ROOT}/decoder/ihevcd_get_mv.c"
+ "${HEVC_ROOT}/decoder/ihevcd_mv_pred.c"
+ "${HEVC_ROOT}/decoder/ihevcd_mv_merge.c"
+ "${HEVC_ROOT}/decoder/ihevcd_iquant_itrans_recon_ctb.c"
+ "${HEVC_ROOT}/decoder/ihevcd_itrans_recon_dc.c"
+ "${HEVC_ROOT}/decoder/ihevcd_common_tables.c"
+ "${HEVC_ROOT}/decoder/ihevcd_boundary_strength.c"
+ "${HEVC_ROOT}/decoder/ihevcd_deblk.c"
+ "${HEVC_ROOT}/decoder/ihevcd_inter_pred.c"
+ "${HEVC_ROOT}/decoder/ihevcd_sao.c"
+ "${HEVC_ROOT}/decoder/ihevcd_ilf_padding.c"
+ "${HEVC_ROOT}/decoder/ihevcd_fmt_conv.c")
+
+include_directories(${HEVC_ROOT}/decoder)
+
+# arm/x86 sources
+if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
+ list(
+ APPEND
+ LIBHEVCDEC_ASMS
+ "${HEVC_ROOT}/decoder/arm64/ihevcd_fmt_conv_420sp_to_420p.s"
+ "${HEVC_ROOT}/decoder/arm64/ihevcd_fmt_conv_420sp_to_420sp.s"
+ "${HEVC_ROOT}/decoder/arm64/ihevcd_fmt_conv_420sp_to_rgba8888.s"
+ "${HEVC_ROOT}/decoder/arm64/ihevcd_function_selector_av8.c"
+ "${HEVC_ROOT}/decoder/arm64/ihevcd_itrans_recon_dc_chroma.s"
+ "${HEVC_ROOT}/decoder/arm64/ihevcd_itrans_recon_dc_luma.s")
+
+ include_directories(${HEVC_ROOT}/decoder/arm64)
+elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch32")
+ list(
+ APPEND
+ LIBHEVCDEC_ASMS
+ "${HEVC_ROOT}/decoder/arm/ihevcd_fmt_conv_420sp_to_420p.s"
+ "${HEVC_ROOT}/decoder/arm/ihevcd_fmt_conv_420sp_to_420sp.s"
+ "${HEVC_ROOT}/decoder/arm/ihevcd_fmt_conv_420sp_to_rgba8888.s"
+ "${HEVC_ROOT}/decoder/arm/ihevcd_function_selector_a9q.c"
+ "${HEVC_ROOT}/decoder/arm/ihevcd_function_selector.c"
+ "${HEVC_ROOT}/decoder/arm/ihevcd_function_selector_noneon.c"
+ "${HEVC_ROOT}/decoder/arm/ihevcd_itrans_recon_dc_chroma.s"
+ "${HEVC_ROOT}/decoder/arm/ihevcd_itrans_recon_dc_luma.s")
+
+ include_directories(${HEVC_ROOT}/decoder/arm)
+else()
+ list(
+ APPEND
+ LIBHEVCDEC_SRCS
+ "${HEVC_ROOT}/decoder/x86/ihevcd_function_selector.c"
+ "${HEVC_ROOT}/decoder/x86/ihevcd_function_selector_generic.c"
+ "${HEVC_ROOT}/decoder/x86/ihevcd_function_selector_ssse3.c"
+ "${HEVC_ROOT}/decoder/x86/ihevcd_function_selector_sse42.c"
+ "${HEVC_ROOT}/decoder/x86/ihevcd_fmt_conv_ssse3_intr.c"
+ "${HEVC_ROOT}/decoder/x86/ihevcd_it_rec_dc_ssse3_intr.c"
+ "${HEVC_ROOT}/decoder/x86/ihevcd_it_rec_dc_sse42_intr.c")
+
+ include_directories(${HEVC_ROOT}/decoder/x86)
+endif()
+
+add_library(libhevcdec STATIC ${LIBHEVC_COMMON_SRCS} ${LIBHEVC_COMMON_ASMS}
+ ${LIBHEVCDEC_ASMS} ${LIBHEVCDEC_SRCS})
diff --git a/encoder/hme_err_compute.c b/encoder/hme_err_compute.c
index febffce..d145f42 100644
--- a/encoder/hme_err_compute.c
+++ b/encoder/hme_err_compute.c
@@ -1797,14 +1797,13 @@ void hme_update_results_grid_pu_bestn_no_encode(result_upd_prms_t *ps_result_prm
/*****************************************************************/
if(i4_tot_cost < ps_best_node[num_results - 1].i4_tot_cost)
{
- S32 eq_cost = 0;
/*************************************************************/
/* Identify where the current result isto be placed.Basically*/
/* find the node which has cost just higher thannodeundertest*/
/*************************************************************/
for(i = 0; i < num_results - 1; i++)
{
- if(i4_tot_cost < ps_best_node[i].i4_tot_cost)
+ if(i4_tot_cost <= ps_best_node[i].i4_tot_cost)
{
memmove(
ps_best_node + i + 1,
@@ -1812,24 +1811,11 @@ void hme_update_results_grid_pu_bestn_no_encode(result_upd_prms_t *ps_result_prm
sizeof(search_node_t) * (num_results - 1 - i));
break;
}
- else if(i4_tot_cost == ps_best_node[i].i4_tot_cost)
- {
- //if (0 == hme_cmp_nodes(ps_search_node_grid, ps_best_node+i))
- // break;
- /* When cost is same we comp. the nodes and if it's same skip. */
- /* We don't want to add this code to intrinsic. So we are */
- /* commenting it. The quality impact was minor when we did the */
- /* regression. */
- eq_cost = 1;
- }
- }
- if(!eq_cost)
- {
- ps_best_node[i] = *ps_search_node_grid;
- ps_best_node[i].i4_sad = i4_sad;
- ps_best_node[i].i4_mv_cost = i4_mv_cost;
- ps_best_node[i].i4_tot_cost = i4_tot_cost;
}
+ ps_best_node[i] = *ps_search_node_grid;
+ ps_best_node[i].i4_sad = i4_sad;
+ ps_best_node[i].i4_mv_cost = i4_mv_cost;
+ ps_best_node[i].i4_tot_cost = i4_tot_cost;
}
i4_count++;
}
diff --git a/encoder/hme_refine.c b/encoder/hme_refine.c
index c8e6b38..2932bd1 100644
--- a/encoder/hme_refine.c
+++ b/encoder/hme_refine.c
@@ -2011,8 +2011,9 @@ void hme_update_mv_bank_in_l1_me(
pi1_ref_idx4 = pi1_ref_idx3 + (ps_layer_mv->i4_num_mvs_per_blk);
{
- search_node_t *aps_result_nodes_sorted[2][MAX_NUM_REF * 4];
- U08 au1_cost_shifts_for_sorted_node[2][MAX_NUM_REF * 4];
+ /* max ref frames * max results per partition * number of partitions (4x4, 8x8) */
+ search_node_t *aps_result_nodes_sorted[2][MAX_NUM_REF * MAX_RESULTS_PER_PART * 2];
+ U08 au1_cost_shifts_for_sorted_node[2][MAX_NUM_REF * MAX_RESULTS_PER_PART * 2];
S32 i;
diff --git a/encoder/ihevce_enc_loop_pass.c b/encoder/ihevce_enc_loop_pass.c
index c73c7ff..b1a8b71 100644
--- a/encoder/ihevce_enc_loop_pass.c
+++ b/encoder/ihevce_enc_loop_pass.c
@@ -3018,14 +3018,10 @@ void ihevce_enc_loop_process(
ps_ctxt->pv_err_func_selector = ps_func_selector;
#endif
- /*Bit0 - of this Flag indicates whether current pictute needs to be deblocked,
- padded and hpel planes need to be generated.
- Bit1 - of this flag set to 1 if sao is enabled. This is to enable deblocking when sao is enabled*/
ps_ctxt->i4_deblk_pad_hpel_cur_pic =
- (ps_frm_recon->i4_deblk_pad_hpel_cur_pic) ||
- ((ps_ctxt->s_sao_ctxt_t.ps_slice_hdr->i1_slice_sao_luma_flag ||
- ps_ctxt->s_sao_ctxt_t.ps_slice_hdr->i1_slice_sao_chroma_flag)
- << 1);
+ ps_frm_recon->i4_deblk_pad_hpel_cur_pic ||
+ ps_ctxt->s_sao_ctxt_t.ps_slice_hdr->i1_slice_sao_luma_flag ||
+ ps_ctxt->s_sao_ctxt_t.ps_slice_hdr->i1_slice_sao_chroma_flag;
/* Share all reference pictures with nbr clients. This flag will be used only
in case of dist-enc mode */
diff --git a/encoder/ihevce_error_check.c b/encoder/ihevce_error_check.c
index 223ea12..9295b29 100644
--- a/encoder/ihevce_error_check.c
+++ b/encoder/ihevce_error_check.c
@@ -1170,46 +1170,33 @@ WORD32 ihevce_hle_validate_static_params(ihevce_static_cfg_params_t *ps_static_c
.ai4_frame_qp[br_ctr];
WORD32 tgt_bitrate = ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id]
.ai4_tgt_bitrate[br_ctr];
+ WORD32 i4_max_bit_rate =
+ g_as_level_data[codec_level_index]
+ .i4_max_bit_rate[ps_static_cfg_prms->s_out_strm_prms.i4_codec_tier];
WORD32 peak_bitrate;
- if(frame_qp > 51 || frame_qp <= 0)
- {
- error_code = IHEVCE_UNSUPPORTED_FRAME_QP;
- ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: i4_frame_qp out of range\n");
- return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
- }
- if((frame_qp < ps_static_cfg_prms->s_config_prms.i4_min_frame_qp) ||
- ((frame_qp + ps_static_cfg_prms->s_coding_tools_prms.i4_max_temporal_layers + 1) >
- ps_static_cfg_prms->s_config_prms.i4_max_frame_qp))
+ if(frame_qp > MAX_HEVC_QP || frame_qp < MIN_HEVC_QP)
{
error_code = IHEVCE_UNSUPPORTED_FRAME_QP;
ps_sys_api->ihevce_printf(pv_cb_handle, "IHEVCE ERROR: i4_frame_qp out of range\n");
return IHEVCE_SETUNSUPPORTEDINPUT(error_code);
}
- if(tgt_bitrate >
- g_as_level_data[codec_level_index]
- .i4_max_bit_rate[ps_static_cfg_prms->s_out_strm_prms.i4_codec_tier] *
- CBP_VCL_FACTOR ||
- tgt_bitrate < MIN_BITRATE)
+ if(tgt_bitrate > i4_max_bit_rate * CBP_VCL_FACTOR || tgt_bitrate < MIN_BITRATE)
{
error_code = IHEVCE_BITRATE_NOT_SUPPORTED;
ps_sys_api->ihevce_printf(
pv_cb_handle,
- "IHEVCE ERROR: i4_tgt_bitrate %d out of range for resolution number %d bitrate "
- "number %d\n",
+ "IHEVCE ERROR: i4_tgt_bitrate %d out of range for resolution %dX%d "
+ "bitrate should be within [%d .. %d]\n",
tgt_bitrate,
- i4_resolution_id,
- br_ctr);
+ width, height,
+ MIN_BITRATE, i4_max_bit_rate * CBP_VCL_FACTOR);
return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
}
peak_bitrate = tgt_bitrate << 1;
- peak_bitrate =
- MIN(peak_bitrate,
- g_as_level_data[codec_level_index]
- .i4_max_bit_rate[ps_static_cfg_prms->s_out_strm_prms.i4_codec_tier] *
- 1000);
+ peak_bitrate = MIN(peak_bitrate, i4_max_bit_rate * 1000);
ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id]
.ai4_peak_bitrate[br_ctr] = peak_bitrate;
ps_static_cfg_prms->s_tgt_lyr_prms.as_tgt_params[i4_resolution_id]
diff --git a/encoder/libhevcenc.cmake b/encoder/libhevcenc.cmake
new file mode 100644
index 0000000..1fcb2b5
--- /dev/null
+++ b/encoder/libhevcenc.cmake
@@ -0,0 +1,140 @@
+# src files
+list(
+ APPEND
+ LIBHEVCENC_SRCS
+ "${HEVC_ROOT}/encoder/bit_allocation.c"
+ "${HEVC_ROOT}/encoder/cbr_buffer_control.c"
+ "${HEVC_ROOT}/encoder/common_rom.c"
+ "${HEVC_ROOT}/encoder/convert_float_to_fix.c"
+ "${HEVC_ROOT}/encoder/est_sad.c"
+ "${HEVC_ROOT}/encoder/fixed_point_error_bits.c"
+ "${HEVC_ROOT}/encoder/frame_info_collector.c"
+ "${HEVC_ROOT}/encoder/hme_coarse.c"
+ "${HEVC_ROOT}/encoder/hme_common_utils.c"
+ "${HEVC_ROOT}/encoder/hme_err_compute.c"
+ "${HEVC_ROOT}/encoder/hme_fullpel.c"
+ "${HEVC_ROOT}/encoder/hme_function_selector.c"
+ "${HEVC_ROOT}/encoder/hme_globals.c"
+ "${HEVC_ROOT}/encoder/hme_interface.c"
+ "${HEVC_ROOT}/encoder/hme_refine.c"
+ "${HEVC_ROOT}/encoder/hme_search_algo.c"
+ "${HEVC_ROOT}/encoder/hme_subpel.c"
+ "${HEVC_ROOT}/encoder/hme_utils.c"
+ "${HEVC_ROOT}/encoder/ihevce_bitstream.c"
+ "${HEVC_ROOT}/encoder/ihevce_bs_compute_ctb.c"
+ "${HEVC_ROOT}/encoder/ihevce_buffer_que.c"
+ "${HEVC_ROOT}/encoder/ihevce_cabac.c"
+ "${HEVC_ROOT}/encoder/ihevce_cabac_cu_pu.c"
+ "${HEVC_ROOT}/encoder/ihevce_cabac_rdo.c"
+ "${HEVC_ROOT}/encoder/ihevce_cabac_tu.c"
+ "${HEVC_ROOT}/encoder/ihevce_chroma_had_satd.c"
+ "${HEVC_ROOT}/encoder/ihevce_cmn_utils_instr_set_router.c"
+ "${HEVC_ROOT}/encoder/ihevce_coarse_me_pass.c"
+ "${HEVC_ROOT}/encoder/ihevce_common_utils.c"
+ "${HEVC_ROOT}/encoder/ihevce_deblk.c"
+ "${HEVC_ROOT}/encoder/ihevce_decomp_pre_intra_pass.c"
+ "${HEVC_ROOT}/encoder/ihevce_dep_mngr.c"
+ "${HEVC_ROOT}/encoder/ihevce_enc_cu_recursion.c"
+ "${HEVC_ROOT}/encoder/ihevce_enc_loop_inter_mode_sifter.c"
+ "${HEVC_ROOT}/encoder/ihevce_enc_loop_pass.c"
+ "${HEVC_ROOT}/encoder/ihevce_enc_loop_utils.c"
+ "${HEVC_ROOT}/encoder/ihevce_enc_sbh_funcs.c"
+ "${HEVC_ROOT}/encoder/ihevce_enc_subpel_gen.c"
+ "${HEVC_ROOT}/encoder/ihevce_encode_header.c"
+ "${HEVC_ROOT}/encoder/ihevce_encode_header_sei_vui.c"
+ "${HEVC_ROOT}/encoder/ihevce_entropy_cod.c"
+ "${HEVC_ROOT}/encoder/ihevce_entropy_interface.c"
+ "${HEVC_ROOT}/encoder/ihevce_error_check.c"
+ "${HEVC_ROOT}/encoder/ihevce_frame_process.c"
+ "${HEVC_ROOT}/encoder/ihevce_frame_process_utils.c"
+ "${HEVC_ROOT}/encoder/ihevce_function_selector.c"
+ "${HEVC_ROOT}/encoder/ihevce_global_tables.c"
+ "${HEVC_ROOT}/encoder/ihevce_had_satd.c"
+ "${HEVC_ROOT}/encoder/ihevce_hle_interface.c"
+ "${HEVC_ROOT}/encoder/ihevce_hle_q_func.c"
+ "${HEVC_ROOT}/encoder/ihevce_inter_pred.c"
+ "${HEVC_ROOT}/encoder/ihevce_ipe_instr_set_router.c"
+ "${HEVC_ROOT}/encoder/ihevce_ipe_pass.c"
+ "${HEVC_ROOT}/encoder/ihevce_lap_interface.c"
+ "${HEVC_ROOT}/encoder/ihevce_me_instr_set_router.c"
+ "${HEVC_ROOT}/encoder/ihevce_me_pass.c"
+ "${HEVC_ROOT}/encoder/ihevce_memory_init.c"
+ "${HEVC_ROOT}/encoder/ihevce_multi_thrd_funcs.c"
+ "${HEVC_ROOT}/encoder/ihevce_mv_pred.c"
+ "${HEVC_ROOT}/encoder/ihevce_mv_pred_merge.c"
+ "${HEVC_ROOT}/encoder/ihevce_nbr_avail.c"
+ "${HEVC_ROOT}/encoder/ihevce_plugin.c"
+ "${HEVC_ROOT}/encoder/ihevce_profile.c"
+ "${HEVC_ROOT}/encoder/ihevce_rc_interface.c"
+ "${HEVC_ROOT}/encoder/ihevce_recur_bracketing.c"
+ "${HEVC_ROOT}/encoder/ihevce_sao.c"
+ "${HEVC_ROOT}/encoder/ihevce_stasino_helpers.c"
+ "${HEVC_ROOT}/encoder/ihevce_sub_pic_rc.c"
+ "${HEVC_ROOT}/encoder/ihevce_sys_api.c"
+ "${HEVC_ROOT}/encoder/ihevce_tile_interface.c"
+ "${HEVC_ROOT}/encoder/ihevce_trace.c"
+ "${HEVC_ROOT}/encoder/ihevce_tu_tree_selector.c"
+ "${HEVC_ROOT}/encoder/init_qp.c"
+ "${HEVC_ROOT}/encoder/mb_model_based.c"
+ "${HEVC_ROOT}/encoder/osal.c"
+ "${HEVC_ROOT}/encoder/osal_cond_var.c"
+ "${HEVC_ROOT}/encoder/osal_error.c"
+ "${HEVC_ROOT}/encoder/osal_mutex.c"
+ "${HEVC_ROOT}/encoder/osal_semaphore.c"
+ "${HEVC_ROOT}/encoder/osal_thread.c"
+ "${HEVC_ROOT}/encoder/picture_type.c"
+ "${HEVC_ROOT}/encoder/rate_control_api.c"
+ "${HEVC_ROOT}/encoder/rc_rd_model.c"
+ "${HEVC_ROOT}/encoder/rc_rd_model_fix.c"
+ "${HEVC_ROOT}/encoder/rc_sad_acc.c"
+ "${HEVC_ROOT}/encoder/sqrt_interp.c"
+ "${HEVC_ROOT}/encoder/var_q_operator.c"
+ "${HEVC_ROOT}/encoder/vbr_storage_vbv.c"
+ "${HEVC_ROOT}/encoder/vbr_str_prms.c")
+
+include_directories(${HEVC_ROOT}/encoder)
+
+# arm/x86 sources
+if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64" OR "${CMAKE_SYSTEM_PROCESSOR}"
+ STREQUAL "aarch32")
+ list(
+ APPEND
+ LIBHEVCENC_ASMS
+ "${HEVC_ROOT}/encoder/arm/ihevce_coarse_layer_sad_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_coarse_layer_sad_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_common_utils_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_common_utils_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_copy_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_copy_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_decomp_pre_intra_pass_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_decomp_pre_intra_pass_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_had_compute_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_had_compute_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_hme_utils_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_hme_utils_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_itrans_recon_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_itrans_recon_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_me_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_me_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_sad_compute_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_sad_compute_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_scale_by_2_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_scale_by_2_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_scan_coeffs_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_scan_coeffs_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_ssd_and_sad_calculator_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_ssd_and_sad_calculator_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_ssd_calculator_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_ssd_calculator_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_subpel_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_subpel_neon.c"
+ "${HEVC_ROOT}/encoder/arm/ihevce_subpel_neon.c")
+
+ include_directories(${HEVC_ROOT}/encoder/arm)
+endif()
+
+add_library(libhevcenc STATIC ${LIBHEVC_COMMON_SRCS} ${LIBHEVC_COMMON_ASMS}
+ ${LIBHEVCENC_ASMS} ${LIBHEVCENC_SRCS})
+
+target_compile_definitions(libhevcenc PRIVATE N_MB_ENABLE
+ ENABLE_MAIN_REXT_PROFILE)
diff --git a/fuzzer/README.md b/fuzzer/README.md
index 49353da..0df4e6e 100644
--- a/fuzzer/README.md
+++ b/fuzzer/README.md
@@ -1,11 +1,11 @@
-# Fuzzer for libhevc decoder
+# Fuzzer for libhevc decoder and encoder
-This describes steps to build hevc_dec_fuzzer binary.
+This describes steps to build hevc_dec_fuzzer and hevc_enc_fuzzer binary.
## Linux x86/x64
### Requirements
-- cmake (3.5 or above)
+- cmake (3.9.1 or above)
- make
- clang (6.0 or above)
needs to support -fsanitize=fuzzer, -fsanitize=fuzzer-no-link
@@ -21,51 +21,62 @@ Create a directory inside libhevc and change directory
$ mkdir build
$ cd build
```
-Build libhevc using cmake
+Build fuzzer with required sanitizers (-DSANITIZE=fuzzer-no-link is mandatory
+ to enable fuzzers)
```
- $ CC=clang CXX=clang++ cmake ../ \
- -DSANITIZE=fuzzer-no-link,address,signed-integer-overflow
+ $ cmake .. -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
+ -DCMAKE_BUILD_TYPE=Debug -DSANITIZE=fuzzer-no-link,address
$ make
```
-Build the fuzzer
-```
- $ clang++ -std=c++11 -fsanitize=fuzzer,address -I. -I../ -I../common \
- -I../decoder -Wl,--start-group ../fuzzer/hevc_dec_fuzzer.cpp \
- -o ./hevc_dec_fuzzer ./libhevcdec.a -Wl,--end-group
-```
### Steps to run
-Create a directory CORPUS_DIR and copy some elementary hevc files to that folder
-To run the fuzzer
+Create a directory CORPUS_DIR and copy some elementary hevc files
+(for hevc_dec_fuzzer) or yuv files (for hevc_enc_fuzzer) to that directory
+
+To run the fuzzers
```
$ ./hevc_dec_fuzzer CORPUS_DIR
+$ ./hevc_enc_fuzzer CORPUS_DIR
```
## Android
### Steps to build
-Build the fuzzer
+Build the fuzzers
```
- $ SANITIZE_TARGET=address SANITIZE_HOST=address mmma -j$(nproc) \
- external/libhevc/fuzzer
+ $ mm -j$(nproc) hevc_dec_fuzzer
+ $ mm -j$(nproc) hevc_enc_fuzzer
```
### Steps to run
-Create a directory CORPUS_DIR and copy some elementary hevc files to that folder
-Push this directory to device.
+Create a directory CORPUS_DIR and copy some elementary hevc files
+(for hevc_dec_fuzzer) or yuv files (for hevc_enc_fuzzer) to that folder
+Push this directory to device
-To run on device
+To run hevc_dec_fuzzer on device
```
$ adb sync data
$ adb shell /data/fuzz/hevc_dec_fuzzer CORPUS_DIR
```
-To run on host
+To run hevc_enc_fuzzer on device
+```
+ $ adb sync data
+ $ adb shell /data/fuzz/arm64/hevc_enc_fuzzer/hevc_enc_fuzzer CORPUS_DIR
+```
+
+To run hevc_dec_fuzzer on host
```
- $ $ANDROID_HOST_OUT/fuzz/hevc_dec_fuzzer CORPUS_DIR
+ $ $ANDROID_HOST_OUT/fuzz/x86_64/hevc_dec_fuzzer/hevc_dec_fuzzer CORPUS_DIR
+```
+
+To run hevc_enc_fuzzer on host
+```
+ $ $ANDROID_HOST_OUT/fuzz/x86_64/hevc_enc_fuzzer/hevc_enc_fuzzer CORPUS_DIR
```
-# Fuzzer for libhevc encoder
+# Appendix
+## libhevc encoder fuzzer
## Plugin Design Considerations
The fuzzer plugin for HEVC is designed based on the understanding of the
@@ -142,31 +153,6 @@ This ensures that the plugin tolerates any kind of input (empty, huge,
malformed, etc) and doesnt `exit()` on any input and thereby increasing the
chance of identifying vulnerabilities.
-## Build
-
-This describes steps to build hevc_enc_fuzzer binary.
-
-### Android
-
-#### Steps to build
-Build the fuzzer
-```
- $ mm -j$(nproc) hevc_enc_fuzzer
-```
-
-#### Steps to run
-Create a directory CORPUS_DIR and copy some yuv files to that folder
-Push this directory to device.
-
-To run on device
-```
- $ adb sync data
- $ adb shell /data/fuzz/arm64/hevc_enc_fuzzer/hevc_enc_fuzzer CORPUS_DIR
-```
-To run on host
-```
- $ $ANDROID_HOST_OUT/fuzz/x86_64/hevc_enc_fuzzer/hevc_enc_fuzzer CORPUS_DIR
-```
## References:
* http://llvm.org/docs/LibFuzzer.html
diff --git a/fuzzer/hevc_dec_fuzzer.cmake b/fuzzer/hevc_dec_fuzzer.cmake
new file mode 100644
index 0000000..28e89fd
--- /dev/null
+++ b/fuzzer/hevc_dec_fuzzer.cmake
@@ -0,0 +1,2 @@
+libhevc_add_fuzzer(hevc_dec_fuzzer libhevcdec SOURCES
+ ${HEVC_ROOT}/fuzzer/hevc_dec_fuzzer.cpp)
diff --git a/fuzzer/hevc_enc_fuzzer.cmake b/fuzzer/hevc_enc_fuzzer.cmake
new file mode 100644
index 0000000..908b2f1
--- /dev/null
+++ b/fuzzer/hevc_enc_fuzzer.cmake
@@ -0,0 +1,2 @@
+libhevc_add_fuzzer(hevc_enc_fuzzer libhevcenc SOURCES
+ ${HEVC_ROOT}/fuzzer/hevc_enc_fuzzer.cpp)
diff --git a/fuzzer/hevc_enc_fuzzer.cpp b/fuzzer/hevc_enc_fuzzer.cpp
index 9d0d370..c92d67e 100644
--- a/fuzzer/hevc_enc_fuzzer.cpp
+++ b/fuzzer/hevc_enc_fuzzer.cpp
@@ -19,6 +19,7 @@
*/
#include <algorithm>
#include <memory>
+#include <string.h>
#include "ihevc_typedefs.h"
#include "itt_video_api.h"
diff --git a/fuzzer/ossfuzz.sh b/fuzzer/ossfuzz.sh
index dc5683c..2b0f0f9 100755
--- a/fuzzer/ossfuzz.sh
+++ b/fuzzer/ossfuzz.sh
@@ -22,23 +22,12 @@ test "${OUT}" != "" || exit 1
build_dir=$WORK/build
rm -rf ${build_dir}
mkdir -p ${build_dir}
-pushd ${build_dir}
-cmake $SRC/libhevc
-make -j$(nproc)
+pushd ${build_dir}
+cmake ${SRC}/libhevc
+make -j$(nproc) hevc_dec_fuzzer
+cp ${build_dir}/hevc_dec_fuzzer $OUT/hevc_dec_fuzzer
popd
-# build fuzzers
-$CXX $CXXFLAGS -std=c++11 \
--I$SRC/libhevc \
--I$SRC/libhevc/common \
--I$SRC/libhevc/decoder \
--I${build_dir} \
--Wl,--start-group \
-$LIB_FUZZING_ENGINE \
-$SRC/libhevc/fuzzer/hevc_dec_fuzzer.cpp -o $OUT/hevc_dec_fuzzer \
-${build_dir}/libhevcdec.a \
--Wl,--end-group
-
cp $SRC/hevc_dec_fuzzer_seed_corpus.zip $OUT/hevc_dec_fuzzer_seed_corpus.zip
cp $SRC/libhevc/fuzzer/hevc_dec_fuzzer.dict $OUT/hevc_dec_fuzzer.dict
diff --git a/test/decoder/hevcdec.cmake b/test/decoder/hevcdec.cmake
new file mode 100644
index 0000000..7eccf9d
--- /dev/null
+++ b/test/decoder/hevcdec.cmake
@@ -0,0 +1,2 @@
+libhevc_add_executable(hevcdec libhevcdec SOURCES
+ ${HEVC_ROOT}/test/decoder/main.c)
diff --git a/test/encoder/hevcenc.cmake b/test/encoder/hevcenc.cmake
new file mode 100644
index 0000000..8dfc29b
--- /dev/null
+++ b/test/encoder/hevcenc.cmake
@@ -0,0 +1,2 @@
+libhevc_add_executable(hevcenc libhevcenc SOURCES
+ ${HEVC_ROOT}/test/encoder/main.c)