Loading CMakeLists.txt +12 −5 Original line number Diff line number Diff line Loading @@ -37,7 +37,8 @@ set(CMAKE_C_STANDARD 99) if(UNIX) set(TARGET_PLATFORM "" CACHE STRING "i686 / x86_64") set(CLANG "" CACHE STRING "1=msan / 2=asan / 3=usan") set(GCOV OFF CACHE BOOL "enable GCOV") set(MSAN_TRACK_ORIGINS OFF CACHE BOOL "enable origin tracking for Clang MSAN") set(COVERAGE OFF CACHE BOOL "enable coverage instrumentation") set(STRIP OFF CACHE BOOL "enable STRIP") if(NOT CMAKE_BUILD_TYPE) Loading @@ -62,13 +63,19 @@ if(UNIX) # to be uncommented in CI # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror") # set C compiler find_program(cc NAMES clang-18 clang REQUIRED) set(CMAKE_C_COMPILER "${cc}" CACHE STRING "") # CLANG if(CLANG) find_program(clangBin NAMES /home/amm-archiv/soft/Linux/clang/current/bin/clang clang REQUIRED) set(CMAKE_C_COMPILER "${clangBin}" CACHE STRING "") if("${CLANG}" MATCHES "1" OR "${CLANG}" MATCHES "msan") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=memory") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=memory") if(MSAN_TRACK_ORIGINS) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-memory-track-origins") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize-memory-track-origins") endif() elseif("${CLANG}" MATCHES "2" OR "${CLANG}" MATCHES "asan") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") Loading @@ -89,8 +96,8 @@ if(UNIX) message(FATAL_ERROR "Unknown CLANG setting: ${CLANG}") endif() endif() # GCOV if(GCOV) # COVERAGE if(COVERAGE) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage -fprofile-update=atomic") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage -fprofile-update=atomic") endif() Loading Makefile +23 −12 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ LIB_LC3PLUS ?= liblc3plus.a LIB_LIBUTIL ?= libivasutil.a # Default tool settings CC ?= gcc CC ?= cc RM ?= rm -f AR ?= ar Loading Loading @@ -65,32 +65,43 @@ endif CFLAGS += -std=c99 -pedantic -Wcast-qual -Wall -W -Wextra -Wno-long-long \ -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes \ -Werror-implicit-function-declaration \ -Wno-implicit-fallthrough -ffp-contract=off -Wno-implicit-fallthrough -ffp-contract=off \ -Winit-self -Wunused-but-set-variable # to be uncommented in CI # CFLAGS += -Werror CFLAGS += -Winit-self CFLAGS += -Wunused-but-set-variable # libs to link LDLIBS += -lm # Clang sanitizer compiler options CCCLANG = clang ifeq "$(CLANG)" "0" CC = $(CCCLANG) # check if clang is available on system and use it if it is there CLANG_EXISTS := $(shell which clang) ifneq "$(CLANG_EXISTS)" "" CC = clang else $(warning clang compiler not found - falling back to cc) endif # Clang sanitizer compiler options ifeq "$(CLANG)" "1" CC = $(CCCLANG) CC = clang CFLAGS += -fsanitize=memory LDFLAGS += -fsanitize=memory # can be set in call to make, e.g. "make CLANG=1 MSAN_TRACK_ORIGINS=1" ifeq "$(MSAN_TRACK_ORIGINS)" "1" CFLAGS += -fsanitize-memory-track-origins LDFLAGS += -fsanitize-memory-track-origins endif endif ifeq "$(CLANG)" "2" CC = $(CCCLANG) CC = clang CFLAGS += -fsanitize=address LDFLAGS += -fsanitize=address endif ifeq "$(CLANG)" "3" CC = $(CCCLANG) CC = clang # NOTE: keep in sync with list in CMakeLists.txt usan_checks = undefined,float-divide-by-zero,implicit-conversion,local-bounds CFLAGS += -fsanitize=$(usan_checks) Loading @@ -114,7 +125,7 @@ CFLAGS += -g3 LDFLAGS += -g3 endif ifeq "$(GCOV)" "1" ifeq "$(COVERAGE)" "1" CFLAGS += -fprofile-arcs -ftest-coverage -fprofile-update=atomic LDFLAGS += -fprofile-arcs -ftest-coverage -fprofile-update=atomic endif Loading Workspace_msvc/lib_util.vcxproj +2 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,7 @@ <ClCompile Include="..\lib_util\obj_edit_file_reader.c" /> <ClCompile Include="..\lib_util\render_config_reader.c" /> <ClCompile Include="..\lib_util\rotation_file_reader.c" /> <ClCompile Include="..\lib_util\requests_file_reader.c" /> <ClCompile Include="..\lib_util\rtpdump.c" /> <ClCompile Include="..\lib_util\split_render_file_read_write.c" /> <ClCompile Include="..\lib_util\split_rend_bfi_file_reader.c" /> Loading Loading @@ -164,6 +165,7 @@ <ClInclude Include="..\lib_util\masa_file_writer.h" /> <ClInclude Include="..\lib_util\render_config_reader.h" /> <ClInclude Include="..\lib_util\rotation_file_reader.h" /> <ClInclude Include="..\lib_util\requests_file_reader.h" /> <ClInclude Include="..\lib_util\rtpdump.h" /> <ClInclude Include="..\lib_util\tinywavein_c.h" /> <ClInclude Include="..\lib_util\tinywaveout_c.h" /> Loading apps/decoder.c +56 −0 Original line number Diff line number Diff line Loading @@ -159,7 +159,11 @@ typedef struct static bool parseCmdlIVAS_dec( int16_t argc, char **argv, DecArguments *arg ); static void usage_dec( void ); #ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtfBinary, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, ObjectEditFileReader *objectEditFileReader, ISAR_SPLIT_REND_BITS_DATA *splitRendBits, IVAS_DEC_HANDLE *phIvasDec, int16_t *pcmBuf ); #else static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtfBinary, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, ObjectEditFileReader *objectEditFileReader, ISAR_SPLIT_REND_BITS_DATA *splitRendBits, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf ); #endif static ivas_error decodeVoIP( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtf, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, ObjectEditFileReader *objectEditFileReader, ISAR_SPLIT_REND_BITS_DATA *splitRendBits, IVAS_RENDER_CONFIG_DATA *renderConfig, IVAS_DEC_HANDLE *phIvasDec, int16_t *pcmBuf ); static ivas_error load_hrtf_from_file( IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtfBinary, IVAS_DEC_HANDLE hIvasDec, const IVAS_AUDIO_CONFIG OutputConfig, const int32_t output_Fs ); static void do_object_editing_fx( IVAS_EDITABLE_PARAMETERS *editableParameters, ObjectEditFileReader *objectEditFileReader ); Loading Loading @@ -668,7 +672,11 @@ int main( } else { #ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH error = decodeG192( arg, hBsReader, &hHrtfBinary, headRotReader, externalOrientationFileReader, refRotReader, referenceVectorReader, objectEditFileReader, &splitRendBits, &hIvasDec, pcmBuf ); #else error = decodeG192( arg, hBsReader, &hHrtfBinary, headRotReader, externalOrientationFileReader, refRotReader, referenceVectorReader, objectEditFileReader, &splitRendBits, hIvasDec, pcmBuf ); #endif } if ( error == IVAS_ERR_OK || error == IVAS_ERR_END_OF_FILE ) Loading Loading @@ -1728,6 +1736,9 @@ static ivas_error initOnFirstGoodFrame( uint16_t rtpDecSeed = RANDOM_INITSEED_DEC; uint32_t ssrc = ( (uint32_t) IVAS_RTP_OwnRandom( &rtpDecSeed ) & 0x0000FFFF ) | ( (uint32_t) IVAS_RTP_OwnRandom( &rtpDecSeed ) << 16 ); uint16_t seqNumInitVal = IVAS_RTP_OwnRandom( &rtpDecSeed ); #ifdef FIX_1540_EXPOSE_PT_IN_RTP_HEADER_API uint8_t payloadType = DEFAULT_IVAS_PAYLOAD_TYPE; /* Dynamic PT are in range [96, 127] */ #endif if ( ( error = IVAS_DEC_GetDelay( hIvasDec, delayNumSamples_temp, &delayTimeScale_temp ) ) != IVAS_ERR_OK ) { Loading Loading @@ -1764,7 +1775,11 @@ static ivas_error initOnFirstGoodFrame( /* Split Rendering RTPDump Output file */ #ifdef FIX_1540_EXPOSE_PT_IN_RTP_HEADER_API if ( ( error = IVAS_RTP_WRITER_Init( srRtp, arg.outputWavFilename, 1000 / ( IVAS_NUM_FRAMES_PER_SEC * splitRendCodecFrameSizeMs ), payloadType, ssrc, seqNumInitVal ) ) != IVAS_ERR_OK ) #else if ( ( error = IVAS_RTP_WRITER_Init( srRtp, arg.outputWavFilename, 1000 / ( IVAS_NUM_FRAMES_PER_SEC * splitRendCodecFrameSizeMs ), ssrc, seqNumInitVal ) ) != IVAS_ERR_OK ) #endif { fprintf( stderr, "\nError: Can't open SR output bitstream file for RTP output %s \n\n", arg.outputWavFilename ); return error; Loading Loading @@ -1995,7 +2010,11 @@ static ivas_error decodeG192( Vector3PairFileReader *referenceVectorReader, ObjectEditFileReader *objectEditFileReader, ISAR_SPLIT_REND_BITS_DATA *splitRendBits, #ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH IVAS_DEC_HANDLE *phIvasDec, #else IVAS_DEC_HANDLE hIvasDec, #endif int16_t *pcmBuf ) { Loading @@ -2003,6 +2022,9 @@ static ivas_error decodeG192( uint16_t bit_stream[IVAS_MAX_BITS_PER_FRAME + 4 * 8]; int16_t i, num_bits; int16_t bfi = 0; #ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH IVAS_DEC_HANDLE hIvasDec = *phIvasDec; #endif AudioFileWriter *afWriter = NULL; MasaFileWriter *masaWriter = NULL; bool decodedGoodFrame = false; Loading @@ -2026,6 +2048,9 @@ static ivas_error decodeG192( int16_t isSplitRend, isSplitCoded; IVAS_RENDER_CONFIG_DATA renderConfig; RenderConfigReader *renderConfigReader = NULL; #ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH bool restartNeeded; #endif #ifdef VARIABLE_SPEED_DECODING if ( arg.tsmEnabled ) Loading Loading @@ -2282,6 +2307,37 @@ static ivas_error decodeG192( return error; } #ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH if ( ( error = IVAS_DEC_isRestartNeeded( hIvasDec, &restartNeeded ) ) != IVAS_ERR_OK ) { return error; } if ( restartNeeded ) { IVAS_DEC_BS_FORMAT tempFormat; if ( ( error = IVAS_DEC_GetFormat( hIvasDec, &tempFormat ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError in IVAS_DEC_GetFormat, code: %d\n", error ); goto cleanup; } IVAS_DEC_MODE codecMode = ( tempFormat == IVAS_DEC_BS_MONO ) ? IVAS_DEC_MODE_EVS : IVAS_DEC_MODE_IVAS; error = restartDecoder( &hIvasDec, codecMode, &arg, NULL, /* ToDo : Provide rendererConfig */ NULL /* ToDo : Provide LS Custom Data */ ); if ( error != IVAS_ERR_OK ) { fprintf( stderr, "\nFailed to restart decoder\n" ); goto cleanup; } *phIvasDec = hIvasDec; /* Update for main()' s free */ } #endif /* Placeholder for memory reallocation */ /* ... */ Loading apps/encoder.c +69 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,9 @@ #include "masa_file_reader.h" #include "rotation_file_reader.h" #include "ivas_rtp_file.h" #ifdef FIX_1527_CMR_BITRATE_IDX #include "requests_file_reader.h" #endif #include "wmc_auto.h" Loading Loading @@ -165,6 +168,9 @@ typedef struct char *sceneOrientationTrajFileName; char *deviceOrientationTrajFileName; #ifdef FIX_1527_CMR_BITRATE_IDX char *requestsFileName; #endif } EncArguments; Loading Loading @@ -221,12 +227,18 @@ int main( uint8_t au[IVAS_MAX_BITS_PER_FRAME / 8]; IVAS_RTP ivasRtp = { 0 }; #ifdef FIX_1527_CMR_BITRATE_IDX ReqFileReader *requestsFileReader = NULL; #endif /* Ideally ssrc is negotiated via SDP and sequence number is radomized but we use fixed seed for random num generator for regression based tests. Any realtime application should implement this initialization seperately */ uint16_t rtpEncSeed = RANDOM_INITSEED_ENC; uint32_t ssrc = ( (uint32_t) IVAS_RTP_OwnRandom( &rtpEncSeed ) & 0x0000FFFF ) | ( (uint32_t) IVAS_RTP_OwnRandom( &rtpEncSeed ) << 16 ); uint16_t seqNumInitVal = IVAS_RTP_OwnRandom( &rtpEncSeed ); #ifdef FIX_1540_EXPOSE_PT_IN_RTP_HEADER_API uint8_t payloadType = DEFAULT_IVAS_PAYLOAD_TYPE; /* Dynamic PT are in range [96, 127] */ #endif /*------------------------------------------------------------------------------------------* * Parse command-line arguments Loading Loading @@ -618,7 +630,11 @@ int main( if ( arg.rtpdumpOutput ) { #ifdef FIX_1540_EXPOSE_PT_IN_RTP_HEADER_API if ( ( error = IVAS_RTP_WRITER_Init( &ivasRtp, arg.outputBitstreamFilename, arg.numFramesPerPacket, payloadType, ssrc, seqNumInitVal ) ) != IVAS_ERR_OK ) #else if ( ( error = IVAS_RTP_WRITER_Init( &ivasRtp, arg.outputBitstreamFilename, arg.numFramesPerPacket, ssrc, seqNumInitVal ) ) != IVAS_ERR_OK ) #endif { fprintf( stderr, "\nError: Can't open output bitstream file for RTP output %s \n\n", arg.outputBitstreamFilename ); goto cleanup; Loading Loading @@ -651,6 +667,20 @@ int main( } } #ifdef FIX_1527_CMR_BITRATE_IDX /*------------------------------------------------------------------------------------------* * Open remote requests file for rtp packing (E-bytes) *------------------------------------------------------------------------------------------*/ if ( arg.requestsFileName != NULL ) { if ( ( error = RequestsFileReader_open( arg.requestsFileName, &requestsFileReader ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError: Can't open requests file %s \n\n", arg.requestsFileName ); goto cleanup; } } #endif /*------------------------------------------------------------------------------------------* * Run the encoder *------------------------------------------------------------------------------------------*/ Loading Loading @@ -860,6 +890,17 @@ int main( } } #ifdef FIX_1527_CMR_BITRATE_IDX if ( requestsFileReader ) { if ( ( error = ReadNextRequests( requestsFileReader, ivasRtp.remoteRequests, &ivasRtp.remoteRequestBitmap ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError %s while reading requests from %s\n", IVAS_ENC_GetErrorMessage( error ), RequestsFileReader_getFilePath( requestsFileReader ) ); goto cleanup; } } #endif if ( ( error = IVAS_ENC_EncodeFrameToCompact( hIvasEnc, pcmBuf, pcmBufSize, au, &numBits ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nencodeFrame failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) ); Loading Loading @@ -955,6 +996,13 @@ cleanup: fclose( f_bitrateProfile ); } #ifdef FIX_1527_CMR_BITRATE_IDX if ( requestsFileReader ) { RequestsFileReader_close( &requestsFileReader ); } #endif if ( sceneOrientationFileReader ) { RotationFileReader_close( &sceneOrientationFileReader ); Loading Loading @@ -1001,6 +1049,9 @@ static bool parseCmdlIVAS_enc( /*-----------------------------------------------------------------* * Set default values *-----------------------------------------------------------------*/ #ifdef FIX_1527_CMR_BITRATE_IDX memset( arg, 0, sizeof( *arg ) ); #endif arg->inputWavFilename = NULL; arg->outputBitstreamFilename = NULL; Loading Loading @@ -1867,6 +1918,20 @@ static bool parseCmdlIVAS_enc( arg->deviceOrientationTrajFileName = argv[i]; i++; } #ifdef FIX_1527_CMR_BITRATE_IDX else if ( strcmp( argv_to_upper, "-REQUESTS" ) == 0 ) { i++; if ( argc - i <= 4 || argv[i][0] == '-' ) { fprintf( stderr, "Error: Remote requests file name not specified!\n\n" ); usage_enc(); return false; } arg->requestsFileName = argv[i]; i++; } #endif /*-----------------------------------------------------------------* * Option not recognized Loading Loading @@ -2086,6 +2151,10 @@ static void usage_enc( void ) fprintf( stdout, " EVS RTP Payload Format is used. Optional N represents number of frames per RTP packet\n" ); fprintf( stdout, "-scene_orientation : Scene orientation trajectory file. Only used with rtpdump output.\n" ); fprintf( stdout, "-device_orientation : Device orientation trajectory file. Only used with rtpdump output.\n" ); #ifdef FIX_1527_CMR_BITRATE_IDX fprintf( stdout, "-requests : Remote requests file, Only used with rtpdump output.\n" ); #endif fprintf( stdout, "\n" ); return; Loading Loading
CMakeLists.txt +12 −5 Original line number Diff line number Diff line Loading @@ -37,7 +37,8 @@ set(CMAKE_C_STANDARD 99) if(UNIX) set(TARGET_PLATFORM "" CACHE STRING "i686 / x86_64") set(CLANG "" CACHE STRING "1=msan / 2=asan / 3=usan") set(GCOV OFF CACHE BOOL "enable GCOV") set(MSAN_TRACK_ORIGINS OFF CACHE BOOL "enable origin tracking for Clang MSAN") set(COVERAGE OFF CACHE BOOL "enable coverage instrumentation") set(STRIP OFF CACHE BOOL "enable STRIP") if(NOT CMAKE_BUILD_TYPE) Loading @@ -62,13 +63,19 @@ if(UNIX) # to be uncommented in CI # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror") # set C compiler find_program(cc NAMES clang-18 clang REQUIRED) set(CMAKE_C_COMPILER "${cc}" CACHE STRING "") # CLANG if(CLANG) find_program(clangBin NAMES /home/amm-archiv/soft/Linux/clang/current/bin/clang clang REQUIRED) set(CMAKE_C_COMPILER "${clangBin}" CACHE STRING "") if("${CLANG}" MATCHES "1" OR "${CLANG}" MATCHES "msan") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=memory") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=memory") if(MSAN_TRACK_ORIGINS) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-memory-track-origins") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize-memory-track-origins") endif() elseif("${CLANG}" MATCHES "2" OR "${CLANG}" MATCHES "asan") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") Loading @@ -89,8 +96,8 @@ if(UNIX) message(FATAL_ERROR "Unknown CLANG setting: ${CLANG}") endif() endif() # GCOV if(GCOV) # COVERAGE if(COVERAGE) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage -fprofile-update=atomic") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage -fprofile-update=atomic") endif() Loading
Makefile +23 −12 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ LIB_LC3PLUS ?= liblc3plus.a LIB_LIBUTIL ?= libivasutil.a # Default tool settings CC ?= gcc CC ?= cc RM ?= rm -f AR ?= ar Loading Loading @@ -65,32 +65,43 @@ endif CFLAGS += -std=c99 -pedantic -Wcast-qual -Wall -W -Wextra -Wno-long-long \ -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes \ -Werror-implicit-function-declaration \ -Wno-implicit-fallthrough -ffp-contract=off -Wno-implicit-fallthrough -ffp-contract=off \ -Winit-self -Wunused-but-set-variable # to be uncommented in CI # CFLAGS += -Werror CFLAGS += -Winit-self CFLAGS += -Wunused-but-set-variable # libs to link LDLIBS += -lm # Clang sanitizer compiler options CCCLANG = clang ifeq "$(CLANG)" "0" CC = $(CCCLANG) # check if clang is available on system and use it if it is there CLANG_EXISTS := $(shell which clang) ifneq "$(CLANG_EXISTS)" "" CC = clang else $(warning clang compiler not found - falling back to cc) endif # Clang sanitizer compiler options ifeq "$(CLANG)" "1" CC = $(CCCLANG) CC = clang CFLAGS += -fsanitize=memory LDFLAGS += -fsanitize=memory # can be set in call to make, e.g. "make CLANG=1 MSAN_TRACK_ORIGINS=1" ifeq "$(MSAN_TRACK_ORIGINS)" "1" CFLAGS += -fsanitize-memory-track-origins LDFLAGS += -fsanitize-memory-track-origins endif endif ifeq "$(CLANG)" "2" CC = $(CCCLANG) CC = clang CFLAGS += -fsanitize=address LDFLAGS += -fsanitize=address endif ifeq "$(CLANG)" "3" CC = $(CCCLANG) CC = clang # NOTE: keep in sync with list in CMakeLists.txt usan_checks = undefined,float-divide-by-zero,implicit-conversion,local-bounds CFLAGS += -fsanitize=$(usan_checks) Loading @@ -114,7 +125,7 @@ CFLAGS += -g3 LDFLAGS += -g3 endif ifeq "$(GCOV)" "1" ifeq "$(COVERAGE)" "1" CFLAGS += -fprofile-arcs -ftest-coverage -fprofile-update=atomic LDFLAGS += -fprofile-arcs -ftest-coverage -fprofile-update=atomic endif Loading
Workspace_msvc/lib_util.vcxproj +2 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,7 @@ <ClCompile Include="..\lib_util\obj_edit_file_reader.c" /> <ClCompile Include="..\lib_util\render_config_reader.c" /> <ClCompile Include="..\lib_util\rotation_file_reader.c" /> <ClCompile Include="..\lib_util\requests_file_reader.c" /> <ClCompile Include="..\lib_util\rtpdump.c" /> <ClCompile Include="..\lib_util\split_render_file_read_write.c" /> <ClCompile Include="..\lib_util\split_rend_bfi_file_reader.c" /> Loading Loading @@ -164,6 +165,7 @@ <ClInclude Include="..\lib_util\masa_file_writer.h" /> <ClInclude Include="..\lib_util\render_config_reader.h" /> <ClInclude Include="..\lib_util\rotation_file_reader.h" /> <ClInclude Include="..\lib_util\requests_file_reader.h" /> <ClInclude Include="..\lib_util\rtpdump.h" /> <ClInclude Include="..\lib_util\tinywavein_c.h" /> <ClInclude Include="..\lib_util\tinywaveout_c.h" /> Loading
apps/decoder.c +56 −0 Original line number Diff line number Diff line Loading @@ -159,7 +159,11 @@ typedef struct static bool parseCmdlIVAS_dec( int16_t argc, char **argv, DecArguments *arg ); static void usage_dec( void ); #ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtfBinary, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, ObjectEditFileReader *objectEditFileReader, ISAR_SPLIT_REND_BITS_DATA *splitRendBits, IVAS_DEC_HANDLE *phIvasDec, int16_t *pcmBuf ); #else static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtfBinary, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, ObjectEditFileReader *objectEditFileReader, ISAR_SPLIT_REND_BITS_DATA *splitRendBits, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf ); #endif static ivas_error decodeVoIP( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtf, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, ObjectEditFileReader *objectEditFileReader, ISAR_SPLIT_REND_BITS_DATA *splitRendBits, IVAS_RENDER_CONFIG_DATA *renderConfig, IVAS_DEC_HANDLE *phIvasDec, int16_t *pcmBuf ); static ivas_error load_hrtf_from_file( IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtfBinary, IVAS_DEC_HANDLE hIvasDec, const IVAS_AUDIO_CONFIG OutputConfig, const int32_t output_Fs ); static void do_object_editing_fx( IVAS_EDITABLE_PARAMETERS *editableParameters, ObjectEditFileReader *objectEditFileReader ); Loading Loading @@ -668,7 +672,11 @@ int main( } else { #ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH error = decodeG192( arg, hBsReader, &hHrtfBinary, headRotReader, externalOrientationFileReader, refRotReader, referenceVectorReader, objectEditFileReader, &splitRendBits, &hIvasDec, pcmBuf ); #else error = decodeG192( arg, hBsReader, &hHrtfBinary, headRotReader, externalOrientationFileReader, refRotReader, referenceVectorReader, objectEditFileReader, &splitRendBits, hIvasDec, pcmBuf ); #endif } if ( error == IVAS_ERR_OK || error == IVAS_ERR_END_OF_FILE ) Loading Loading @@ -1728,6 +1736,9 @@ static ivas_error initOnFirstGoodFrame( uint16_t rtpDecSeed = RANDOM_INITSEED_DEC; uint32_t ssrc = ( (uint32_t) IVAS_RTP_OwnRandom( &rtpDecSeed ) & 0x0000FFFF ) | ( (uint32_t) IVAS_RTP_OwnRandom( &rtpDecSeed ) << 16 ); uint16_t seqNumInitVal = IVAS_RTP_OwnRandom( &rtpDecSeed ); #ifdef FIX_1540_EXPOSE_PT_IN_RTP_HEADER_API uint8_t payloadType = DEFAULT_IVAS_PAYLOAD_TYPE; /* Dynamic PT are in range [96, 127] */ #endif if ( ( error = IVAS_DEC_GetDelay( hIvasDec, delayNumSamples_temp, &delayTimeScale_temp ) ) != IVAS_ERR_OK ) { Loading Loading @@ -1764,7 +1775,11 @@ static ivas_error initOnFirstGoodFrame( /* Split Rendering RTPDump Output file */ #ifdef FIX_1540_EXPOSE_PT_IN_RTP_HEADER_API if ( ( error = IVAS_RTP_WRITER_Init( srRtp, arg.outputWavFilename, 1000 / ( IVAS_NUM_FRAMES_PER_SEC * splitRendCodecFrameSizeMs ), payloadType, ssrc, seqNumInitVal ) ) != IVAS_ERR_OK ) #else if ( ( error = IVAS_RTP_WRITER_Init( srRtp, arg.outputWavFilename, 1000 / ( IVAS_NUM_FRAMES_PER_SEC * splitRendCodecFrameSizeMs ), ssrc, seqNumInitVal ) ) != IVAS_ERR_OK ) #endif { fprintf( stderr, "\nError: Can't open SR output bitstream file for RTP output %s \n\n", arg.outputWavFilename ); return error; Loading Loading @@ -1995,7 +2010,11 @@ static ivas_error decodeG192( Vector3PairFileReader *referenceVectorReader, ObjectEditFileReader *objectEditFileReader, ISAR_SPLIT_REND_BITS_DATA *splitRendBits, #ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH IVAS_DEC_HANDLE *phIvasDec, #else IVAS_DEC_HANDLE hIvasDec, #endif int16_t *pcmBuf ) { Loading @@ -2003,6 +2022,9 @@ static ivas_error decodeG192( uint16_t bit_stream[IVAS_MAX_BITS_PER_FRAME + 4 * 8]; int16_t i, num_bits; int16_t bfi = 0; #ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH IVAS_DEC_HANDLE hIvasDec = *phIvasDec; #endif AudioFileWriter *afWriter = NULL; MasaFileWriter *masaWriter = NULL; bool decodedGoodFrame = false; Loading @@ -2026,6 +2048,9 @@ static ivas_error decodeG192( int16_t isSplitRend, isSplitCoded; IVAS_RENDER_CONFIG_DATA renderConfig; RenderConfigReader *renderConfigReader = NULL; #ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH bool restartNeeded; #endif #ifdef VARIABLE_SPEED_DECODING if ( arg.tsmEnabled ) Loading Loading @@ -2282,6 +2307,37 @@ static ivas_error decodeG192( return error; } #ifdef FIX_FLOAT_1539_G192_FORMAT_SWITCH if ( ( error = IVAS_DEC_isRestartNeeded( hIvasDec, &restartNeeded ) ) != IVAS_ERR_OK ) { return error; } if ( restartNeeded ) { IVAS_DEC_BS_FORMAT tempFormat; if ( ( error = IVAS_DEC_GetFormat( hIvasDec, &tempFormat ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError in IVAS_DEC_GetFormat, code: %d\n", error ); goto cleanup; } IVAS_DEC_MODE codecMode = ( tempFormat == IVAS_DEC_BS_MONO ) ? IVAS_DEC_MODE_EVS : IVAS_DEC_MODE_IVAS; error = restartDecoder( &hIvasDec, codecMode, &arg, NULL, /* ToDo : Provide rendererConfig */ NULL /* ToDo : Provide LS Custom Data */ ); if ( error != IVAS_ERR_OK ) { fprintf( stderr, "\nFailed to restart decoder\n" ); goto cleanup; } *phIvasDec = hIvasDec; /* Update for main()' s free */ } #endif /* Placeholder for memory reallocation */ /* ... */ Loading
apps/encoder.c +69 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,9 @@ #include "masa_file_reader.h" #include "rotation_file_reader.h" #include "ivas_rtp_file.h" #ifdef FIX_1527_CMR_BITRATE_IDX #include "requests_file_reader.h" #endif #include "wmc_auto.h" Loading Loading @@ -165,6 +168,9 @@ typedef struct char *sceneOrientationTrajFileName; char *deviceOrientationTrajFileName; #ifdef FIX_1527_CMR_BITRATE_IDX char *requestsFileName; #endif } EncArguments; Loading Loading @@ -221,12 +227,18 @@ int main( uint8_t au[IVAS_MAX_BITS_PER_FRAME / 8]; IVAS_RTP ivasRtp = { 0 }; #ifdef FIX_1527_CMR_BITRATE_IDX ReqFileReader *requestsFileReader = NULL; #endif /* Ideally ssrc is negotiated via SDP and sequence number is radomized but we use fixed seed for random num generator for regression based tests. Any realtime application should implement this initialization seperately */ uint16_t rtpEncSeed = RANDOM_INITSEED_ENC; uint32_t ssrc = ( (uint32_t) IVAS_RTP_OwnRandom( &rtpEncSeed ) & 0x0000FFFF ) | ( (uint32_t) IVAS_RTP_OwnRandom( &rtpEncSeed ) << 16 ); uint16_t seqNumInitVal = IVAS_RTP_OwnRandom( &rtpEncSeed ); #ifdef FIX_1540_EXPOSE_PT_IN_RTP_HEADER_API uint8_t payloadType = DEFAULT_IVAS_PAYLOAD_TYPE; /* Dynamic PT are in range [96, 127] */ #endif /*------------------------------------------------------------------------------------------* * Parse command-line arguments Loading Loading @@ -618,7 +630,11 @@ int main( if ( arg.rtpdumpOutput ) { #ifdef FIX_1540_EXPOSE_PT_IN_RTP_HEADER_API if ( ( error = IVAS_RTP_WRITER_Init( &ivasRtp, arg.outputBitstreamFilename, arg.numFramesPerPacket, payloadType, ssrc, seqNumInitVal ) ) != IVAS_ERR_OK ) #else if ( ( error = IVAS_RTP_WRITER_Init( &ivasRtp, arg.outputBitstreamFilename, arg.numFramesPerPacket, ssrc, seqNumInitVal ) ) != IVAS_ERR_OK ) #endif { fprintf( stderr, "\nError: Can't open output bitstream file for RTP output %s \n\n", arg.outputBitstreamFilename ); goto cleanup; Loading Loading @@ -651,6 +667,20 @@ int main( } } #ifdef FIX_1527_CMR_BITRATE_IDX /*------------------------------------------------------------------------------------------* * Open remote requests file for rtp packing (E-bytes) *------------------------------------------------------------------------------------------*/ if ( arg.requestsFileName != NULL ) { if ( ( error = RequestsFileReader_open( arg.requestsFileName, &requestsFileReader ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError: Can't open requests file %s \n\n", arg.requestsFileName ); goto cleanup; } } #endif /*------------------------------------------------------------------------------------------* * Run the encoder *------------------------------------------------------------------------------------------*/ Loading Loading @@ -860,6 +890,17 @@ int main( } } #ifdef FIX_1527_CMR_BITRATE_IDX if ( requestsFileReader ) { if ( ( error = ReadNextRequests( requestsFileReader, ivasRtp.remoteRequests, &ivasRtp.remoteRequestBitmap ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError %s while reading requests from %s\n", IVAS_ENC_GetErrorMessage( error ), RequestsFileReader_getFilePath( requestsFileReader ) ); goto cleanup; } } #endif if ( ( error = IVAS_ENC_EncodeFrameToCompact( hIvasEnc, pcmBuf, pcmBufSize, au, &numBits ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nencodeFrame failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) ); Loading Loading @@ -955,6 +996,13 @@ cleanup: fclose( f_bitrateProfile ); } #ifdef FIX_1527_CMR_BITRATE_IDX if ( requestsFileReader ) { RequestsFileReader_close( &requestsFileReader ); } #endif if ( sceneOrientationFileReader ) { RotationFileReader_close( &sceneOrientationFileReader ); Loading Loading @@ -1001,6 +1049,9 @@ static bool parseCmdlIVAS_enc( /*-----------------------------------------------------------------* * Set default values *-----------------------------------------------------------------*/ #ifdef FIX_1527_CMR_BITRATE_IDX memset( arg, 0, sizeof( *arg ) ); #endif arg->inputWavFilename = NULL; arg->outputBitstreamFilename = NULL; Loading Loading @@ -1867,6 +1918,20 @@ static bool parseCmdlIVAS_enc( arg->deviceOrientationTrajFileName = argv[i]; i++; } #ifdef FIX_1527_CMR_BITRATE_IDX else if ( strcmp( argv_to_upper, "-REQUESTS" ) == 0 ) { i++; if ( argc - i <= 4 || argv[i][0] == '-' ) { fprintf( stderr, "Error: Remote requests file name not specified!\n\n" ); usage_enc(); return false; } arg->requestsFileName = argv[i]; i++; } #endif /*-----------------------------------------------------------------* * Option not recognized Loading Loading @@ -2086,6 +2151,10 @@ static void usage_enc( void ) fprintf( stdout, " EVS RTP Payload Format is used. Optional N represents number of frames per RTP packet\n" ); fprintf( stdout, "-scene_orientation : Scene orientation trajectory file. Only used with rtpdump output.\n" ); fprintf( stdout, "-device_orientation : Device orientation trajectory file. Only used with rtpdump output.\n" ); #ifdef FIX_1527_CMR_BITRATE_IDX fprintf( stdout, "-requests : Remote requests file, Only used with rtpdump output.\n" ); #endif fprintf( stdout, "\n" ); return; Loading