diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2020-04-28 20:27:03 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2020-04-28 20:27:03 +0000 |
commit | 0d6c06413db1f35c49f00faa11b1ed89cf08ca70 (patch) | |
tree | 236c2f850d073ecb85f53854c9c64e2a87c3a9f6 | |
parent | 0cc914e289be0425a584a8857d2750cb1d6f09f5 (diff) | |
parent | 58e84e0afffdb22619ab5b5460cfa4a66b0b177d (diff) | |
download | libxaac-android12-mainline-tzdata-release.tar.gz |
Snap for 6439596 from 58e84e0afffdb22619ab5b5460cfa4a66b0b177d to qt-aml-tzdata-releaseq_tzdata_aml_297100400q_tzdata_aml_297100300q_tzdata_aml_297100000q_tzdata_aml_296200000q_tzdata_aml_295600118q_tzdata_aml_295600110q_tzdata_aml_295500002q_tzdata_aml_295500001q_tzdata_aml_294400310android-mainline-12.0.0_r54android-mainline-12.0.0_r111android-mainline-10.0.0_r13android-mainline-10.0.0_r12android-mainline-10.0.0_r11q_tzdata_aml_297100000android12-mainline-tzdata-releaseandroid10-mainline-tzdata-releaseandroid10-android13-mainline-tzdata-release
Change-Id: I1b2b25c99a1f530351a19f042eb0c1f82073af4d
-rw-r--r-- | Android.bp | 5 | ||||
-rw-r--r-- | CMakeLists.txt | 171 | ||||
-rw-r--r-- | fuzzer/Android.bp | 11 | ||||
-rw-r--r-- | fuzzer/README.md | 70 | ||||
-rwxr-xr-x | fuzzer/ossfuzz.sh | 43 | ||||
-rw-r--r-- | fuzzer/xaac_dec_fuzzer.cpp | 874 | ||||
-rw-r--r-- | fuzzer/xaac_dec_fuzzer.dict | 2 | ||||
-rw-r--r-- | test/Android.bp | 1 |
8 files changed, 4 insertions, 1173 deletions
@@ -2,7 +2,10 @@ cc_library_static { name: "libxaacdec", vendor_available: true, - host_supported:true, + vndk: { + enabled: true, + }, + cflags: [ "-O3" ], diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index 1a17b34..0000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,171 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -set(XAAC_ROOT "${CMAKE_CURRENT_SOURCE_DIR}") -set(XAAC_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}") - -if("${XAAC_ROOT}" STREQUAL "${XAAC_CONFIG_DIR}") - message( - FATAL_ERROR - "Building from within the libxaac source tree is not supported.\n" - "Hint: Run these commands\n" - "$ rm -rf CMakeCache.txt CMakeFiles\n" - "$ mkdir -p ./build\n" - "$ cd ./build\n" - "And re-run CMake from the build directory.") -endif() - -set(CMAKE_STATIC_LIBRARY_PREFIX "") - -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() - -list( - APPEND - LIBXAACDEC_SRCS - "${XAAC_ROOT}/decoder/ixheaacd_aacdecoder.c" - "${XAAC_ROOT}/decoder/ixheaacd_aacpluscheck.c" - "${XAAC_ROOT}/decoder/ixheaacd_aac_imdct.c" - "${XAAC_ROOT}/decoder/ixheaacd_aac_rom.c" - "${XAAC_ROOT}/decoder/ixheaacd_aac_tns.c" - "${XAAC_ROOT}/decoder/ixheaacd_acelp_bitparse.c" - "${XAAC_ROOT}/decoder/ixheaacd_acelp_decode.c" - "${XAAC_ROOT}/decoder/ixheaacd_acelp_mdct.c" - "${XAAC_ROOT}/decoder/ixheaacd_acelp_tools.c" - "${XAAC_ROOT}/decoder/ixheaacd_adts_crc_check.c" - "${XAAC_ROOT}/decoder/ixheaacd_api.c" - "${XAAC_ROOT}/decoder/ixheaacd_arith_dec.c" - "${XAAC_ROOT}/decoder/ixheaacd_avq_dec.c" - "${XAAC_ROOT}/decoder/ixheaacd_avq_rom.c" - "${XAAC_ROOT}/decoder/ixheaacd_basic_ops.c" - "${XAAC_ROOT}/decoder/ixheaacd_bitbuffer.c" - "${XAAC_ROOT}/decoder/ixheaacd_block.c" - "${XAAC_ROOT}/decoder/ixheaacd_channel.c" - "${XAAC_ROOT}/decoder/ixheaacd_common_initfuncs.c" - "${XAAC_ROOT}/decoder/ixheaacd_common_lpfuncs.c" - "${XAAC_ROOT}/decoder/ixheaacd_common_rom.c" - "${XAAC_ROOT}/decoder/ixheaacd_create.c" - "${XAAC_ROOT}/decoder/ixheaacd_decode_main.c" - "${XAAC_ROOT}/decoder/ixheaacd_dsp_fft32x32s.c" - "${XAAC_ROOT}/decoder/ixheaacd_env_calc.c" - "${XAAC_ROOT}/decoder/ixheaacd_env_dec.c" - "${XAAC_ROOT}/decoder/ixheaacd_env_extr.c" - "${XAAC_ROOT}/decoder/ixheaacd_esbr_envcal.c" - "${XAAC_ROOT}/decoder/ixheaacd_esbr_polyphase.c" - "${XAAC_ROOT}/decoder/ixheaacd_esbr_rom.c" - "${XAAC_ROOT}/decoder/ixheaacd_esbr_fft.c" - "${XAAC_ROOT}/decoder/ixheaacd_ext_ch_ele.c" - "${XAAC_ROOT}/decoder/ixheaacd_fft.c" - "${XAAC_ROOT}/decoder/ixheaacd_freq_sca.c" - "${XAAC_ROOT}/decoder/ixheaacd_fwd_alias_cnx.c" - "${XAAC_ROOT}/decoder/ixheaacd_hbe_trans.c" - "${XAAC_ROOT}/decoder/ixheaacd_headerdecode.c" - "${XAAC_ROOT}/decoder/ixheaacd_hufftables.c" - "${XAAC_ROOT}/decoder/ixheaacd_huff_tools.c" - "${XAAC_ROOT}/decoder/ixheaacd_hybrid.c" - "${XAAC_ROOT}/decoder/ixheaacd_imdct.c" - "${XAAC_ROOT}/decoder/ixheaacd_initfuncs.c" - "${XAAC_ROOT}/decoder/ixheaacd_init_config.c" - "${XAAC_ROOT}/decoder/ixheaacd_longblock.c" - "${XAAC_ROOT}/decoder/ixheaacd_lpc.c" - "${XAAC_ROOT}/decoder/ixheaacd_lpc_dec.c" - "${XAAC_ROOT}/decoder/ixheaacd_lpfuncs.c" - "${XAAC_ROOT}/decoder/ixheaacd_lpp_tran.c" - "${XAAC_ROOT}/decoder/ixheaacd_lt_predict.c" - "${XAAC_ROOT}/decoder/ixheaacd_mps_dec.c" - "${XAAC_ROOT}/decoder/ixheaacd_mps_decorr.c" - "${XAAC_ROOT}/decoder/ixheaacd_mps_hybrid_filt.c" - "${XAAC_ROOT}/decoder/ixheaacd_mps_parse.c" - "${XAAC_ROOT}/decoder/ixheaacd_mps_pre_mix.c" - "${XAAC_ROOT}/decoder/ixheaacd_mps_rom.c" - "${XAAC_ROOT}/decoder/ixheaacd_mps_smoothing.c" - "${XAAC_ROOT}/decoder/ixheaacd_mps_temp_process.c" - "${XAAC_ROOT}/decoder/ixheaacd_mps_temp_reshape.c" - "${XAAC_ROOT}/decoder/ixheaacd_pns_js_thumb.c" - "${XAAC_ROOT}/decoder/ixheaacd_pred_vec_block.c" - "${XAAC_ROOT}/decoder/ixheaacd_process.c" - "${XAAC_ROOT}/decoder/ixheaacd_ps_bitdec.c" - "${XAAC_ROOT}/decoder/ixheaacd_ps_dec.c" - "${XAAC_ROOT}/decoder/ixheaacd_pvc_rom.c" - "${XAAC_ROOT}/decoder/ixheaacd_rom.c" - "${XAAC_ROOT}/decoder/ixheaacd_sbrdecoder.c" - "${XAAC_ROOT}/decoder/ixheaacd_sbrdec_initfuncs.c" - "${XAAC_ROOT}/decoder/ixheaacd_sbrdec_lpfuncs.c" - "${XAAC_ROOT}/decoder/ixheaacd_sbr_crc.c" - "${XAAC_ROOT}/decoder/ixheaacd_sbr_dec.c" - "${XAAC_ROOT}/decoder/ixheaacd_sbr_rom.c" - "${XAAC_ROOT}/decoder/ixheaacd_spectrum_dec.c" - "${XAAC_ROOT}/decoder/ixheaacd_stereo.c" - "${XAAC_ROOT}/decoder/ixheaacd_tcx_fwd_alcnx.c" - "${XAAC_ROOT}/decoder/ixheaacd_tcx_fwd_mdct.c" - "${XAAC_ROOT}/decoder/ixheaacd_thumb_ps_dec.c" - "${XAAC_ROOT}/decoder/ixheaacd_tns.c" - "${XAAC_ROOT}/decoder/ixheaacd_basic_funcs.c" - "${XAAC_ROOT}/decoder/ixheaacd_Windowing.c" - "${XAAC_ROOT}/decoder/ixheaacd_latmdemux.c" - "${XAAC_ROOT}/decoder/ixheaacd_multichannel.c" - "${XAAC_ROOT}/decoder/ixheaacd_drc_freq_dec.c" - "${XAAC_ROOT}/decoder/ixheaacd_mps_poly_filt.c" - "${XAAC_ROOT}/decoder/ixheaacd_huff_code_reorder.c" - "${XAAC_ROOT}/decoder/ixheaacd_rev_vlc.c" - "${XAAC_ROOT}/decoder/ixheaacd_qmf_dec.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_api.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_bitbuffer.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_dec.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_dynamic_payload.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_eq.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_extr_delta_coded_info.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_filter_bank.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_gain_dec.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_gain_decoder.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_host_params.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_init.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_interface_decoder.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_interface_parser.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_loudness_control.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_main_qmf_process.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_main_stft_process.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_main_td_process.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_main_td_qmf_process.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_multiband.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_parametric_dec.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_peak_limiter.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_process.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_rom.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_selection_process.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_selection_process_drcset_selection.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_selection_process_init.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_shape_filter.c" - "${XAAC_ROOT}/decoder/drc_src/impd_drc_static_payload.c") - -list(APPEND LIBXAACDEC_X86_SRCS - "${XAAC_ROOT}/decoder/generic/ixheaacd_qmf_dec_generic.c" - "${XAAC_ROOT}/decoder/x86/ixheaacd_function_selector_x86.c") - -set(LIBXAACDEC_INCLUDES ${XAAC_ROOT}/decoder ${XAAC_ROOT}/decoder/drc_src) - -set(LIBXAACDEC_C_FLAGS "${LIBXAACDEC_X86_C_FLAGS}") - -include_directories(${LIBXAACDEC_INCLUDES} ${LIBXAACDEC_X86_INCLUDES}) -add_library(libxaacdec ${LIBXAACDEC_SRCS} ${LIBXAACDEC_X86_SRCS}) -set_target_properties(libxaacdec - PROPERTIES COMPILE_FLAGS "${LIBXAACDEC_C_FLAGS}") - -list(APPEND XAACDEC_SRCS - "${XAAC_ROOT}/test/ixheaacd_error.c" - "${XAAC_ROOT}/test/ixheaacd_fileifc.c" - "${XAAC_ROOT}/test/ixheaacd_main.c" - "${XAAC_ROOT}/test/ixheaacd_metadata_read.c") - -add_executable(xaacdec ${XAACDEC_SRCS}) - -target_link_libraries(xaacdec libxaacdec m) -set_target_properties( - xaacdec - PROPERTIES - COMPILE_FLAGS - "-UARM_PROFILE_HW -UARM_PROFILE_BOARD -DECLIPSE -DDRC_ENABLE -DMULTICHANNEL_ENABLE -DENABLE_DRC" - ) diff --git a/fuzzer/Android.bp b/fuzzer/Android.bp deleted file mode 100644 index d2c08fe..0000000 --- a/fuzzer/Android.bp +++ /dev/null @@ -1,11 +0,0 @@ -cc_fuzz { - name: "xaac_dec_fuzzer", - host_supported: true, - srcs: [ - "xaac_dec_fuzzer.cpp", - ], - static_libs: [ - "libxaacdec", - "liblog", - ], -} diff --git a/fuzzer/README.md b/fuzzer/README.md deleted file mode 100644 index efa9907..0000000 --- a/fuzzer/README.md +++ /dev/null @@ -1,70 +0,0 @@ -# Fuzzer for libxaac decoder - -This describes steps to build xaac_dec_fuzzer binary. - -## Linux x86/x64 - -### Requirements -- cmake (3.5 or above) -- make -- clang (6.0 or above) - needs to support -fsanitize=fuzzer, -fsanitize=fuzzer-no-link - -### Steps to build -Clone libxaac repository -``` -$ git clone https://android.googlesource.com/platform/external/libxaac -``` -Create a directory inside libxaac and change directory -``` - $ cd libxaac - $ mkdir build - $ cd build -``` -Build libxaac using cmake -``` - $ 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 -I../decoder/drc_src -Wl,--start-group \ - ../fuzzer/xaac_dec_fuzzer.cpp -o ./xaac_dec_fuzzer ./libxaacdec.a \ - -Wl,--end-group -``` - -### Steps to run -Create a directory CORPUS_DIR and copy some elementary aac files to that folder -To run the fuzzer -``` -$ ./xaac_dec_fuzzer CORPUS_DIR -``` - -## Android - -### Steps to build -Build the fuzzer -``` - $ SANITIZE_TARGET=address SANITIZE_HOST=address mmma -j$(nproc) \ - external/libxaac/fuzzer -``` - -### Steps to run -Create a directory CORPUS_DIR and copy some elementary aac files to that folder -Push this directory to device. - -To run on device -``` - $ adb sync data - $ adb shell /data/fuzz/xaac_dec_fuzzer CORPUS_DIR -``` -To run on host -``` - $ $ANDROID_HOST_OUT/fuzz/xaac_dec_fuzzer CORPUS_DIR -``` - -## References: - * http://llvm.org/docs/LibFuzzer.html - * https://github.com/google/oss-fuzz diff --git a/fuzzer/ossfuzz.sh b/fuzzer/ossfuzz.sh deleted file mode 100755 index aac1654..0000000 --- a/fuzzer/ossfuzz.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash -eu -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -################################################################################ -# Ensure SRC and WORK are set -test "${SRC}" != "" || exit 1 -test "${WORK}" != "" || exit 1 - -# Build libxaac -build_dir=$WORK/build -rm -rf ${build_dir} -mkdir -p ${build_dir} -pushd ${build_dir} - -cmake $SRC/libxaac -make -j$(nproc) -popd - -# build fuzzers -$CXX $CXXFLAGS -std=c++11 \ - -I$SRC/libxaac \ - -I$SRC/libxaac/common \ - -I$SRC/libxaac/decoder \ - -I$SRC/libxaac/decoder/drc_src \ - -I${build_dir} \ - -Wl,--start-group \ - $LIB_FUZZING_ENGINE \ - $SRC/libxaac/fuzzer/xaac_dec_fuzzer.cpp -o $OUT/xaac_dec_fuzzer \ - ${build_dir}/libxaacdec.a \ - -Wl,--end-group - -cp $SRC/libxaac/fuzzer/xaac_dec_fuzzer.dict $OUT/xaacdec_fuzzer.dict diff --git a/fuzzer/xaac_dec_fuzzer.cpp b/fuzzer/xaac_dec_fuzzer.cpp deleted file mode 100644 index 6ec2ab1..0000000 --- a/fuzzer/xaac_dec_fuzzer.cpp +++ /dev/null @@ -1,874 +0,0 @@ -/****************************************************************************** - * - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ***************************************************************************** - * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore - */ - -#include <stddef.h> -#include <stdint.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include <vector> - -#include "ixheaacd_type_def.h" -#include "ixheaacd_error_standards.h" -#include "ixheaacd_error_handler.h" -#include "ixheaacd_apicmd_standards.h" -#include "ixheaacd_memory_standards.h" -#include "ixheaacd_aac_config.h" - -#include "impd_apicmd_standards.h" -#include "impd_drc_config_params.h" - -/* 64*-0.25dB = -16 dB below full scale for mobile conf */ -#define DRC_DEFAULT_MOBILE_REF_LEVEL 64 -/* maximum compression of dynamic range for mobile conf */ -#define DRC_DEFAULT_MOBILE_DRC_CUT 127 -/* maximum compression of dynamic range for mobile conf */ -#define DRC_DEFAULT_MOBILE_DRC_BOOST 127 -/* switch for heavy compression for mobile conf */ -#define DRC_DEFAULT_MOBILE_DRC_HEAVY 1 -/* encoder target level; -1 => the value is unknown, otherwise dB \ - step value (e.g. 64 for -16 dB) */ -#define DRC_DEFAULT_MOBILE_ENC_LEVEL (-1) - -#define MAX_CHANNEL_COUNT 8 - -#define MAX_MEM_ALLOCS 100 - -class Codec { - public: - IA_ERRORCODE initDecoder(const uint8_t* data, size_t size, bool isADTS); - IA_ERRORCODE initXAACDecoder(bool isADTS); - IA_ERRORCODE initXAACDrc(const uint8_t* data, size_t size); - IA_ERRORCODE deInitXAACDecoder(); - IA_ERRORCODE deInitMPEGDDDrc(); - IA_ERRORCODE configXAACDecoder(uint8_t* inBuffer, uint32_t inBufferLength, - int32_t* bytesConsumed); - IA_ERRORCODE initMPEGDDDrc(); - int configMPEGDDrc(); - IA_ERRORCODE decodeXAACStream(uint8_t* inBuffer, uint32_t inBufferLength, - int32_t* bytesConsumed, int32_t* outBytes); - IA_ERRORCODE getXAACStreamInfo(); - IA_ERRORCODE setXAACDRCInfo(int32_t drcCut, int32_t drcBoost, - int32_t drcRefLevel, int32_t drcHeavyCompression, - int32_t drEffectType); - - private: - void* mXheaacCodecHandle; - void* mMpegDDrcHandle; - uint32_t mInputBufferSize; - uint32_t mOutputFrameLength; - int8_t* mInputBuffer; - int8_t* mOutputBuffer; - int32_t mSampFreq; - int32_t mNumChannels; - int32_t mPcmWdSz; - int32_t mChannelMask; - bool mIsCodecInitialized; - bool mIsCodecConfigFlushRequired; - int8_t* mDrcInBuf; - int8_t* mDrcOutBuf; - int32_t mMpegDDRCPresent; - int32_t mDRCFlag; - - std::vector<void*> mMemoryVec; - std::vector<void*> mDrcMemoryVec; -}; - -extern "C" IA_ERRORCODE ixheaacd_dec_api(pVOID p_ia_module_obj, WORD32 i_cmd, - WORD32 i_idx, pVOID pv_value); -extern "C" IA_ERRORCODE ia_drc_dec_api(pVOID p_ia_module_obj, WORD32 i_cmd, - WORD32 i_idx, pVOID pv_value); -extern "C" IA_ERRORCODE ixheaacd_get_config_param(pVOID p_ia_process_api_obj, - pWORD32 pi_samp_freq, - pWORD32 pi_num_chan, - pWORD32 pi_pcm_wd_sz, - pWORD32 pi_channel_mask); - -IA_ERRORCODE Codec::initXAACDecoder(bool isADTS) { - /* First part */ - /* Error Handler Init */ - /* Get Library Name, Library Version and API Version */ - /* Initialize API structure + Default config set */ - /* Set config params from user */ - /* Initialize memory tables */ - /* Get memory information and allocate memory */ - - mInputBufferSize = 0; - mInputBuffer = nullptr; - mOutputBuffer = nullptr; - /* Process struct initing end */ - - /* ******************************************************************/ - /* Initialize API structure and set config params to default */ - /* ******************************************************************/ - /* API size */ - uint32_t pui_api_size; - /* Get the API size */ - IA_ERRORCODE err_code = - ixheaacd_dec_api(nullptr, IA_API_CMD_GET_API_SIZE, 0, &pui_api_size); - - /* Allocate memory for API */ - mXheaacCodecHandle = malloc(pui_api_size); - if (!mXheaacCodecHandle) { - return IA_FATAL_ERROR; - } - mMemoryVec.push_back(mXheaacCodecHandle); - - /* Set the config params to default values */ - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_INIT, - IA_CMD_TYPE_INIT_API_PRE_CONFIG_PARAMS, nullptr); - - /* Get the API size */ - err_code = ia_drc_dec_api(nullptr, IA_API_CMD_GET_API_SIZE, 0, &pui_api_size); - - /* Allocate memory for API */ - mMpegDDrcHandle = malloc(pui_api_size); - if (!mMpegDDrcHandle) { - return IA_FATAL_ERROR; - } - mMemoryVec.push_back(mMpegDDrcHandle); - - /* Set the config params to default values */ - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_INIT, - IA_CMD_TYPE_INIT_API_PRE_CONFIG_PARAMS, nullptr); - - /* ******************************************************************/ - /* Set config parameters */ - /* ******************************************************************/ - uint32_t ui_mp4_flag = isADTS ? 0 : 1; - err_code = - ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_ISMP4, &ui_mp4_flag); - - /* ******************************************************************/ - /* Initialize Memory info tables */ - /* ******************************************************************/ - uint32_t ui_proc_mem_tabs_size; - pVOID pv_alloc_ptr; - /* Get memory info tables size */ - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_MEMTABS_SIZE, - 0, &ui_proc_mem_tabs_size); - - pv_alloc_ptr = malloc(ui_proc_mem_tabs_size); - if (!pv_alloc_ptr) { - return IA_FATAL_ERROR; - } - mMemoryVec.push_back(pv_alloc_ptr); - - /* Set pointer for process memory tables */ - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_SET_MEMTABS_PTR, 0, - pv_alloc_ptr); - - /* initialize the API, post config, fill memory tables */ - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_INIT, - IA_CMD_TYPE_INIT_API_POST_CONFIG_PARAMS, nullptr); - - /* ******************************************************************/ - /* Allocate Memory with info from library */ - /* ******************************************************************/ - /* There are four different types of memories, that needs to be allocated */ - /* persistent,scratch,input and output */ - for (int i = 0; i < 4; i++) { - int ui_size = 0, ui_alignment = 0, ui_type = 0; - - /* Get memory size */ - err_code = ixheaacd_dec_api(mXheaacCodecHandle, - IA_API_CMD_GET_MEM_INFO_SIZE, i, &ui_size); - - /* Get memory alignment */ - err_code = - ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_MEM_INFO_ALIGNMENT, - i, &ui_alignment); - - /* Get memory type */ - err_code = ixheaacd_dec_api(mXheaacCodecHandle, - IA_API_CMD_GET_MEM_INFO_TYPE, i, &ui_type); - - pv_alloc_ptr = NULL; - ui_alignment = (ui_alignment + sizeof(void *) - 1) / sizeof(void *); - ui_alignment = ui_alignment * sizeof(void *); - if (0 != posix_memalign(&pv_alloc_ptr, ui_alignment, ui_size)) { - return IA_FATAL_ERROR; - } - if (!pv_alloc_ptr) { - return IA_FATAL_ERROR; - } - mMemoryVec.push_back(pv_alloc_ptr); - - /* Set the buffer pointer */ - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_SET_MEM_PTR, i, - pv_alloc_ptr); - - if (ui_type == IA_MEMTYPE_INPUT) { - mInputBuffer = (pWORD8)pv_alloc_ptr; - mInputBufferSize = ui_size; - } - if (ui_type == IA_MEMTYPE_OUTPUT) mOutputBuffer = (pWORD8)pv_alloc_ptr; - } - /* End first part */ - - return IA_NO_ERROR; -} -enum { - DRC_TARGET_LEVEL_OFFSET = 6, - DRC_ATTENUATION_OFFSET, - DRC_BOOST_OFFSET, - DRC_COMPRESS_OFFSET, - DRC_EFFECT_OFFSET -}; - -IA_ERRORCODE Codec::initXAACDrc(const uint8_t* data, size_t size) { - IA_ERRORCODE err_code = IA_NO_ERROR; - unsigned int ui_drc_val; - // DRC_PRES_MODE_WRAP_DESIRED_TARGET - size_t targetLevelOffset = - std::min((size_t)DRC_TARGET_LEVEL_OFFSET, size - 1); - int32_t targetRefLevel = data[targetLevelOffset]; - - ui_drc_val = (unsigned int)targetRefLevel; - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_TARGET_LEVEL, - &ui_drc_val); - - /* Use ui_drc_val from PROP_DRC_OVERRIDE_REF_LEVEL or - * DRC_DEFAULT_MOBILE_REF_LEVEL - * for IA_ENHAACPLUS_DEC_DRC_TARGET_LOUDNESS too */ - err_code = - ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_DRC_TARGET_LOUDNESS, &ui_drc_val); - - size_t attenuationOffset = std::min((size_t)DRC_ATTENUATION_OFFSET, size - 1); - int32_t attenuationFactor = data[attenuationOffset]; - - ui_drc_val = (unsigned int)attenuationFactor; - err_code = - ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_CUT, &ui_drc_val); - - // DRC_PRES_MODE_WRAP_DESIRED_BOOST_FACTOR - size_t boostOffset = std::min((size_t)DRC_BOOST_OFFSET, size - 1); - int32_t boostFactor = data[boostOffset]; - - ui_drc_val = (unsigned int)boostFactor; - err_code = - ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_BOOST, &ui_drc_val); - - // DRC_PRES_MODE_WRAP_DESIRED_HEAVY - size_t compressOffset = std::min((size_t)DRC_COMPRESS_OFFSET, size - 1); - int32_t compressMode = data[compressOffset]; - ui_drc_val = (unsigned int)compressMode; - - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_HEAVY_COMP, - &ui_drc_val); - - // AAC_UNIDRC_SET_EFFECT - size_t effectOffset = std::min((size_t)DRC_EFFECT_OFFSET, size - 1); - int32_t effectType = data[effectOffset]; - ui_drc_val = (unsigned int)effectType; - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_DRC_EFFECT_TYPE, &ui_drc_val); - - return IA_NO_ERROR; -} - -IA_ERRORCODE Codec::deInitXAACDecoder() { - /* Error code */ - IA_ERRORCODE err_code = IA_NO_ERROR; - - if (mXheaacCodecHandle) { - /* Tell that the input is over in this buffer */ - err_code = - ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_INPUT_OVER, 0, nullptr); - } - - /* Irrespective of error returned in IA_API_CMD_INPUT_OVER, free allocated - * memory */ - for (void* buf : mMemoryVec) { - if (buf) free(buf); - } - mMemoryVec.clear(); - mXheaacCodecHandle = nullptr; - - return err_code; -} - -IA_ERRORCODE Codec::deInitMPEGDDDrc() { - for (void* buf : mDrcMemoryVec) { - if (buf) free(buf); - } - mDrcMemoryVec.clear(); - return IA_NO_ERROR; -} - -IA_ERRORCODE Codec::configXAACDecoder(uint8_t* inBuffer, - uint32_t inBufferLength, - int32_t* bytesConsumed) { - if (mInputBufferSize < inBufferLength) { - inBufferLength = mInputBufferSize; - } - /* Copy the buffer passed by Android plugin to codec input buffer */ - memcpy(mInputBuffer, inBuffer, inBufferLength); - - /* Set number of bytes to be processed */ - IA_ERRORCODE err_code = ixheaacd_dec_api( - mXheaacCodecHandle, IA_API_CMD_SET_INPUT_BYTES, 0, &inBufferLength); - - if (mIsCodecConfigFlushRequired) { - /* If codec is already initialized, then GA header is passed again */ - /* Need to call the Flush API instead of INIT_PROCESS */ - mIsCodecInitialized = - false; /* Codec needs to be Reinitialized after flush */ - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_INIT, - IA_CMD_TYPE_GA_HDR, nullptr); - - } else { - /* Initialize the process */ - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_INIT, - IA_CMD_TYPE_INIT_PROCESS, nullptr); - } - - uint32_t ui_init_done; - /* Checking for end of initialization */ - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_INIT, - IA_CMD_TYPE_INIT_DONE_QUERY, &ui_init_done); - - /* How much buffer is used in input buffers */ - err_code = ixheaacd_dec_api( - mXheaacCodecHandle, IA_API_CMD_GET_CURIDX_INPUT_BUF, 0, bytesConsumed); - - if (ui_init_done) { - err_code = getXAACStreamInfo(); - - mIsCodecInitialized = true; - - err_code = configMPEGDDrc(); - } - - return IA_NO_ERROR; -} -IA_ERRORCODE Codec::initMPEGDDDrc() { - IA_ERRORCODE err_code = IA_NO_ERROR; - - for (int i = 0; i < (WORD32)2; i++) { - WORD32 ui_size, ui_alignment, ui_type; - pVOID pv_alloc_ptr; - - /* Get memory size */ - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_GET_MEM_INFO_SIZE, i, - &ui_size); - - /* Get memory alignment */ - err_code = ia_drc_dec_api( - mMpegDDrcHandle, IA_API_CMD_GET_MEM_INFO_ALIGNMENT, i, &ui_alignment); - - /* Get memory type */ - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_GET_MEM_INFO_TYPE, i, - &ui_type); - - pv_alloc_ptr = malloc(ui_size); - if (pv_alloc_ptr == nullptr) { - return IA_FATAL_ERROR; - } - mDrcMemoryVec.push_back(pv_alloc_ptr); - - /* Set the buffer pointer */ - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_MEM_PTR, i, - pv_alloc_ptr); - } - - WORD32 ui_size; - ui_size = 8192 * 2; - - mDrcInBuf = (int8_t*)malloc(ui_size); - if (mDrcInBuf == nullptr) { - return IA_FATAL_ERROR; - } - mDrcMemoryVec.push_back(mDrcInBuf); - - err_code = - ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_MEM_PTR, 2, mDrcInBuf); - - mDrcOutBuf = (int8_t*)malloc(ui_size); - if (mDrcOutBuf == nullptr) { - return IA_FATAL_ERROR; - } - mDrcMemoryVec.push_back(mDrcOutBuf); - - err_code = - ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_MEM_PTR, 3, mDrcOutBuf); - - return IA_NO_ERROR; -} -int Codec::configMPEGDDrc() { - IA_ERRORCODE err_code = IA_NO_ERROR; - int i_effect_type; - int i_loud_norm; - int i_target_loudness; - unsigned int i_sbr_mode; - uint32_t ui_proc_mem_tabs_size = 0; - pVOID pv_alloc_ptr = NULL; - - /* Sampling Frequency */ - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_DRC_DEC_CONFIG_PARAM_SAMP_FREQ, &mSampFreq); - - /* Total Number of Channels */ - err_code = - ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_DRC_DEC_CONFIG_PARAM_NUM_CHANNELS, &mNumChannels); - - /* PCM word size */ - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_DRC_DEC_CONFIG_PARAM_PCM_WDSZ, &mPcmWdSz); - - /*Set Effect Type*/ - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_EFFECT_TYPE, - &i_effect_type); - - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_DRC_DEC_CONFIG_DRC_EFFECT_TYPE, &i_effect_type); - - /*Set target loudness */ - err_code = ixheaacd_dec_api( - mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_TARGET_LOUDNESS, &i_target_loudness); - - err_code = - ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_DRC_DEC_CONFIG_DRC_TARGET_LOUDNESS, &i_target_loudness); - - /*Set loud_norm_flag*/ - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_LOUD_NORM, - &i_loud_norm); - - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_DRC_DEC_CONFIG_DRC_LOUD_NORM, &i_loud_norm); - - err_code = - ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_SBR_MODE, &i_sbr_mode); - - /* Get memory info tables size */ - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_GET_MEMTABS_SIZE, 0, - &ui_proc_mem_tabs_size); - - pv_alloc_ptr = malloc(ui_proc_mem_tabs_size); - if (pv_alloc_ptr == NULL) { - return IA_FATAL_ERROR; - } - memset(pv_alloc_ptr, 0, ui_proc_mem_tabs_size); - mMemoryVec.push_back(pv_alloc_ptr); - - /* Set pointer for process memory tables */ - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_MEMTABS_PTR, 0, - pv_alloc_ptr); - - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_INIT, - IA_CMD_TYPE_INIT_API_POST_CONFIG_PARAMS, nullptr); - - /* Free any memory that is allocated for MPEG D Drc so far */ - deInitMPEGDDDrc(); - - err_code = initMPEGDDDrc(); - if (err_code != IA_NO_ERROR) { - deInitMPEGDDDrc(); - return err_code; - } - - /* DRC buffers - buf[0] - contains extension element pay load loudness related - buf[1] - contains extension element pay load*/ - { - VOID* p_array[2][16]; - WORD32 ii; - WORD32 buf_sizes[2][16]; - WORD32 num_elements; - WORD32 num_config_ext; - WORD32 bit_str_fmt = 1; - - WORD32 uo_num_chan; - - memset(buf_sizes, 0, 32 * sizeof(WORD32)); - - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_EXT_ELE_BUF_SIZES, - &buf_sizes[0][0]); - - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_EXT_ELE_PTR, &p_array); - - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_INIT, - IA_CMD_TYPE_INIT_SET_BUFF_PTR, nullptr); - - err_code = - ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_NUM_ELE, &num_elements); - - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_NUM_CONFIG_EXT, - &num_config_ext); - - for (ii = 0; ii < num_config_ext; ii++) { - /*copy loudness bitstream*/ - if (buf_sizes[0][ii] > 0) { - memcpy(mDrcInBuf, p_array[0][ii], buf_sizes[0][ii]); - - /*Set bitstream_split_format */ - err_code = - ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_DRC_DEC_CONFIG_PARAM_BITS_FORMAT, &bit_str_fmt); - - /* Set number of bytes to be processed */ - err_code = - ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_INPUT_BYTES_IL_BS, 0, - &buf_sizes[0][ii]); - - /* Execute process */ - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_INIT, - IA_CMD_TYPE_INIT_CPY_IL_BSF_BUFF, nullptr); - - mDRCFlag = 1; - } - } - - for (ii = 0; ii < num_elements; ii++) { - /*copy config bitstream*/ - if (buf_sizes[1][ii] > 0) { - memcpy(mDrcInBuf, p_array[1][ii], buf_sizes[1][ii]); - /* Set number of bytes to be processed */ - - /*Set bitstream_split_format */ - err_code = - ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_DRC_DEC_CONFIG_PARAM_BITS_FORMAT, &bit_str_fmt); - - err_code = - ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_INPUT_BYTES_IC_BS, 0, - &buf_sizes[1][ii]); - - /* Execute process */ - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_INIT, - IA_CMD_TYPE_INIT_CPY_IC_BSF_BUFF, nullptr); - - mDRCFlag = 1; - } - } - - if (mDRCFlag == 1) { - mMpegDDRCPresent = 1; - } else { - mMpegDDRCPresent = 0; - } - - /*Read interface buffer config file bitstream*/ - if (mMpegDDRCPresent == 1) { - WORD32 interface_is_present = 1; - - if (i_sbr_mode != 0) { - if (i_sbr_mode == 1) { - mOutputFrameLength = 2048; - } else if (i_sbr_mode == 3) { - mOutputFrameLength = 4096; - } else { - mOutputFrameLength = 1024; - } - } else { - mOutputFrameLength = 4096; - } - - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_DRC_DEC_CONFIG_PARAM_FRAME_SIZE, - (WORD32*)&mOutputFrameLength); - - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_DRC_DEC_CONFIG_PARAM_INT_PRESENT, - &interface_is_present); - - /* Execute process */ - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_INIT, - IA_CMD_TYPE_INIT_CPY_IN_BSF_BUFF, nullptr); - - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_INIT, - IA_CMD_TYPE_INIT_PROCESS, nullptr); - - err_code = - ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_DRC_DEC_CONFIG_PARAM_NUM_CHANNELS, &uo_num_chan); - } - } - - return err_code; -} -IA_ERRORCODE Codec::initDecoder(const uint8_t* data, size_t size, bool isADTS) { - IA_ERRORCODE err_code = IA_NO_ERROR; - - err_code = initXAACDecoder(isADTS); - if (err_code != IA_NO_ERROR) { - /* Call deInit to free any allocated memory */ - deInitXAACDecoder(); - return IA_FATAL_ERROR; - } - - err_code = initXAACDrc(data, size); - - return IA_NO_ERROR; -} -IA_ERRORCODE Codec::decodeXAACStream(uint8_t* inBuffer, uint32_t inBufferLength, - int32_t* bytesConsumed, - int32_t* outBytes) { - if (mInputBufferSize < inBufferLength) { - inBufferLength = mInputBufferSize; - } - /* If codec is not initialized, call configXAACDecoder decoder again */ - if (!mIsCodecInitialized) { - configXAACDecoder(inBuffer, inBufferLength, bytesConsumed); - } - /* Copy the buffer passed by Android plugin to codec input buffer */ - memcpy(mInputBuffer, inBuffer, inBufferLength); - - /* Set number of bytes to be processed */ - IA_ERRORCODE err_code = ixheaacd_dec_api( - mXheaacCodecHandle, IA_API_CMD_SET_INPUT_BYTES, 0, &inBufferLength); - - /* Execute process */ - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_EXECUTE, - IA_CMD_TYPE_DO_EXECUTE, nullptr); - - /* Checking for end of processing */ - uint32_t ui_exec_done; - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_EXECUTE, - IA_CMD_TYPE_DONE_QUERY, &ui_exec_done); - - if (ui_exec_done != 1) { - VOID* p_array; // ITTIAM:buffer to handle gain payload - WORD32 buf_size = 0; // ITTIAM:gain payload length - WORD32 bit_str_fmt = 1; - WORD32 gain_stream_flag = 1; - - err_code = - ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_GAIN_PAYLOAD_LEN, &buf_size); - - err_code = - ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_GAIN_PAYLOAD_BUF, &p_array); - - if (buf_size > 0) { - /*Set bitstream_split_format */ - err_code = - ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_DRC_DEC_CONFIG_PARAM_BITS_FORMAT, &bit_str_fmt); - - memcpy(mDrcInBuf, p_array, buf_size); - /* Set number of bytes to be processed */ - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_INPUT_BYTES_BS, - 0, &buf_size); - - err_code = - ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_DRC_DEC_CONFIG_GAIN_STREAM_FLAG, &gain_stream_flag); - - /* Execute process */ - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_INIT, - IA_CMD_TYPE_INIT_CPY_BSF_BUFF, nullptr); - - mMpegDDRCPresent = 1; - } - } - - /* How much buffer is used in input buffers */ - err_code = ixheaacd_dec_api( - mXheaacCodecHandle, IA_API_CMD_GET_CURIDX_INPUT_BUF, 0, bytesConsumed); - - /* Get the output bytes */ - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_OUTPUT_BYTES, - 0, outBytes); - - if (mMpegDDRCPresent == 1) { - memcpy(mDrcInBuf, mOutputBuffer, *outBytes); - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_INPUT_BYTES, 0, - outBytes); - - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_EXECUTE, - IA_CMD_TYPE_DO_EXECUTE, nullptr); - - memcpy(mOutputBuffer, mDrcOutBuf, *outBytes); - } - return IA_NO_ERROR; -} - -IA_ERRORCODE Codec::getXAACStreamInfo() { - IA_ERRORCODE err_code = IA_NO_ERROR; - - /* Sampling frequency */ - err_code = - ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_SAMP_FREQ, &mSampFreq); - - /* Total Number of Channels */ - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_NUM_CHANNELS, - &mNumChannels); - - if (mNumChannels > MAX_CHANNEL_COUNT) { - return IA_FATAL_ERROR; - } - - /* PCM word size */ - err_code = - ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_PCM_WDSZ, &mPcmWdSz); - - if ((mPcmWdSz / 8) != 2) { - return IA_FATAL_ERROR; - } - - /* channel mask to tell the arrangement of channels in bit stream */ - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_CHANNEL_MASK, - &mChannelMask); - - /* Channel mode to tell MONO/STEREO/DUAL-MONO/NONE_OF_THESE */ - uint32_t ui_channel_mode; - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_CHANNEL_MODE, - &ui_channel_mode); - - /* Channel mode to tell SBR PRESENT/NOT_PRESENT */ - uint32_t ui_sbr_mode; - err_code = - ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_SBR_MODE, &ui_sbr_mode); - - /* mOutputFrameLength = 1024 * (1 + SBR_MODE) for AAC */ - /* For USAC it could be 1024 * 3 , support to query */ - /* not yet added in codec */ - mOutputFrameLength = 1024 * (1 + ui_sbr_mode); - - return IA_NO_ERROR; -} - -IA_ERRORCODE Codec::setXAACDRCInfo(int32_t drcCut, int32_t drcBoost, - int32_t drcRefLevel, - int32_t drcHeavyCompression, - int32_t drEffectType) { - IA_ERRORCODE err_code = IA_NO_ERROR; - - int32_t ui_drc_enable = 1; - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_ENABLE, - &ui_drc_enable); - - if (drcCut != -1) { - err_code = - ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_CUT, &drcCut); - } - - if (drcBoost != -1) { - err_code = - ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_BOOST, &drcBoost); - } - - if (drcRefLevel != -1) { - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_TARGET_LEVEL, - &drcRefLevel); - } - - if (drcRefLevel != -1) { - err_code = - ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_DRC_TARGET_LOUDNESS, &drcRefLevel); - } - - if (drcHeavyCompression != -1) { - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_HEAVY_COMP, - &drcHeavyCompression); - } - - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_DRC_EFFECT_TYPE, &drEffectType); - - int32_t i_effect_type, i_target_loudness, i_loud_norm; - /*Set Effect Type*/ - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_EFFECT_TYPE, - &i_effect_type); - - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_DRC_DEC_CONFIG_DRC_EFFECT_TYPE, &i_effect_type); - - /*Set target loudness */ - err_code = ixheaacd_dec_api( - mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_TARGET_LOUDNESS, &i_target_loudness); - - err_code = - ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_DRC_DEC_CONFIG_DRC_TARGET_LOUDNESS, &i_target_loudness); - - /*Set loud_norm_flag*/ - err_code = ixheaacd_dec_api(mXheaacCodecHandle, IA_API_CMD_GET_CONFIG_PARAM, - IA_ENHAACPLUS_DEC_CONFIG_PARAM_DRC_LOUD_NORM, - &i_loud_norm); - - err_code = ia_drc_dec_api(mMpegDDrcHandle, IA_API_CMD_SET_CONFIG_PARAM, - IA_DRC_DEC_CONFIG_DRC_LOUD_NORM, &i_loud_norm); - - return IA_NO_ERROR; -} - -extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { - int status; - if (size < 1) return 0; - Codec* codec = new Codec(); - bool isADTS = false; - if (size >= 2) { - if ((data[0] == 0xFF) && ((data[1] & 0xF0) == 0xF0)) { - isADTS = true; - } - } - status = codec->initDecoder(data, size, isADTS); - if (0 == status) { - int32_t bytesConsumed = 0; - status = codec->configXAACDecoder((uint8_t*)data, size, &bytesConsumed); - while ((int32_t)size > bytesConsumed) { - int32_t numOutBytes; - size -= bytesConsumed; - data += bytesConsumed; - status = codec->decodeXAACStream((uint8_t*)data, size, &bytesConsumed, - &numOutBytes); - /* If decoder doesn't consume any bytes, advance by 4 bytes */ - if (0 == bytesConsumed) bytesConsumed = 4; - } - } - status = codec->deInitXAACDecoder(); - status = codec->deInitMPEGDDDrc(); - delete codec; - return 0; -} diff --git a/fuzzer/xaac_dec_fuzzer.dict b/fuzzer/xaac_dec_fuzzer.dict deleted file mode 100644 index 3b00312..0000000 --- a/fuzzer/xaac_dec_fuzzer.dict +++ /dev/null @@ -1,2 +0,0 @@ -# Start code (bytes 0-1) -kw1="\xFF\xF0" diff --git a/test/Android.bp b/test/Android.bp index 3d37ab1..d131c94 100644 --- a/test/Android.bp +++ b/test/Android.bp @@ -2,7 +2,6 @@ cc_test { name: "xaacdec", vendor_available: true, - host_supported: true, gtest: false, cflags: [ |