aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-06-15 21:40:19 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-06-15 21:40:19 +0000
commit8559ce3a0ea1394640a00679b7887cb5f564a959 (patch)
treeefa48ebdb8542e1ec6490306d11e5eb32c7f8635
parent40ffe23bf439694ae0531ce9e719eae9e289e902 (diff)
parent949f27ce82a3a82e14bbe45f33cd727bc48db918 (diff)
downloadlibavc-aml_tz3_314012010.tar.gz
Change-Id: I899b6d6e1f5c4f63b4cabd805b68deb58ae386c6
-rw-r--r--Android.bp24
-rw-r--r--CMakeLists.txt209
-rw-r--r--OWNERS1
-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.cmake113
-rw-r--r--common/ithread.c27
-rw-r--r--common/ithread.h12
-rw-r--r--decoder/ih264d_api.c131
-rw-r--r--decoder/ih264d_parse_pslice.c25
-rw-r--r--decoder/ih264d_parse_slice.c25
-rw-r--r--decoder/ih264d_structs.h48
-rw-r--r--decoder/ih264d_thread_compute_bs.c80
-rw-r--r--decoder/ih264d_thread_parse_decode.c123
-rw-r--r--decoder/libavcdec.cmake53
-rw-r--r--encoder/ih264e_bitstream.h6
-rw-r--r--encoder/libavcenc.cmake91
-rw-r--r--fuzzer/README.md84
-rw-r--r--fuzzer/avc_dec_fuzzer.cmake2
-rw-r--r--fuzzer/avc_enc_fuzzer.cmake2
-rw-r--r--fuzzer/avc_enc_fuzzer.cpp1
-rwxr-xr-xfuzzer/ossfuzz.sh19
-rw-r--r--test/decoder/avcdec.cmake1
-rw-r--r--test/encoder/avcenc.cmake10
26 files changed, 309 insertions, 966 deletions
diff --git a/Android.bp b/Android.bp
index e9efbe5..602a94b 100644
--- a/Android.bp
+++ b/Android.bp
@@ -15,24 +15,6 @@ license {
],
}
-cc_library_headers {
- name: "libavcdec_headers",
- export_include_dirs: [
- "common",
- "decoder",
- ],
- min_sdk_version: "29",
-}
-
-cc_library_headers {
- name: "libavcenc_headers",
- export_include_dirs: [
- "common",
- "encoder",
- ],
- min_sdk_version: "29",
-}
-
cc_library_static {
name: "libavcdec",
vendor_available: true,
@@ -49,13 +31,11 @@ cc_library_static {
"-Werror",
"-Wno-unused-variable",
"-Wno-null-pointer-arithmetic",
- // #KEEP_THREAD_ACTIVE is experimental
- "-UKEEP_THREADS_ACTIVE",
],
export_include_dirs: [
- "common",
"decoder",
+ "common",
],
srcs: [
@@ -300,8 +280,8 @@ cc_library_static {
],
export_include_dirs: [
- "common",
"encoder",
+ "common",
],
srcs: [ //Rate Control
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6caee5c..46c9162 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,4 @@
-cmake_minimum_required(VERSION 3.9.1)
-project(libavc C CXX)
-enable_language(ASM)
+cmake_minimum_required(VERSION 3.5)
set(AVC_ROOT "${CMAKE_CURRENT_SOURCE_DIR}")
set(AVC_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}")
@@ -16,30 +14,199 @@ if("${AVC_ROOT}" STREQUAL "${AVC_CONFIG_DIR}")
"And re-run CMake from the build directory.")
endif()
-set(THREADS_PREFER_PTHREAD_FLAG TRUE)
+set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
-
set(CMAKE_STATIC_LIBRARY_PREFIX "")
-if(${CMAKE_CROSSCOMPILING})
- set(THREADS_PTHREAD_ARG
- "2"
- CACHE STRING
- "Refer https://gitlab.kitware.com/cmake/cmake/-/issues/16920" FORCE)
+if(SANITIZE)
+ string(TOLOWER ${SANITIZE} SANITIZE)
+
+ set(CMAKE_SANITIZER_C_FLAGS "-fno-omit-frame-pointer -fsanitize=${SANITIZE}")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_SANITIZER_C_FLAGS}")
endif()
-include("${AVC_ROOT}/cmake/utils.cmake")
+list(APPEND LIBAVCDEC_SRCS
+ "${AVC_ROOT}/common/ih264_buf_mgr.c"
+ "${AVC_ROOT}/common/ih264_disp_mgr.c"
+ "${AVC_ROOT}/common/ih264_inter_pred_filters.c"
+ "${AVC_ROOT}/common/ih264_luma_intra_pred_filters.c"
+ "${AVC_ROOT}/common/ih264_chroma_intra_pred_filters.c"
+ "${AVC_ROOT}/common/ih264_padding.c"
+ "${AVC_ROOT}/common/ih264_mem_fns.c"
+ "${AVC_ROOT}/common/ih264_deblk_edge_filters.c"
+ "${AVC_ROOT}/common/ih264_iquant_itrans_recon.c"
+ "${AVC_ROOT}/common/ih264_ihadamard_scaling.c"
+ "${AVC_ROOT}/common/ih264_weighted_pred.c"
+ "${AVC_ROOT}/common/ithread.c"
+ "${AVC_ROOT}/decoder/ih264d_cabac.c"
+ "${AVC_ROOT}/decoder/ih264d_parse_mb_header.c"
+ "${AVC_ROOT}/decoder/ih264d_parse_cabac.c"
+ "${AVC_ROOT}/decoder/ih264d_process_intra_mb.c"
+ "${AVC_ROOT}/decoder/ih264d_inter_pred.c"
+ "${AVC_ROOT}/decoder/ih264d_parse_bslice.c"
+ "${AVC_ROOT}/decoder/ih264d_parse_pslice.c"
+ "${AVC_ROOT}/decoder/ih264d_parse_islice.c"
+ "${AVC_ROOT}/decoder/ih264d_cabac_init_tables.c"
+ "${AVC_ROOT}/decoder/ih264d_bitstrm.c"
+ "${AVC_ROOT}/decoder/ih264d_compute_bs.c"
+ "${AVC_ROOT}/decoder/ih264d_deblocking.c"
+ "${AVC_ROOT}/decoder/ih264d_parse_headers.c"
+ "${AVC_ROOT}/decoder/ih264d_mb_utils.c"
+ "${AVC_ROOT}/decoder/ih264d_mvpred.c"
+ "${AVC_ROOT}/decoder/ih264d_utils.c"
+ "${AVC_ROOT}/decoder/ih264d_process_bslice.c"
+ "${AVC_ROOT}/decoder/ih264d_process_pslice.c"
+ "${AVC_ROOT}/decoder/ih264d_parse_slice.c"
+ "${AVC_ROOT}/decoder/ih264d_quant_scaling.c"
+ "${AVC_ROOT}/decoder/ih264d_parse_cavlc.c"
+ "${AVC_ROOT}/decoder/ih264d_dpb_mgr.c"
+ "${AVC_ROOT}/decoder/ih264d_nal.c"
+ "${AVC_ROOT}/decoder/ih264d_sei.c"
+ "${AVC_ROOT}/decoder/ih264d_tables.c"
+ "${AVC_ROOT}/decoder/ih264d_vui.c"
+ "${AVC_ROOT}/decoder/ih264d_format_conv.c"
+ "${AVC_ROOT}/decoder/ih264d_thread_parse_decode.c"
+ "${AVC_ROOT}/decoder/ih264d_api.c"
+ "${AVC_ROOT}/decoder/ih264d_thread_compute_bs.c"
+ "${AVC_ROOT}/decoder/ih264d_function_selector_generic.c")
+
+list(APPEND LIBAVCDEC_X86_SRCS
+ "${AVC_ROOT}/decoder/x86/ih264d_function_selector.c"
+ "${AVC_ROOT}/decoder/x86/ih264d_function_selector_sse42.c"
+ "${AVC_ROOT}/decoder/x86/ih264d_function_selector_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_inter_pred_filters_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_deblk_luma_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_deblk_chroma_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_padding_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_mem_fns_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_iquant_itrans_recon_dc_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_iquant_itrans_recon_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_luma_intra_pred_filters_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_chroma_intra_pred_filters_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_iquant_itrans_recon_sse42.c"
+ "${AVC_ROOT}/common/x86/ih264_weighted_pred_sse42.c"
+ "${AVC_ROOT}/common/x86/ih264_ihadamard_scaling_sse42.c")
+
+set(LIBAVCDEC_INCLUDES ${AVC_ROOT}/common ${AVC_ROOT}/decoder)
+
+set(LIBAVCDEC_X86_C_FLAGS
+ "-DX86 -DDISABLE_AVX2 -msse4.2 -mno-avx -DDEFAULT_ARCH=D_ARCH_X86_SSE42")
+set(LIBAVCDEC_X86_INCLUDES ${AVC_ROOT}/common/x86 ${AVC_ROOT}/decoder/x86)
+set(LIBAVCDEC_C_FLAGS "${LIBAVCDEC_X86_C_FLAGS}")
+
+include_directories(${LIBAVCDEC_INCLUDES} ${LIBAVCDEC_X86_INCLUDES})
+add_library(libavcdec ${LIBAVCDEC_SRCS} ${LIBAVCDEC_X86_SRCS})
+set_target_properties(libavcdec PROPERTIES COMPILE_FLAGS "${LIBAVCDEC_C_FLAGS}")
+
+list(APPEND AVCDEC_SRCS "${AVC_ROOT}/test/decoder/main.c")
+
+add_executable(avcdec ${AVCDEC_SRCS})
+set_target_properties(avcdec
+ PROPERTIES COMPILE_FLAGS "-DMD5_DISABLE -DPROFILE_ENABLE")
+target_link_libraries(avcdec libavcdec Threads::Threads)
+
+list(APPEND LIBAVCENC_SRCS
+ "${AVC_ROOT}/common/ih264_resi_trans_quant.c"
+ "${AVC_ROOT}/common/ih264_iquant_itrans_recon.c"
+ "${AVC_ROOT}/common/ih264_ihadamard_scaling.c"
+ "${AVC_ROOT}/common/ih264_inter_pred_filters.c"
+ "${AVC_ROOT}/common/ih264_luma_intra_pred_filters.c"
+ "${AVC_ROOT}/common/ih264_chroma_intra_pred_filters.c"
+ "${AVC_ROOT}/common/ih264_padding.c"
+ "${AVC_ROOT}/common/ih264_mem_fns.c"
+ "${AVC_ROOT}/common/ih264_deblk_edge_filters.c"
+ "${AVC_ROOT}/common/ih264_deblk_tables.c"
+ "${AVC_ROOT}/common/ih264_cavlc_tables.c"
+ "${AVC_ROOT}/common/ih264_cabac_tables.c"
+ "${AVC_ROOT}/common/ih264_common_tables.c"
+ "${AVC_ROOT}/common/ih264_trans_data.c"
+ "${AVC_ROOT}/common/ih264_buf_mgr.c"
+ "${AVC_ROOT}/common/ih264_dpb_mgr.c"
+ "${AVC_ROOT}/common/ih264_list.c"
+ "${AVC_ROOT}/common/ithread.c"
+ "${AVC_ROOT}/encoder/ih264e_globals.c"
+ "${AVC_ROOT}/encoder/ih264e_intra_modes_eval.c"
+ "${AVC_ROOT}/encoder/ih264e_half_pel.c"
+ "${AVC_ROOT}/encoder/ih264e_mc.c"
+ "${AVC_ROOT}/encoder/ih264e_me.c"
+ "${AVC_ROOT}/encoder/ih264e_rc_mem_interface.c"
+ "${AVC_ROOT}/encoder/ih264e_time_stamp.c"
+ "${AVC_ROOT}/encoder/ih264e_modify_frm_rate.c"
+ "${AVC_ROOT}/encoder/ih264e_rate_control.c"
+ "${AVC_ROOT}/encoder/ih264e_core_coding.c"
+ "${AVC_ROOT}/encoder/ih264e_deblk.c"
+ "${AVC_ROOT}/encoder/ih264e_api.c"
+ "${AVC_ROOT}/encoder/ih264e_process.c"
+ "${AVC_ROOT}/encoder/ih264e_encode.c"
+ "${AVC_ROOT}/encoder/ih264e_utils.c"
+ "${AVC_ROOT}/encoder/ih264e_version.c"
+ "${AVC_ROOT}/encoder/ih264e_bitstream.c"
+ "${AVC_ROOT}/encoder/ih264e_cavlc.c"
+ "${AVC_ROOT}/encoder/ih264e_cabac_init.c"
+ "${AVC_ROOT}/encoder/ih264e_cabac.c"
+ "${AVC_ROOT}/encoder/ih264e_cabac_encode.c"
+ "${AVC_ROOT}/encoder/ih264e_encode_header.c"
+ "${AVC_ROOT}/encoder/ih264e_function_selector_generic.c"
+ "${AVC_ROOT}/encoder/ih264e_fmt_conv.c"
+ "${AVC_ROOT}/encoder/ih264e_sei.c"
+ "${AVC_ROOT}/encoder/irc_rate_control_api.c"
+ "${AVC_ROOT}/encoder/irc_bit_allocation.c"
+ "${AVC_ROOT}/encoder/irc_cbr_buffer_control.c"
+ "${AVC_ROOT}/encoder/irc_est_sad.c"
+ "${AVC_ROOT}/encoder/irc_fixed_point_error_bits.c"
+ "${AVC_ROOT}/encoder/irc_frame_info_collector.c"
+ "${AVC_ROOT}/encoder/irc_mb_model_based.c"
+ "${AVC_ROOT}/encoder/irc_picture_type.c"
+ "${AVC_ROOT}/encoder/irc_rd_model.c"
+ "${AVC_ROOT}/encoder/irc_vbr_storage_vbv.c"
+ "${AVC_ROOT}/encoder/irc_vbr_str_prms.c"
+ "${AVC_ROOT}/encoder/ime.c"
+ "${AVC_ROOT}/encoder/ime_distortion_metrics.c")
+
+list(APPEND LIBAVCENC_X86_SRCS
+ "${AVC_ROOT}/encoder/x86/ih264e_function_selector.c"
+ "${AVC_ROOT}/encoder/x86/ih264e_function_selector_sse42.c"
+ "${AVC_ROOT}/encoder/x86/ih264e_function_selector_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_iquant_itrans_recon_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_iquant_itrans_recon_dc_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_ihadamard_scaling_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_inter_pred_filters_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_mem_fns_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_padding_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_luma_intra_pred_filters_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_chroma_intra_pred_filters_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_deblk_chroma_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_deblk_luma_ssse3.c"
+ "${AVC_ROOT}/common/x86/ih264_iquant_itrans_recon_sse42.c"
+ "${AVC_ROOT}/common/x86/ih264_ihadamard_scaling_sse42.c"
+ "${AVC_ROOT}/common/x86/ih264_resi_trans_quant_sse42.c"
+ "${AVC_ROOT}/common/x86/ih264_weighted_pred_sse42.c"
+ "${AVC_ROOT}/encoder/x86/ih264e_half_pel_ssse3.c"
+ "${AVC_ROOT}/encoder/x86/ih264e_intra_modes_eval_ssse3.c"
+ "${AVC_ROOT}/encoder/x86/ime_distortion_metrics_sse42.c")
+
+set(LIBAVCENC_INCLUDES ${AVC_ROOT}/common ${AVC_ROOT}/encoder)
-libavc_add_compile_options()
-libavc_add_definitions()
-libavc_set_link_libraries()
+set(LIBAVCENC_X86_C_FLAGS "-msse4.2 -mno-avx -UHP_PL -DN_MB_ENABLE")
+set(LIBAVCENC_C_FLAGS "${LIBAVCENC_X86_C_FLAGS}")
+set(LIBAVCENC_X86_INCLUDES ${AVC_ROOT}/common/x86 ${AVC_ROOT}/encoder/x86)
-include("${AVC_ROOT}/common/common.cmake")
-include("${AVC_ROOT}/decoder/libavcdec.cmake")
-include("${AVC_ROOT}/encoder/libavcenc.cmake")
+include_directories(${LIBAVCENC_INCLUDES} ${LIBAVCENC_X86_INCLUDES})
+add_library(libavcenc ${LIBAVCENC_SRCS} ${LIBAVCENC_X86_SRCS})
+set_target_properties(libavcenc PROPERTIES COMPILE_FLAGS "${LIBAVCENC_C_FLAGS}")
-include("${AVC_ROOT}/test/decoder/avcdec.cmake")
-include("${AVC_ROOT}/test/encoder/avcenc.cmake")
+list(APPEND AVCENC_SRCS
+ "${AVC_ROOT}/test/encoder/main.c"
+ "${AVC_ROOT}/test/encoder/psnr.c"
+ "${AVC_ROOT}/test/encoder/input.c"
+ "${AVC_ROOT}/test/encoder/output.c"
+ "${AVC_ROOT}/test/encoder/recon.c")
-include("${AVC_ROOT}/fuzzer/avc_dec_fuzzer.cmake")
-include("${AVC_ROOT}/fuzzer/avc_enc_fuzzer.cmake")
+add_executable(avcenc ${AVCENC_SRCS})
+set_target_properties(avcenc
+ PROPERTIES COMPILE_FLAGS
+ "-DARM -DMD5_DISABLE -DPROFILE_ENABLE")
+target_link_libraries(avcenc
+ libavcenc
+ Threads::Threads
+ m)
diff --git a/OWNERS b/OWNERS
index b95603d..d5edff2 100644
--- a/OWNERS
+++ b/OWNERS
@@ -1,3 +1,4 @@
# owners for external/libavc
include platform/frameworks/av:/media/janitors/codec_OWNERS
essick@google.com
+hkuang@google.com
diff --git a/README.md b/README.md
deleted file mode 100644
index 5b0663a..0000000
--- a/README.md
+++ /dev/null
@@ -1,53 +0,0 @@
-# LIBAVC
-## Getting Started Document
-
-# LibAVC 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/libavc
-$ mkdir build
-$ cd build
-$ cmake ..
-$ make
-```
-
-## Cross-compiler based builds
-
-### Building for x86_32 on a x86_64 Linux machine
-```
-$ cd external/libavc
-$ 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/libavc
-$ 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
deleted file mode 100644
index 5fabde2..0000000
--- a/cmake/toolchains/aarch32_toolchain.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-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
deleted file mode 100644
index 5efbf77..0000000
--- a/cmake/toolchains/aarch64_toolchain.cmake
+++ /dev/null
@@ -1,13 +0,0 @@
-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
deleted file mode 100644
index 85ada3b..0000000
--- a/cmake/utils.cmake
+++ /dev/null
@@ -1,115 +0,0 @@
-include(CheckCXXCompilerFlag)
-
-# Adds compiler options for all targets
-function(libavc_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(libavc_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(libavc_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(libavc_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 libavc_add_executable with all arguments with FUZZER set to 1
-# Arguments:
-# Refer to libavc_add_executable's arguments
-# cmake-format: on
-
-function(libavc_add_fuzzer NAME LIB)
- libavc_add_executable(${NAME} ${LIB} FUZZER 1 ${ARGV})
-endfunction()
diff --git a/common/common.cmake b/common/common.cmake
deleted file mode 100644
index a8e599b..0000000
--- a/common/common.cmake
+++ /dev/null
@@ -1,113 +0,0 @@
-# src files
-list(
- APPEND
- LIBAVC_COMMON_SRCS
- "${AVC_ROOT}/common/ih264_buf_mgr.c"
- "${AVC_ROOT}/common/ih264_cabac_tables.c"
- "${AVC_ROOT}/common/ih264_cavlc_tables.c"
- "${AVC_ROOT}/common/ih264_chroma_intra_pred_filters.c"
- "${AVC_ROOT}/common/ih264_common_tables.c"
- "${AVC_ROOT}/common/ih264_deblk_edge_filters.c"
- "${AVC_ROOT}/common/ih264_deblk_tables.c"
- "${AVC_ROOT}/common/ih264_disp_mgr.c"
- "${AVC_ROOT}/common/ih264_dpb_mgr.c"
- "${AVC_ROOT}/common/ih264_ihadamard_scaling.c"
- "${AVC_ROOT}/common/ih264_inter_pred_filters.c"
- "${AVC_ROOT}/common/ih264_iquant_itrans_recon.c"
- "${AVC_ROOT}/common/ih264_list.c"
- "${AVC_ROOT}/common/ih264_luma_intra_pred_filters.c"
- "${AVC_ROOT}/common/ih264_mem_fns.c"
- "${AVC_ROOT}/common/ih264_padding.c"
- "${AVC_ROOT}/common/ih264_resi_trans_quant.c"
- "${AVC_ROOT}/common/ih264_trans_data.c"
- "${AVC_ROOT}/common/ih264_weighted_pred.c"
- "${AVC_ROOT}/common/ithread.c")
-
-include_directories(${AVC_ROOT}/common)
-
-# arm/x86 sources
-if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
- list(
- APPEND
- LIBAVC_COMMON_ASMS
- "${AVC_ROOT}/common/armv8/ih264_deblk_chroma_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_deblk_luma_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_default_weighted_pred_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_ihadamard_scaling_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_inter_pred_chroma_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_inter_pred_filters_luma_horz_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_inter_pred_filters_luma_vert_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_inter_pred_luma_copy_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_inter_pred_luma_horz_hpel_vert_hpel_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_inter_pred_luma_horz_hpel_vert_qpel_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_inter_pred_luma_horz_qpel_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_inter_pred_luma_horz_qpel_vert_hpel_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_inter_pred_luma_horz_qpel_vert_qpel_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_inter_pred_luma_vert_qpel_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_intra_pred_chroma_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_intra_pred_luma_16x16_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_intra_pred_luma_4x4_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_intra_pred_luma_8x8_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_iquant_itrans_recon_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_iquant_itrans_recon_dc_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_mem_fns_neon_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_padding_neon_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_resi_trans_quant_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_weighted_bi_pred_av8.s"
- "${AVC_ROOT}/common/armv8/ih264_weighted_pred_av8.s")
-
- include_directories(${AVC_ROOT}/common/arm)
- include_directories(${AVC_ROOT}/common/armv8)
-elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch32")
- list(
- APPEND
- LIBAVC_COMMON_ASMS
- "${AVC_ROOT}/common/arm/ih264_deblk_chroma_a9.s"
- "${AVC_ROOT}/common/arm/ih264_deblk_luma_a9.s"
- "${AVC_ROOT}/common/arm/ih264_default_weighted_pred_a9q.s"
- "${AVC_ROOT}/common/arm/ih264_ihadamard_scaling_a9.s"
- "${AVC_ROOT}/common/arm/ih264_inter_pred_chroma_a9q.s"
- "${AVC_ROOT}/common/arm/ih264_inter_pred_filters_luma_horz_a9q.s"
- "${AVC_ROOT}/common/arm/ih264_inter_pred_filters_luma_vert_a9q.s"
- "${AVC_ROOT}/common/arm/ih264_inter_pred_luma_bilinear_a9q.s"
- "${AVC_ROOT}/common/arm/ih264_inter_pred_luma_copy_a9q.s"
- "${AVC_ROOT}/common/arm/ih264_inter_pred_luma_horz_hpel_vert_hpel_a9q.s"
- "${AVC_ROOT}/common/arm/ih264_inter_pred_luma_horz_hpel_vert_qpel_a9q.s"
- "${AVC_ROOT}/common/arm/ih264_inter_pred_luma_horz_qpel_a9q.s"
- "${AVC_ROOT}/common/arm/ih264_inter_pred_luma_horz_qpel_vert_hpel_a9q.s"
- "${AVC_ROOT}/common/arm/ih264_inter_pred_luma_horz_qpel_vert_qpel_a9q.s"
- "${AVC_ROOT}/common/arm/ih264_inter_pred_luma_vert_qpel_a9q.s"
- "${AVC_ROOT}/common/arm/ih264_intra_pred_chroma_a9q.s"
- "${AVC_ROOT}/common/arm/ih264_intra_pred_luma_16x16_a9q.s"
- "${AVC_ROOT}/common/arm/ih264_intra_pred_luma_4x4_a9q.s"
- "${AVC_ROOT}/common/arm/ih264_intra_pred_luma_8x8_a9q.s"
- "${AVC_ROOT}/common/arm/ih264_iquant_itrans_recon_a9.s"
- "${AVC_ROOT}/common/arm/ih264_iquant_itrans_recon_dc_a9.s"
- "${AVC_ROOT}/common/arm/ih264_mem_fns_neon.s"
- "${AVC_ROOT}/common/arm/ih264_padding_neon.s"
- "${AVC_ROOT}/common/arm/ih264_resi_trans_quant_a9.s"
- "${AVC_ROOT}/common/arm/ih264_weighted_bi_pred_a9q.s"
- "${AVC_ROOT}/common/arm/ih264_weighted_pred_a9q.s")
-
- include_directories(${AVC_ROOT}/common/arm)
-else()
- list(
- APPEND
- LIBAVC_COMMON_SRCS
- "${AVC_ROOT}/common/x86/ih264_chroma_intra_pred_filters_ssse3.c"
- "${AVC_ROOT}/common/x86/ih264_deblk_chroma_ssse3.c"
- "${AVC_ROOT}/common/x86/ih264_deblk_luma_ssse3.c"
- "${AVC_ROOT}/common/x86/ih264_ihadamard_scaling_sse42.c"
- "${AVC_ROOT}/common/x86/ih264_ihadamard_scaling_ssse3.c"
- "${AVC_ROOT}/common/x86/ih264_inter_pred_filters_ssse3.c"
- "${AVC_ROOT}/common/x86/ih264_iquant_itrans_recon_dc_ssse3.c"
- "${AVC_ROOT}/common/x86/ih264_iquant_itrans_recon_sse42.c"
- "${AVC_ROOT}/common/x86/ih264_iquant_itrans_recon_ssse3.c"
- "${AVC_ROOT}/common/x86/ih264_luma_intra_pred_filters_ssse3.c"
- "${AVC_ROOT}/common/x86/ih264_mem_fns_ssse3.c"
- "${AVC_ROOT}/common/x86/ih264_padding_ssse3.c"
- "${AVC_ROOT}/common/x86/ih264_resi_trans_quant_sse42.c"
- "${AVC_ROOT}/common/x86/ih264_weighted_pred_sse42.c")
-
- include_directories(${AVC_ROOT}/common/x86)
-endif()
diff --git a/common/ithread.c b/common/ithread.c
index e7f63ad..d19bdec 100644
--- a/common/ithread.c
+++ b/common/ithread.c
@@ -209,30 +209,3 @@ WORD32 ithread_set_affinity(WORD32 core_id)
return 1;
}
-
-#ifdef KEEP_THREADS_ACTIVE
-WORD32 ithread_get_cond_struct_size(void)
-{
- return (sizeof(pthread_cond_t));
-}
-
-WORD32 ithread_cond_init(void *cond)
-{
- return pthread_cond_init((pthread_cond_t *)cond, NULL);
-}
-
-WORD32 ithread_cond_destroy(void *cond)
-{
- return pthread_cond_destroy((pthread_cond_t *)cond);
-}
-
-WORD32 ithread_cond_wait(void *cond, void *mutex)
-{
- return pthread_cond_wait((pthread_cond_t *)cond, (pthread_mutex_t *)mutex);
-}
-
-WORD32 ithread_cond_signal(void *cond)
-{
- return pthread_cond_signal((pthread_cond_t *)cond);
-}
-#endif
diff --git a/common/ithread.h b/common/ithread.h
index c2843f8..3e5aa9c 100644
--- a/common/ithread.h
+++ b/common/ithread.h
@@ -98,16 +98,4 @@ WORD32 ithread_set_affinity(WORD32 core_id);
void ithread_set_name(CHAR *pc_thread_name);
-#ifdef KEEP_THREADS_ACTIVE
-WORD32 ithread_get_cond_struct_size(void);
-
-WORD32 ithread_cond_init(void *cond);
-
-WORD32 ithread_cond_destroy(void *cond);
-
-WORD32 ithread_cond_wait(void *cond, void *mutex);
-
-WORD32 ithread_cond_signal(void *cond);
-#endif
-
#endif /* _ITHREAD_H_ */
diff --git a/decoder/ih264d_api.c b/decoder/ih264d_api.c
index 923c519..2508d7b 100644
--- a/decoder/ih264d_api.c
+++ b/decoder/ih264d_api.c
@@ -1328,57 +1328,6 @@ WORD32 ih264d_free_static_bufs(iv_obj_t *dec_hdl)
pf_aligned_free = ps_dec->pf_aligned_free;
pv_mem_ctxt = ps_dec->pv_mem_ctxt;
-#ifdef KEEP_THREADS_ACTIVE
- /* Wait for threads */
- ps_dec->i4_break_threads = 1;
- if(ps_dec->u4_dec_thread_created)
- {
- ithread_mutex_lock(ps_dec->apv_proc_start_mutex[0]);
-
- ps_dec->ai4_process_start[0] = PROC_START;
-
- ithread_cond_signal(ps_dec->apv_proc_start_condition[0]);
-
- ithread_mutex_unlock(ps_dec->apv_proc_start_mutex[0]);
-
- ithread_join(ps_dec->pv_dec_thread_handle, NULL);
-
- ps_dec->u4_dec_thread_created = 0;
- }
-
- if(ps_dec->u4_bs_deblk_thread_created)
- {
- ithread_mutex_lock(ps_dec->apv_proc_start_mutex[1]);
-
- ps_dec->ai4_process_start[1] = PROC_START;
-
- ithread_cond_signal(ps_dec->apv_proc_start_condition[1]);
-
- ithread_mutex_unlock(ps_dec->apv_proc_start_mutex[1]);
-
- ithread_join(ps_dec->pv_bs_deblk_thread_handle, NULL);
-
- ps_dec->u4_bs_deblk_thread_created = 0;
- }
-
- // destroy mutex and condition variable for both the threads
- // 1. ih264d_decode_picture_thread
- // 2. ih264d_recon_deblk_thread
- {
- UWORD32 i;
- for(i = 0; i < 2; i++)
- {
- ithread_cond_destroy(ps_dec->apv_proc_start_condition[i]);
- ithread_cond_destroy(ps_dec->apv_proc_done_condition[i]);
-
- ithread_mutex_destroy(ps_dec->apv_proc_start_mutex[i]);
- ithread_mutex_destroy(ps_dec->apv_proc_done_mutex[i]);
- }
- }
- PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->apv_proc_start_mutex[0]);
- PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->apv_proc_start_condition[0]);
-#endif
-
PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->ps_sps);
PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->ps_pps);
PS_DEC_ALIGNED_FREE(ps_dec, ps_dec->pv_dec_thread_handle);
@@ -1520,59 +1469,6 @@ WORD32 ih264d_allocate_static_bufs(iv_obj_t **dec_hdl, void *pv_api_ip, void *pv
memset(pv_buf, 0, size);
ps_dec->pv_bs_deblk_thread_handle = pv_buf;
-#ifdef KEEP_THREADS_ACTIVE
- {
- UWORD32 i;
- /* Request memory to hold mutex (start/done) for both threads */
- size = ithread_get_mutex_lock_size() << 2;
- pv_buf = pf_aligned_alloc(pv_mem_ctxt, 8, size);
- RETURN_IF((NULL == pv_buf), IV_FAIL);
- memset(pv_buf, 0, size);
-
- // init mutex variable for both the threads
- // 1. ih264d_decode_picture_thread
- // 2. ih264d_recon_deblk_thread
- for(i = 0; i < 2; i++)
- {
- WORD32 ret;
- WORD32 mutex_size = ithread_get_mutex_lock_size();
-
- ps_dec->apv_proc_start_mutex[i] =
- (UWORD8 *)pv_buf + (2 * i * mutex_size);
- ps_dec->apv_proc_done_mutex[i] =
- (UWORD8 *)pv_buf + ((2 * i + 1) * mutex_size);
-
- ret = ithread_mutex_init(ps_dec->apv_proc_start_mutex[0]);
- RETURN_IF((ret != IV_SUCCESS), ret);
-
- ret = ithread_mutex_init(ps_dec->apv_proc_done_mutex[i]);
- RETURN_IF((ret != IV_SUCCESS), ret);
- }
-
- size = ithread_get_cond_struct_size() << 2;
- pv_buf = pf_aligned_alloc(pv_mem_ctxt, 8, size);
- RETURN_IF((NULL == pv_buf), IV_FAIL);
- memset(pv_buf, 0, size);
-
- // init condition variable for both the threads
- for(i = 0; i < 2; i++)
- {
- WORD32 ret;
- WORD32 cond_size = ithread_get_cond_struct_size();
- ps_dec->apv_proc_start_condition[i] =
- (UWORD8 *)pv_buf + (2 * i * cond_size);
- ps_dec->apv_proc_done_condition[i] =
- (UWORD8 *)pv_buf + ((2 * i + 1) * cond_size);
-
- ret = ithread_cond_init(ps_dec->apv_proc_start_condition[i]);
- RETURN_IF((ret != IV_SUCCESS), ret);
-
- ret = ithread_cond_init(ps_dec->apv_proc_done_condition[i]);
- RETURN_IF((ret != IV_SUCCESS), ret);
- }
- }
-#endif
-
size = sizeof(dpb_manager_t);
pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
RETURN_IF((NULL == pv_buf), IV_FAIL);
@@ -2122,26 +2018,6 @@ WORD32 ih264d_video_decode(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
}
ps_dec->u1_pic_decode_done = 0;
-#ifdef KEEP_THREADS_ACTIVE
- {
- UWORD32 i;
- ps_dec->i4_break_threads = 0;
- for (i = 0; i < 2; i++)
- {
- ret = ithread_mutex_lock(ps_dec->apv_proc_start_mutex[i]);
- RETURN_IF((ret != IV_SUCCESS), ret);
-
- ps_dec->ai4_process_start[i] = PROC_INIT;
-
- ret = ithread_mutex_unlock(ps_dec->apv_proc_start_mutex[i]);
- RETURN_IF((ret != IV_SUCCESS), ret);
- }
- }
-#else
- ps_dec->u4_dec_thread_created = 0;
- ps_dec->u4_bs_deblk_thread_created = 0;
-#endif
-
ps_dec_op->u4_num_bytes_consumed = 0;
ps_dec_op->i4_reorder_depth = -1;
ps_dec_op->i4_display_index = DEFAULT_POC;
@@ -2247,7 +2123,7 @@ WORD32 ih264d_video_decode(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
if(ps_pic_buf == NULL)
{
- UWORD32 display_queued = 0;
+ UWORD32 i, display_queued = 0;
/* check if any buffer was given for display which is not returned yet */
for(i = 0; i < (MAX_DISP_BUFS_NEW); i++)
@@ -2377,6 +2253,9 @@ WORD32 ih264d_video_decode(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
ps_dec->u4_first_slice_in_pic = 1;
ps_dec->u1_slice_header_done = 0;
ps_dec->u1_dangling_field = 0;
+
+ ps_dec->u4_dec_thread_created = 0;
+ ps_dec->u4_bs_deblk_thread_created = 0;
ps_dec->u4_cur_bs_mb_num = 0;
ps_dec->u4_start_recon_deblk = 0;
ps_dec->u4_sps_cnt_in_process = 0;
@@ -2733,12 +2612,10 @@ WORD32 ih264d_video_decode(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
}
/* close deblock thread if it is not closed yet*/
-#ifndef KEEP_THREADS_ACTIVE
if(ps_dec->u4_num_cores == 3)
{
ih264d_signal_bs_deblk_thread(ps_dec);
}
-#endif
{
diff --git a/decoder/ih264d_parse_pslice.c b/decoder/ih264d_parse_pslice.c
index 77ea4b3..6f8df9e 100644
--- a/decoder/ih264d_parse_pslice.c
+++ b/decoder/ih264d_parse_pslice.c
@@ -1566,17 +1566,6 @@ WORD32 ih264d_mark_err_slice_skip(dec_struct_t * ps_dec,
ps_dec->u4_dec_thread_created = 1;
}
-#ifdef KEEP_THREADS_ACTIVE
- ret = ithread_mutex_lock(ps_dec->apv_proc_start_mutex[0]);
- RETURN_IF((ret != IV_SUCCESS), ret);
-
- ps_dec->ai4_process_start[0] = PROC_START;
- ret = ithread_cond_signal(ps_dec->apv_proc_start_condition[0]);
- RETURN_IF((ret != IV_SUCCESS), ret);
-
- ret = ithread_mutex_unlock(ps_dec->apv_proc_start_mutex[0]);
- RETURN_IF((ret != IV_SUCCESS), ret);
-#endif
if((ps_dec->u4_num_cores == 3) &&
((ps_dec->u4_app_disable_deblk_frm == 0) || ps_dec->i1_recon_in_thread3_flag)
@@ -1588,20 +1577,6 @@ WORD32 ih264d_mark_err_slice_skip(dec_struct_t * ps_dec,
(void *)ps_dec);
ps_dec->u4_bs_deblk_thread_created = 1;
}
-#ifdef KEEP_THREADS_ACTIVE
- if (ps_dec->u4_bs_deblk_thread_created)
- {
- ret = ithread_mutex_lock(ps_dec->apv_proc_start_mutex[1]);
- RETURN_IF((ret != IV_SUCCESS), ret);
-
- ps_dec->ai4_process_start[1] = PROC_START;
- ret = ithread_cond_signal(ps_dec->apv_proc_start_condition[1]);
- RETURN_IF((ret != IV_SUCCESS), ret);
-
- ret = ithread_mutex_unlock(ps_dec->apv_proc_start_mutex[1]);
- RETURN_IF((ret != IV_SUCCESS), ret);
- }
-#endif
}
}
}
diff --git a/decoder/ih264d_parse_slice.c b/decoder/ih264d_parse_slice.c
index 12fbeeb..ad033be 100644
--- a/decoder/ih264d_parse_slice.c
+++ b/decoder/ih264d_parse_slice.c
@@ -1598,17 +1598,6 @@ WORD32 ih264d_parse_decode_slice(UWORD8 u1_is_idr_slice,
ps_dec->u4_dec_thread_created = 1;
}
-#ifdef KEEP_THREADS_ACTIVE
- ret = ithread_mutex_lock(ps_dec->apv_proc_start_mutex[0]);
- RETURN_IF((ret != IV_SUCCESS), ret);
-
- ps_dec->ai4_process_start[0] = PROC_START;
- ret = ithread_cond_signal(ps_dec->apv_proc_start_condition[0]);
- RETURN_IF((ret != IV_SUCCESS), ret);
-
- ret = ithread_mutex_unlock(ps_dec->apv_proc_start_mutex[0]);
- RETURN_IF((ret != IV_SUCCESS), ret);
-#endif
if((ps_dec->u4_num_cores == 3) &&
((ps_dec->u4_app_disable_deblk_frm == 0) || ps_dec->i1_recon_in_thread3_flag)
@@ -1620,20 +1609,6 @@ WORD32 ih264d_parse_decode_slice(UWORD8 u1_is_idr_slice,
(void *)ps_dec);
ps_dec->u4_bs_deblk_thread_created = 1;
}
-#ifdef KEEP_THREADS_ACTIVE
- if (ps_dec->u4_bs_deblk_thread_created)
- {
- ret = ithread_mutex_lock(ps_dec->apv_proc_start_mutex[1]);
- RETURN_IF((ret != IV_SUCCESS), ret);
-
- ps_dec->ai4_process_start[1] = PROC_START;
- ret = ithread_cond_signal(ps_dec->apv_proc_start_condition[1]);
- RETURN_IF((ret != IV_SUCCESS), ret);
-
- ret = ithread_mutex_unlock(ps_dec->apv_proc_start_mutex[1]);
- RETURN_IF((ret != IV_SUCCESS), ret);
- }
-#endif
}
}
diff --git a/decoder/ih264d_structs.h b/decoder/ih264d_structs.h
index e6a962c..fdfbada 100644
--- a/decoder/ih264d_structs.h
+++ b/decoder/ih264d_structs.h
@@ -123,16 +123,6 @@ typedef enum
COEFF_ABS_LEVEL_CAT_5_OFFSET = 0
} cabac_blk_cat_offset_t;
-#ifdef KEEP_THREADS_ACTIVE
-typedef enum
-{
- PROC_INIT,
- PROC_START,
- PROC_IN_PROGRESS,
- PROC_DONE,
-} proc_state_t;
-#endif
-
/** Structure for the MV bank */
typedef struct _mv_pred_t
{
@@ -1287,44 +1277,6 @@ typedef struct _DecStruct
UWORD8 u1_separate_parse;
UWORD32 u4_dec_thread_created;
void *pv_dec_thread_handle;
-
-#ifdef KEEP_THREADS_ACTIVE
- /**
- * Condition variable to signal process start - One for each thread
- */
- void *apv_proc_start_condition[2];
-
- /**
- * Mutex used to keep the functions thread-safe - One for each thread
- */
- void *apv_proc_start_mutex[2];
-
- /**
- * Condition variable to signal process done - One for each thread
- */
- void *apv_proc_done_condition[2];
-
- /**
- * Mutex used to keep the functions thread-safe - One for each thread
- */
- void *apv_proc_done_mutex[2];
-
- /**
- * Process state start - One for each thread
- */
- proc_state_t ai4_process_start[2];
-
- /**
- * Process state end - One for each thread
- */
- proc_state_t ai4_process_done[2];
-
- /**
- * Flag to signal processing thread to exit
- */
- WORD32 i4_break_threads;
-#endif
-
volatile UWORD8 *pu1_dec_mb_map;
volatile UWORD8 *pu1_recon_mb_map;
volatile UWORD16 *pu2_slice_num_map;
diff --git a/decoder/ih264d_thread_compute_bs.c b/decoder/ih264d_thread_compute_bs.c
index e647a60..951cef4 100644
--- a/decoder/ih264d_thread_compute_bs.c
+++ b/decoder/ih264d_thread_compute_bs.c
@@ -697,73 +697,41 @@ void ih264d_recon_deblk_thread(dec_struct_t *ps_dec)
while(1)
{
-#ifdef KEEP_THREADS_ACTIVE
- UWORD32 ret = ithread_mutex_lock(ps_dec->apv_proc_start_mutex[1]);
- if(OK != ret)
- break;
- while(ps_dec->ai4_process_start[1] != PROC_START)
- {
- ithread_cond_wait(ps_dec->apv_proc_start_condition[1],
- ps_dec->apv_proc_start_mutex[1]);
- }
- ps_dec->ai4_process_start[1] = PROC_IN_PROGRESS;
+ DEBUG_THREADS_PRINTF(" Entering compute bs slice\n");
+ ih264d_recon_deblk_slice(ps_dec, ps_tfr_cxt);
- ret = ithread_mutex_unlock(ps_dec->apv_proc_start_mutex[1]);
- if(OK != ret || ps_dec->i4_break_threads == 1)
- break;
-#endif
+ DEBUG_THREADS_PRINTF(" Exit compute bs slice \n");
- while(1)
+ if(ps_dec->cur_recon_mb_num > ps_dec->ps_cur_sps->u2_max_mb_addr)
{
-
- DEBUG_THREADS_PRINTF(" Entering compute bs slice\n");
- ih264d_recon_deblk_slice(ps_dec, ps_tfr_cxt);
-
- DEBUG_THREADS_PRINTF(" Exit compute bs slice \n");
-
- if(ps_dec->cur_recon_mb_num > ps_dec->ps_cur_sps->u2_max_mb_addr)
- {
- break;
- }
- else
- {
- ps_dec->ps_computebs_cur_slice++;
- ps_dec->u2_cur_slice_num_bs++;
- }
- DEBUG_THREADS_PRINTF("CBS thread:Got next slice/end of frame signal \n ");
-
+ break;
}
-
- if(ps_dec->u4_output_present &&
- (3 == ps_dec->u4_num_cores) &&
- (ps_dec->u4_fmt_conv_cur_row < ps_dec->s_disp_frame_info.u4_y_ht))
+ else
{
- ps_dec->u4_fmt_conv_num_rows =
- (ps_dec->s_disp_frame_info.u4_y_ht
- - ps_dec->u4_fmt_conv_cur_row);
- ih264d_format_convert(ps_dec, &(ps_dec->s_disp_op),
- ps_dec->u4_fmt_conv_cur_row,
- ps_dec->u4_fmt_conv_num_rows);
- ps_dec->u4_fmt_conv_cur_row += ps_dec->u4_fmt_conv_num_rows;
-
+ ps_dec->ps_computebs_cur_slice++;
+ ps_dec->u2_cur_slice_num_bs++;
}
+ DEBUG_THREADS_PRINTF("CBS thread:Got next slice/end of frame signal \n ");
-#ifdef KEEP_THREADS_ACTIVE
- ret = ithread_mutex_lock(ps_dec->apv_proc_done_mutex[1]);
- if(OK != ret)
- break;
+ }
- ps_dec->ai4_process_done[1] = PROC_DONE;
- ithread_cond_signal(ps_dec->apv_proc_done_condition[1]);
+ if(ps_dec->u4_output_present &&
+ (3 == ps_dec->u4_num_cores) &&
+ (ps_dec->u4_fmt_conv_cur_row < ps_dec->s_disp_frame_info.u4_y_ht))
+ {
+ ps_dec->u4_fmt_conv_num_rows =
+ (ps_dec->s_disp_frame_info.u4_y_ht
+ - ps_dec->u4_fmt_conv_cur_row);
+ ih264d_format_convert(ps_dec, &(ps_dec->s_disp_op),
+ ps_dec->u4_fmt_conv_cur_row,
+ ps_dec->u4_fmt_conv_num_rows);
+ ps_dec->u4_fmt_conv_cur_row += ps_dec->u4_fmt_conv_num_rows;
- ret = ithread_mutex_unlock(ps_dec->apv_proc_done_mutex[1]);
- if(OK != ret)
- break;
-#else
- break;
-#endif
}
+
+
+
}
diff --git a/decoder/ih264d_thread_parse_decode.c b/decoder/ih264d_thread_parse_decode.c
index 47571b3..131c808 100644
--- a/decoder/ih264d_thread_parse_decode.c
+++ b/decoder/ih264d_thread_parse_decode.c
@@ -593,74 +593,39 @@ WORD32 ih264d_decode_slice_thread(dec_struct_t *ps_dec)
void ih264d_decode_picture_thread(dec_struct_t *ps_dec )
{
ithread_set_name("ih264d_decode_picture_thread");
-
while(1)
{
-#ifdef KEEP_THREADS_ACTIVE
- WORD32 ret = ithread_mutex_lock(ps_dec->apv_proc_start_mutex[0]);
- if(OK != ret)
- break;
+ /*Complete all writes before processing next slice*/
- while(ps_dec->ai4_process_start[0] != PROC_START)
- {
- ithread_cond_wait(ps_dec->apv_proc_start_condition[0],
- ps_dec->apv_proc_start_mutex[0]);
- }
- ps_dec->ai4_process_start[0] = PROC_IN_PROGRESS;
+ DEBUG_THREADS_PRINTF(" Entering decode slice\n");
- ret = ithread_mutex_unlock(ps_dec->apv_proc_start_mutex[0]);
- if(OK != ret || ps_dec->i4_break_threads == 1)
- break;
-#endif
- while(1)
- {
- /*Complete all writes before processing next slice*/
-
- DEBUG_THREADS_PRINTF(" Entering decode slice\n");
+ ih264d_decode_slice_thread(ps_dec);
+ DEBUG_THREADS_PRINTF(" Exit ih264d_decode_slice_thread \n");
- ih264d_decode_slice_thread(ps_dec);
- DEBUG_THREADS_PRINTF(" Exit ih264d_decode_slice_thread \n");
-
-
- if(ps_dec->cur_dec_mb_num
- > ps_dec->ps_cur_sps->u2_max_mb_addr)
- {
- /*Last slice in frame*/
- break;
- }
- else
- {
- ps_dec->ps_decode_cur_slice++;
- ps_dec->u2_cur_slice_num_dec_thread++;
- }
+ if(ps_dec->cur_dec_mb_num
+ > ps_dec->ps_cur_sps->u2_max_mb_addr)
+ {
+ /*Last slice in frame*/
+ break;
}
- if(ps_dec->u4_output_present && (2 == ps_dec->u4_num_cores) &&
- (ps_dec->u4_fmt_conv_cur_row < ps_dec->s_disp_frame_info.u4_y_ht))
+ else
{
- ps_dec->u4_fmt_conv_num_rows =
- (ps_dec->s_disp_frame_info.u4_y_ht
- - ps_dec->u4_fmt_conv_cur_row);
- ih264d_format_convert(ps_dec, &(ps_dec->s_disp_op),
- ps_dec->u4_fmt_conv_cur_row,
- ps_dec->u4_fmt_conv_num_rows);
- ps_dec->u4_fmt_conv_cur_row += ps_dec->u4_fmt_conv_num_rows;
+ ps_dec->ps_decode_cur_slice++;
+ ps_dec->u2_cur_slice_num_dec_thread++;
}
-#ifdef KEEP_THREADS_ACTIVE
- ret = ithread_mutex_lock(ps_dec->apv_proc_done_mutex[0]);
- if(OK != ret)
- break;
-
- ps_dec->ai4_process_done[0] = PROC_DONE;
- ithread_cond_signal(ps_dec->apv_proc_done_condition[0]);
-
- ret = ithread_mutex_unlock(ps_dec->apv_proc_done_mutex[0]);
- if(OK != ret)
- break;
-#else
- break;
-#endif
+ }
+ if(ps_dec->u4_output_present && (2 == ps_dec->u4_num_cores) &&
+ (ps_dec->u4_fmt_conv_cur_row < ps_dec->s_disp_frame_info.u4_y_ht))
+ {
+ ps_dec->u4_fmt_conv_num_rows =
+ (ps_dec->s_disp_frame_info.u4_y_ht
+ - ps_dec->u4_fmt_conv_cur_row);
+ ih264d_format_convert(ps_dec, &(ps_dec->s_disp_op),
+ ps_dec->u4_fmt_conv_cur_row,
+ ps_dec->u4_fmt_conv_num_rows);
+ ps_dec->u4_fmt_conv_cur_row += ps_dec->u4_fmt_conv_num_rows;
}
}
@@ -668,58 +633,16 @@ void ih264d_signal_decode_thread(dec_struct_t *ps_dec)
{
if(ps_dec->u4_dec_thread_created == 1)
{
-#ifdef KEEP_THREADS_ACTIVE
- proc_state_t i4_process_state;
- ithread_mutex_lock(ps_dec->apv_proc_start_mutex[0]);
- i4_process_state = ps_dec->ai4_process_start[0];
- ithread_mutex_unlock(ps_dec->apv_proc_start_mutex[0]);
-
- // only wait if the thread has started decoding
- if(i4_process_state != PROC_INIT)
- {
- ithread_mutex_lock(ps_dec->apv_proc_done_mutex[0]);
-
- while(ps_dec->ai4_process_done[0] != PROC_DONE)
- {
- ithread_cond_wait(ps_dec->apv_proc_done_condition[0],
- ps_dec->apv_proc_done_mutex[0]);
- }
- ps_dec->ai4_process_done[0] = PROC_INIT;
- ithread_mutex_unlock(ps_dec->apv_proc_done_mutex[0]);
- }
-#else
ithread_join(ps_dec->pv_dec_thread_handle, NULL);
ps_dec->u4_dec_thread_created = 0;
-#endif
}
}
void ih264d_signal_bs_deblk_thread(dec_struct_t *ps_dec)
{
if(ps_dec->u4_bs_deblk_thread_created)
{
-#ifdef KEEP_THREADS_ACTIVE
- proc_state_t i4_process_state;
- ithread_mutex_lock(ps_dec->apv_proc_start_mutex[1]);
- i4_process_state = ps_dec->ai4_process_start[1];
- ithread_mutex_unlock(ps_dec->apv_proc_start_mutex[1]);
-
- // only wait if the thread has started deblking
- if(i4_process_state != PROC_INIT)
- {
- ithread_mutex_lock(ps_dec->apv_proc_done_mutex[1]);
-
- while(ps_dec->ai4_process_done[1] != PROC_DONE)
- {
- ithread_cond_wait(ps_dec->apv_proc_done_condition[1],
- ps_dec->apv_proc_done_mutex[1]);
- }
- ps_dec->ai4_process_done[1] = PROC_INIT;
- ithread_mutex_unlock(ps_dec->apv_proc_done_mutex[1]);
- }
-#else
ithread_join(ps_dec->pv_bs_deblk_thread_handle, NULL);
ps_dec->u4_bs_deblk_thread_created = 0;
-#endif
}
}
diff --git a/decoder/libavcdec.cmake b/decoder/libavcdec.cmake
deleted file mode 100644
index 911c328..0000000
--- a/decoder/libavcdec.cmake
+++ /dev/null
@@ -1,53 +0,0 @@
-# src files
-list(
- APPEND
- LIBAVCDEC_SRCS
- "${AVC_ROOT}/decoder/ih264d_api.c"
- "${AVC_ROOT}/decoder/ih264d_bitstrm.c"
- "${AVC_ROOT}/decoder/ih264d_cabac.c"
- "${AVC_ROOT}/decoder/ih264d_cabac_init_tables.c"
- "${AVC_ROOT}/decoder/ih264d_compute_bs.c"
- "${AVC_ROOT}/decoder/ih264d_deblocking.c"
- "${AVC_ROOT}/decoder/ih264d_dpb_mgr.c"
- "${AVC_ROOT}/decoder/ih264d_format_conv.c"
- "${AVC_ROOT}/decoder/ih264d_function_selector_generic.c"
- "${AVC_ROOT}/decoder/ih264d_inter_pred.c"
- "${AVC_ROOT}/decoder/ih264d_mb_utils.c"
- "${AVC_ROOT}/decoder/ih264d_mvpred.c"
- "${AVC_ROOT}/decoder/ih264d_nal.c"
- "${AVC_ROOT}/decoder/ih264d_parse_bslice.c"
- "${AVC_ROOT}/decoder/ih264d_parse_cabac.c"
- "${AVC_ROOT}/decoder/ih264d_parse_cavlc.c"
- "${AVC_ROOT}/decoder/ih264d_parse_headers.c"
- "${AVC_ROOT}/decoder/ih264d_parse_islice.c"
- "${AVC_ROOT}/decoder/ih264d_parse_mb_header.c"
- "${AVC_ROOT}/decoder/ih264d_parse_pslice.c"
- "${AVC_ROOT}/decoder/ih264d_parse_slice.c"
- "${AVC_ROOT}/decoder/ih264d_process_bslice.c"
- "${AVC_ROOT}/decoder/ih264d_process_intra_mb.c"
- "${AVC_ROOT}/decoder/ih264d_process_pslice.c"
- "${AVC_ROOT}/decoder/ih264d_quant_scaling.c"
- "${AVC_ROOT}/decoder/ih264d_sei.c"
- "${AVC_ROOT}/decoder/ih264d_tables.c"
- "${AVC_ROOT}/decoder/ih264d_thread_compute_bs.c"
- "${AVC_ROOT}/decoder/ih264d_thread_parse_decode.c"
- "${AVC_ROOT}/decoder/ih264d_utils.c"
- "${AVC_ROOT}/decoder/ih264d_vui.c")
-
-include_directories(${AVC_ROOT}/decoder)
-
-if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64" OR "${CMAKE_SYSTEM_PROCESSOR}"
- STREQUAL "aarch32")
- list(
- APPEND LIBAVCDEC_ASMS "${AVC_ROOT}/decoder/arm/ih264d_function_selector.c"
- "${AVC_ROOT}/decoder/arm/ih264d_function_selector_a9q.c"
- "${AVC_ROOT}/decoder/arm/ih264d_function_selector_av8.c")
-else()
- list(
- APPEND LIBAVCDEC_SRCS "${AVC_ROOT}/decoder/x86/ih264d_function_selector.c"
- "${AVC_ROOT}/decoder/x86/ih264d_function_selector_sse42.c"
- "${AVC_ROOT}/decoder/x86/ih264d_function_selector_ssse3.c")
-endif()
-
-add_library(libavcdec STATIC ${LIBAVC_COMMON_SRCS} ${LIBAVC_COMMON_ASMS}
- ${LIBAVCDEC_SRCS} ${LIBAVCDEC_ASMS})
diff --git a/encoder/ih264e_bitstream.h b/encoder/ih264e_bitstream.h
index 4f592f3..5b5c700 100644
--- a/encoder/ih264e_bitstream.h
+++ b/encoder/ih264e_bitstream.h
@@ -82,7 +82,7 @@
* @brief Macro to check if emulation prevention byte insertion is required
******************************************************************************
*/
-#define SHOULD_INSERT_EPB(zero_run, next_byte) \
+#define INSERT_EPB(zero_run, next_byte) \
((zero_run) == EPB_ZERO_BYTES) && (0 == ((next_byte) & 0xFC))
/**
@@ -129,7 +129,7 @@
*/
#define PUTBYTE_EPB(ptr,off,byte,zero_run) \
{ \
- if( SHOULD_INSERT_EPB(zero_run, byte) ) \
+ if( INSERT_EPB(zero_run, byte) ) \
{ \
ptr[off] = EPB_BYTE; \
off++; \
@@ -231,7 +231,7 @@ typedef struct bitstrm
*/
static inline IH264E_ERROR_T ih264e_put_byte_epb(bitstrm_t *ps_bitstrm, UWORD8 byte)
{
- if (SHOULD_INSERT_EPB(ps_bitstrm->i4_zero_bytes_run, byte))
+ if (INSERT_EPB(ps_bitstrm->i4_zero_bytes_run, byte))
{
if ((ps_bitstrm->u4_strm_buf_offset + 1) >= ps_bitstrm->u4_max_strm_size)
{
diff --git a/encoder/libavcenc.cmake b/encoder/libavcenc.cmake
deleted file mode 100644
index b948a6e..0000000
--- a/encoder/libavcenc.cmake
+++ /dev/null
@@ -1,91 +0,0 @@
-# src files
-list(
- APPEND
- LIBAVCENC_SRCS
- "${AVC_ROOT}/encoder/ih264e_api.c"
- "${AVC_ROOT}/encoder/ih264e_bitstream.c"
- "${AVC_ROOT}/encoder/ih264e_cabac.c"
- "${AVC_ROOT}/encoder/ih264e_cabac_encode.c"
- "${AVC_ROOT}/encoder/ih264e_cabac_init.c"
- "${AVC_ROOT}/encoder/ih264e_cavlc.c"
- "${AVC_ROOT}/encoder/ih264e_core_coding.c"
- "${AVC_ROOT}/encoder/ih264e_deblk.c"
- "${AVC_ROOT}/encoder/ih264e_encode.c"
- "${AVC_ROOT}/encoder/ih264e_encode_header.c"
- "${AVC_ROOT}/encoder/ih264e_fmt_conv.c"
- "${AVC_ROOT}/encoder/ih264e_function_selector_generic.c"
- "${AVC_ROOT}/encoder/ih264e_globals.c"
- "${AVC_ROOT}/encoder/ih264e_half_pel.c"
- "${AVC_ROOT}/encoder/ih264e_intra_modes_eval.c"
- "${AVC_ROOT}/encoder/ih264e_mc.c"
- "${AVC_ROOT}/encoder/ih264e_me.c"
- "${AVC_ROOT}/encoder/ih264e_modify_frm_rate.c"
- "${AVC_ROOT}/encoder/ih264e_process.c"
- "${AVC_ROOT}/encoder/ih264e_rate_control.c"
- "${AVC_ROOT}/encoder/ih264e_rc_mem_interface.c"
- "${AVC_ROOT}/encoder/ih264e_sei.c"
- "${AVC_ROOT}/encoder/ih264e_time_stamp.c"
- "${AVC_ROOT}/encoder/ih264e_utils.c"
- "${AVC_ROOT}/encoder/ih264e_version.c"
- "${AVC_ROOT}/encoder/ime.c"
- "${AVC_ROOT}/encoder/ime_distortion_metrics.c"
- "${AVC_ROOT}/encoder/irc_bit_allocation.c"
- "${AVC_ROOT}/encoder/irc_cbr_buffer_control.c"
- "${AVC_ROOT}/encoder/irc_est_sad.c"
- "${AVC_ROOT}/encoder/irc_fixed_point_error_bits.c"
- "${AVC_ROOT}/encoder/irc_frame_info_collector.c"
- "${AVC_ROOT}/encoder/irc_mb_model_based.c"
- "${AVC_ROOT}/encoder/irc_picture_type.c"
- "${AVC_ROOT}/encoder/irc_rate_control_api.c"
- "${AVC_ROOT}/encoder/irc_rd_model.c"
- "${AVC_ROOT}/encoder/irc_vbr_storage_vbv.c"
- "${AVC_ROOT}/encoder/irc_vbr_str_prms.c")
-
-include_directories(${AVC_ROOT}/encoder)
-
-if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64")
- list(
- APPEND
- LIBAVCENC_ASMS
- "${AVC_ROOT}/encoder/arm/ih264e_function_selector.c"
- "${AVC_ROOT}/encoder/arm/ih264e_function_selector_a9q.c"
- "${AVC_ROOT}/encoder/arm/ih264e_function_selector_av8.c"
- "${AVC_ROOT}/encoder/armv8/ih264e_evaluate_intra16x16_modes_av8.s"
- "${AVC_ROOT}/encoder/armv8/ih264e_evaluate_intra_chroma_modes_av8.s"
- "${AVC_ROOT}/encoder/armv8/ih264e_half_pel_av8.s"
- "${AVC_ROOT}/encoder/armv8/ime_distortion_metrics_av8.s")
-
- include_directories(${AVC_ROOT}/encoder/armv8)
-elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch32")
- list(
- APPEND
- LIBAVCENC_ASMS
- "${AVC_ROOT}/encoder/arm/ih264e_function_selector.c"
- "${AVC_ROOT}/encoder/arm/ih264e_function_selector_a9q.c"
- "${AVC_ROOT}/encoder/arm/ih264e_function_selector_av8.c"
- "${AVC_ROOT}/encoder/arm/ih264e_evaluate_intra16x16_modes_a9q.s"
- "${AVC_ROOT}/encoder/arm/ih264e_evaluate_intra4x4_modes_a9q.s"
- "${AVC_ROOT}/encoder/arm/ih264e_evaluate_intra_chroma_modes_a9q.s"
- "${AVC_ROOT}/encoder/arm/ih264e_fmt_conv.s"
- "${AVC_ROOT}/encoder/arm/ih264e_half_pel.s"
- "${AVC_ROOT}/encoder/arm/ime_distortion_metrics_a9q.s")
-
- include_directories(${AVC_ROOT}/encoder/armv8)
-else()
- list(
- APPEND
- LIBAVCENC_SRCS
- "${AVC_ROOT}/encoder/x86/ih264e_function_selector.c"
- "${AVC_ROOT}/encoder/x86/ih264e_function_selector_sse42.c"
- "${AVC_ROOT}/encoder/x86/ih264e_function_selector_ssse3.c"
- "${AVC_ROOT}/encoder/x86/ih264e_half_pel_ssse3.c"
- "${AVC_ROOT}/encoder/x86/ih264e_intra_modes_eval_ssse3.c"
- "${AVC_ROOT}/encoder/x86/ime_distortion_metrics_sse42.c")
-
- include_directories(${AVC_ROOT}/encoder/x86)
-endif()
-
-add_library(libavcenc STATIC ${LIBAVC_COMMON_SRCS} ${LIBAVC_COMMON_ASMS}
- ${LIBAVCENC_SRCS} ${LIBAVCENC_ASMS})
-
-target_compile_definitions(libavcenc PRIVATE N_MB_ENABLE)
diff --git a/fuzzer/README.md b/fuzzer/README.md
index f848629..8e29ec6 100644
--- a/fuzzer/README.md
+++ b/fuzzer/README.md
@@ -1,11 +1,11 @@
-# Fuzzer for libavc decoder and encoder
+# Fuzzer for libavc decoder
-This describes steps to build avc_dec_fuzzer and avc_enc_fuzzer.
+This describes steps to build avc_dec_fuzzer binary.
## Linux x86/x64
### Requirements
-- cmake (3.9.1 or above)
+- cmake (3.5 or above)
- make
- clang (6.0 or above)
needs to support -fsanitize=fuzzer, -fsanitize=fuzzer-no-link
@@ -21,62 +21,51 @@ Create a directory inside libavc and change directory
$ mkdir build
$ cd build
```
-Build fuzzer with required sanitizers (-DSANITIZE=fuzzer-no-link is mandatory
- to enable fuzzers)
+Build libavc using cmake
```
- $ cmake .. -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
- -DCMAKE_BUILD_TYPE=Debug -DSANITIZE=fuzzer-no-link,address
+ $ CC=clang CXX=clang++ cmake ../ \
+ -DSANITIZE=fuzzer-no-link,address,signed-integer-overflow
$ make
```
+Build the fuzzer
+```
+ $ clang++ -std=c++11 -fsanitize=fuzzer,address -I. -I../ -I../common \
+ -I../decoder -Wl,--start-group ../fuzzer/avc_dec_fuzzer.cpp \
+ -o ./avc_dec_fuzzer ./libavcdec.a -Wl,--end-group
+```
### Steps to run
-Create a directory CORPUS_DIR and copy some elementary h264 files
-(for avc_dec_fuzzer) or yuv files (for avc_enc_fuzzer) to that directory
-
-To run the fuzzers
+Create a directory CORPUS_DIR and copy some elementary h264 files to that folder
+To run the fuzzer
```
$ ./avc_dec_fuzzer CORPUS_DIR
-$ ./avc_enc_fuzzer CORPUS_DIR
```
## Android
### Steps to build
-Build the fuzzers
+Build the fuzzer
```
- $ mm -j$(nproc) avc_dec_fuzzer
- $ mm -j$(nproc) avc_enc_fuzzer
+ $ SANITIZE_TARGET=address SANITIZE_HOST=address mmma -j$(nproc) \
+ external/libavc/fuzzer
```
### Steps to run
-Create a directory CORPUS_DIR and copy some elementary h264 files
-(for avc_dec_fuzzer) or yuv files (for avc_enc_fuzzer) to that folder
-Push this directory to device
+Create a directory CORPUS_DIR and copy some elementary h264 files to that folder
+Push this directory to device.
-To run avc_dec_fuzzer on device
-```
- $ adb sync data
- $ adb shell /data/fuzz/arm64/avc_dec_fuzzer/avc_dec_fuzzer CORPUS_DIR
-```
-To run avc_enc_fuzzer on device
+To run on device
```
$ adb sync data
- $ adb shell /data/fuzz/arm64/avc_enc_fuzzer/avc_enc_fuzzer CORPUS_DIR
+ $ adb shell /data/fuzz/avc_dec_fuzzer CORPUS_DIR
```
-
-To run avc_dec_fuzzer on host
+To run on host
```
- $ $ANDROID_HOST_OUT/fuzz/x86_64/avc_dec_fuzzer/avc_dec_fuzzer CORPUS_DIR
-```
-
-To run avc_enc_fuzzer on host
-```
- $ $ANDROID_HOST_OUT/fuzz/x86_64/avc_enc_fuzzer/avc_enc_fuzzer CORPUS_DIR
+ $ $ANDROID_HOST_OUT/fuzz/avc_dec_fuzzer CORPUS_DIR
```
-# Appendix
-## libavc encoder fuzzer
+# Fuzzer for libavc encoder
## Plugin Design Considerations
The fuzzer plugin for AVC is designed based on the understanding of the
@@ -181,6 +170,31 @@ 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 avc_enc_fuzzer binary.
+
+### Android
+
+#### Steps to build
+Build the fuzzer
+```
+ $ mm -j$(nproc) avc_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/avc_enc_fuzzer/avc_enc_fuzzer CORPUS_DIR
+```
+To run on host
+```
+ $ $ANDROID_HOST_OUT/fuzz/x86_64/avc_enc_fuzzer/avc_enc_fuzzer CORPUS_DIR
+```
## References:
* http://llvm.org/docs/LibFuzzer.html
diff --git a/fuzzer/avc_dec_fuzzer.cmake b/fuzzer/avc_dec_fuzzer.cmake
deleted file mode 100644
index c20aaed..0000000
--- a/fuzzer/avc_dec_fuzzer.cmake
+++ /dev/null
@@ -1,2 +0,0 @@
-libavc_add_fuzzer(avc_dec_fuzzer libavcdec SOURCES
- ${AVC_ROOT}/fuzzer/avc_dec_fuzzer.cpp)
diff --git a/fuzzer/avc_enc_fuzzer.cmake b/fuzzer/avc_enc_fuzzer.cmake
deleted file mode 100644
index d6cb551..0000000
--- a/fuzzer/avc_enc_fuzzer.cmake
+++ /dev/null
@@ -1,2 +0,0 @@
-libavc_add_fuzzer(avc_enc_fuzzer libavcenc SOURCES
- ${AVC_ROOT}/fuzzer/avc_enc_fuzzer.cpp)
diff --git a/fuzzer/avc_enc_fuzzer.cpp b/fuzzer/avc_enc_fuzzer.cpp
index ce36756..426eedb 100644
--- a/fuzzer/avc_enc_fuzzer.cpp
+++ b/fuzzer/avc_enc_fuzzer.cpp
@@ -19,7 +19,6 @@
*/
#include <malloc.h>
#include <algorithm>
-#include <string.h>
#include <vector>
#include "ih264_defs.h"
diff --git a/fuzzer/ossfuzz.sh b/fuzzer/ossfuzz.sh
index b1328ab..e5bed08 100755
--- a/fuzzer/ossfuzz.sh
+++ b/fuzzer/ossfuzz.sh
@@ -22,12 +22,23 @@ test "${OUT}" != "" || exit 1
build_dir=$WORK/build
rm -rf ${build_dir}
mkdir -p ${build_dir}
-
pushd ${build_dir}
-cmake ${SRC}/libavc
-make -j$(nproc) avc_dec_fuzzer
-cp ${build_dir}/avc_dec_fuzzer $OUT/avc_dec_fuzzer
+
+cmake $SRC/libavc
+make -j$(nproc)
popd
+# build fuzzers
+$CXX $CXXFLAGS -std=c++11 \
+ -I$SRC/libavc \
+ -I$SRC/libavc/common \
+ -I$SRC/libavc/decoder \
+ -I${build_dir} \
+ -Wl,--start-group \
+ $LIB_FUZZING_ENGINE \
+ $SRC/libavc/fuzzer/avc_dec_fuzzer.cpp -o $OUT/avc_dec_fuzzer \
+ ${build_dir}/libavcdec.a \
+ -Wl,--end-group
+
cp $SRC/avc_dec_fuzzer_seed_corpus.zip $OUT/avc_dec_fuzzer_seed_corpus.zip
cp $SRC/libavc/fuzzer/avc_dec_fuzzer.dict $OUT/avcdec_fuzzer.dict
diff --git a/test/decoder/avcdec.cmake b/test/decoder/avcdec.cmake
deleted file mode 100644
index e626611..0000000
--- a/test/decoder/avcdec.cmake
+++ /dev/null
@@ -1 +0,0 @@
-libavc_add_executable(avcdec libavcdec SOURCES ${AVC_ROOT}/test/decoder/main.c)
diff --git a/test/encoder/avcenc.cmake b/test/encoder/avcenc.cmake
deleted file mode 100644
index 99f93db..0000000
--- a/test/encoder/avcenc.cmake
+++ /dev/null
@@ -1,10 +0,0 @@
-list(
- APPEND
- AVCENC_SRCS
- "${AVC_ROOT}/test/encoder/input.c"
- "${AVC_ROOT}/test/encoder/main.c"
- "${AVC_ROOT}/test/encoder/output.c"
- "${AVC_ROOT}/test/encoder/psnr.c"
- "${AVC_ROOT}/test/encoder/recon.c")
-
-libavc_add_executable(avcenc libavcenc SOURCES ${AVCENC_SRCS})