Loading apps/decoder.c +4 −0 Original line number Diff line number Diff line Loading @@ -1784,8 +1784,12 @@ static ivas_error initOnFirstGoodFrame( } } #ifdef CODE_IMPROVEMENTS int16_t *zeroBuf = calloc( pcmFrameSize, sizeof( int16_t ) ); #else int16_t *zeroBuf = malloc( pcmFrameSize * sizeof( int16_t ) ); memset( zeroBuf, 0, pcmFrameSize * sizeof( int16_t ) ); #endif for ( int16_t i = 0; i < numInitialBadFrames; ++i ) { Loading lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -159,6 +159,7 @@ #define NONBE_1200_ISM_JBM_BRATE_SW_FLUSH /* VA: issue 1200: fix bug in renderer flush in ISM JBM bitrate switching */ #define NONBE_1293_CRASH_FIRST_FRAME_LOST /* VA: issue 1293: fix G.192 decoder crash when first frame is lost */ #define FIX_1384_MSAN_stereo_tcx_core_enc /* VA: issue 1384: fix use-of-uninitialized value in stereo_tcx_core_enc() */ #define CODE_IMPROVEMENTS // object-editing feature porting #define OBJ_EDITING_API /* object editing changes related to the API */ Loading lib_debug/debug.c +1 −1 Original line number Diff line number Diff line Loading @@ -836,7 +836,7 @@ int16_t make_dirs( const char *const pathname ) if ( sep != 0 ) { temp = calloc( 1, strlen( pathname ) + 1 ); temp = calloc( strlen( pathname ) + 1, sizeof( char ) ); p = pathname; while ( ( p = strchr( p, sep ) ) != NULL ) { Loading lib_rend/ivas_rom_rend_fx.c +6 −0 Original line number Diff line number Diff line Loading @@ -81,9 +81,15 @@ const Word32 ap_lattice_coeffs_2_fx[132] /* Q31 */ = { 1360843264, 1462880896, const Word32 ap_lattice_coeffs_3_fx[66] /* Q31 */ = { 1360843264, 1462880896, -106124344, 615715776, 313579872, 290773568, -880779712, -444026592, -1410828032, -218497872, 936944960, 729753600, -282142848, -1661606912, -647739072, 703431872, 713452032, 442076704, 1541038592, -1186205568, -322414592, 117158120, 514363136, -1392593792, -1550156800, 406684000, 146426176, 13348758, 165409920, 83060376, 909276800, -233341280, 927820288, -890434752, 596656832, 898691840, 167097856, -607873152, -766668864, 9951439, -950562176, -799540352, 866157440, 521887904, 675097984, 954584384, 746287104, 1065244224, 232804400, 1007990144, -365686400, 700745408, 369704352, 945610048, 125449552, 729442240, -418684160, 1054884800, -604078592, -92599496, -1036132928, -719417728, -721895936, 421913952, -353525216, 950242176}; const Word32 * const ap_lattice_coeffs_fx[DIRAC_DECORR_NUM_SPLIT_BANDS] = { #ifdef CODE_IMPROVEMENTS ap_lattice_coeffs_1_fx, ap_lattice_coeffs_2_fx, ap_lattice_coeffs_3_fx, #else &ap_lattice_coeffs_1_fx[0], &ap_lattice_coeffs_2_fx[0], &ap_lattice_coeffs_3_fx[0], #endif }; const Word16 ap_split_frequencies_fx[DIRAC_DECORR_NUM_SPLIT_BANDS + 1]/*Q14*/ = { Loading lib_rend/lib_rend_fx.c +85 −9 Original line number Diff line number Diff line Loading @@ -3974,31 +3974,82 @@ static ivas_error getConstInputById( return IVAS_ERR_OK; } #ifdef CODE_IMPROVEMENTS static void *getInputByIndex_fx( void *inputsArray, const size_t index, const IVAS_REND_AudioConfigType inputType ) { SWITCH( inputType ) { case IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED: return (input_mc *) inputsArray + index; case IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS: return (input_sba *) inputsArray + index; case IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED: return (input_ism *) inputsArray + index; case IVAS_REND_AUDIO_CONFIG_TYPE_MASA: return (input_masa *) inputsArray + index; default: break; } /* this should be unreachable */ assert( 0 ); /* include a final return to make the linter happy and avoid problems with wmc_tool (see #1355) */ return NULL; } #endif static ivas_error findFreeInputSlot_fx( #ifdef CODE_IMPROVEMENTS void *inputs, const IVAS_REND_AudioConfigType inputType, #else const void *inputs, const Word32 inputStructSize, const int32_t inputStructSize, #endif const Word32 maxInputs, Word32 *inputIndex ) { #ifdef CODE_IMPROVEMENTS /* Using a void pointer and a separately provided type is a hack for this function to be reusable for arrays of any input type (input_ism, input_mc, input_sba, input_masa). Assumptions: - input_base is always the first member in the input struct - memory alignments of original input type and input_base are the same */ #else /* Using a void pointer and a separately provided size is a hack for this function to be reusable for arrays of any input type (input_ism, input_mc, input_sba, input_masa). Assumptions: - input_base is always the first member in the input struct - provided size is correct */ #endif Word32 i; bool canAddInput; const UWord8 *pByte; #ifndef CODE_IMPROVEMENTS const uint8_t *pByte; #endif const input_base *pInputBase; canAddInput = false; move16(); /* Find first unused input in array */ FOR( ( i = 0, pByte = inputs ); i < maxInputs; ( ++i, pByte += inputStructSize ) ) #ifdef CODE_IMPROVEMENTS for ( i = 0; i < maxInputs; ++i ) #else for ( i = 0, pByte = inputs; i < maxInputs; ++i, pByte += inputStructSize ) #endif { #ifdef CODE_IMPROVEMENTS pInputBase = (const input_base *) getInputByIndex_fx( inputs, i, inputType ); #else pInputBase = (const input_base *) pByte; #endif IF( EQ_32( pInputBase->inConfig, IVAS_AUDIO_CONFIG_INVALID ) ) { Loading Loading @@ -4175,7 +4226,11 @@ ivas_error IVAS_REND_AddInput_fx( ivas_error error; Word32 maxNumInputsOfType; void *inputsArray; #ifdef CODE_IMPROVEMENTS IVAS_REND_AudioConfigType inputType; #else Word32 inputStructSize; #endif ivas_error ( *activateInput )( void *, AUDIO_CONFIG, IVAS_REND_InputId, RENDER_CONFIG_DATA *, hrtf_handles *hrtfs ); Word32 inputIndex; Loading @@ -4198,12 +4253,19 @@ ivas_error IVAS_REND_AddInput_fx( } #ifdef CODE_IMPROVEMENTS inputType = getAudioConfigType( inConfig ); SWITCH( inputType ) #else SWITCH( getAudioConfigType( inConfig ) ) #endif { case IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED: maxNumInputsOfType = RENDERER_MAX_ISM_INPUTS; inputsArray = hIvasRend->inputsIsm; #ifndef CODE_IMPROVEMENTS inputStructSize = sizeof( *hIvasRend->inputsIsm ); #endif activateInput = setRendInputActiveIsm; move32(); move32(); Loading @@ -4211,7 +4273,9 @@ ivas_error IVAS_REND_AddInput_fx( case IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED: maxNumInputsOfType = RENDERER_MAX_MC_INPUTS; inputsArray = hIvasRend->inputsMc; #ifndef CODE_IMPROVEMENTS inputStructSize = sizeof( *hIvasRend->inputsMc ); #endif activateInput = setRendInputActiveMc; move32(); move32(); Loading @@ -4219,7 +4283,9 @@ ivas_error IVAS_REND_AddInput_fx( case IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS: maxNumInputsOfType = RENDERER_MAX_SBA_INPUTS; inputsArray = hIvasRend->inputsSba; #ifndef CODE_IMPROVEMENTS inputStructSize = sizeof( *hIvasRend->inputsSba ); #endif activateInput = setRendInputActiveSba; move32(); move32(); Loading @@ -4227,7 +4293,9 @@ ivas_error IVAS_REND_AddInput_fx( case IVAS_REND_AUDIO_CONFIG_TYPE_MASA: maxNumInputsOfType = RENDERER_MAX_MASA_INPUTS; inputsArray = hIvasRend->inputsMasa; #ifndef CODE_IMPROVEMENTS inputStructSize = sizeof( *hIvasRend->inputsMasa ); #endif activateInput = setRendInputActiveMasa; move32(); move32(); Loading @@ -4237,14 +4305,22 @@ ivas_error IVAS_REND_AddInput_fx( } /* Find first free input in array corresponding to input type */ #ifdef CODE_IMPROVEMENTS IF( NE_32( ( error = findFreeInputSlot_fx( inputsArray, inputType, maxNumInputsOfType, &inputIndex ) ), IVAS_ERR_OK ) ) #else IF( NE_32( ( error = findFreeInputSlot_fx( inputsArray, inputStructSize, maxNumInputsOfType, &inputIndex ) ), IVAS_ERR_OK ) ) #endif { return error; } *inputId = makeInputId( inConfig, inputIndex ); move16(); #ifdef CODE_IMPROVEMENTS IF( NE_32( ( error = activateInput( getInputByIndex_fx( inputsArray, inputIndex, inputType ), inConfig, *inputId, hIvasRend->hRendererConfig, &hIvasRend->hHrtfs ) ), IVAS_ERR_OK ) ) #else IF( NE_32( ( error = activateInput( (uint8_t *) inputsArray + inputStructSize * inputIndex, inConfig, *inputId, hIvasRend->hRendererConfig, &hIvasRend->hHrtfs ) ), IVAS_ERR_OK ) ) #endif { return error; } Loading Loading
apps/decoder.c +4 −0 Original line number Diff line number Diff line Loading @@ -1784,8 +1784,12 @@ static ivas_error initOnFirstGoodFrame( } } #ifdef CODE_IMPROVEMENTS int16_t *zeroBuf = calloc( pcmFrameSize, sizeof( int16_t ) ); #else int16_t *zeroBuf = malloc( pcmFrameSize * sizeof( int16_t ) ); memset( zeroBuf, 0, pcmFrameSize * sizeof( int16_t ) ); #endif for ( int16_t i = 0; i < numInitialBadFrames; ++i ) { Loading
lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -159,6 +159,7 @@ #define NONBE_1200_ISM_JBM_BRATE_SW_FLUSH /* VA: issue 1200: fix bug in renderer flush in ISM JBM bitrate switching */ #define NONBE_1293_CRASH_FIRST_FRAME_LOST /* VA: issue 1293: fix G.192 decoder crash when first frame is lost */ #define FIX_1384_MSAN_stereo_tcx_core_enc /* VA: issue 1384: fix use-of-uninitialized value in stereo_tcx_core_enc() */ #define CODE_IMPROVEMENTS // object-editing feature porting #define OBJ_EDITING_API /* object editing changes related to the API */ Loading
lib_debug/debug.c +1 −1 Original line number Diff line number Diff line Loading @@ -836,7 +836,7 @@ int16_t make_dirs( const char *const pathname ) if ( sep != 0 ) { temp = calloc( 1, strlen( pathname ) + 1 ); temp = calloc( strlen( pathname ) + 1, sizeof( char ) ); p = pathname; while ( ( p = strchr( p, sep ) ) != NULL ) { Loading
lib_rend/ivas_rom_rend_fx.c +6 −0 Original line number Diff line number Diff line Loading @@ -81,9 +81,15 @@ const Word32 ap_lattice_coeffs_2_fx[132] /* Q31 */ = { 1360843264, 1462880896, const Word32 ap_lattice_coeffs_3_fx[66] /* Q31 */ = { 1360843264, 1462880896, -106124344, 615715776, 313579872, 290773568, -880779712, -444026592, -1410828032, -218497872, 936944960, 729753600, -282142848, -1661606912, -647739072, 703431872, 713452032, 442076704, 1541038592, -1186205568, -322414592, 117158120, 514363136, -1392593792, -1550156800, 406684000, 146426176, 13348758, 165409920, 83060376, 909276800, -233341280, 927820288, -890434752, 596656832, 898691840, 167097856, -607873152, -766668864, 9951439, -950562176, -799540352, 866157440, 521887904, 675097984, 954584384, 746287104, 1065244224, 232804400, 1007990144, -365686400, 700745408, 369704352, 945610048, 125449552, 729442240, -418684160, 1054884800, -604078592, -92599496, -1036132928, -719417728, -721895936, 421913952, -353525216, 950242176}; const Word32 * const ap_lattice_coeffs_fx[DIRAC_DECORR_NUM_SPLIT_BANDS] = { #ifdef CODE_IMPROVEMENTS ap_lattice_coeffs_1_fx, ap_lattice_coeffs_2_fx, ap_lattice_coeffs_3_fx, #else &ap_lattice_coeffs_1_fx[0], &ap_lattice_coeffs_2_fx[0], &ap_lattice_coeffs_3_fx[0], #endif }; const Word16 ap_split_frequencies_fx[DIRAC_DECORR_NUM_SPLIT_BANDS + 1]/*Q14*/ = { Loading
lib_rend/lib_rend_fx.c +85 −9 Original line number Diff line number Diff line Loading @@ -3974,31 +3974,82 @@ static ivas_error getConstInputById( return IVAS_ERR_OK; } #ifdef CODE_IMPROVEMENTS static void *getInputByIndex_fx( void *inputsArray, const size_t index, const IVAS_REND_AudioConfigType inputType ) { SWITCH( inputType ) { case IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED: return (input_mc *) inputsArray + index; case IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS: return (input_sba *) inputsArray + index; case IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED: return (input_ism *) inputsArray + index; case IVAS_REND_AUDIO_CONFIG_TYPE_MASA: return (input_masa *) inputsArray + index; default: break; } /* this should be unreachable */ assert( 0 ); /* include a final return to make the linter happy and avoid problems with wmc_tool (see #1355) */ return NULL; } #endif static ivas_error findFreeInputSlot_fx( #ifdef CODE_IMPROVEMENTS void *inputs, const IVAS_REND_AudioConfigType inputType, #else const void *inputs, const Word32 inputStructSize, const int32_t inputStructSize, #endif const Word32 maxInputs, Word32 *inputIndex ) { #ifdef CODE_IMPROVEMENTS /* Using a void pointer and a separately provided type is a hack for this function to be reusable for arrays of any input type (input_ism, input_mc, input_sba, input_masa). Assumptions: - input_base is always the first member in the input struct - memory alignments of original input type and input_base are the same */ #else /* Using a void pointer and a separately provided size is a hack for this function to be reusable for arrays of any input type (input_ism, input_mc, input_sba, input_masa). Assumptions: - input_base is always the first member in the input struct - provided size is correct */ #endif Word32 i; bool canAddInput; const UWord8 *pByte; #ifndef CODE_IMPROVEMENTS const uint8_t *pByte; #endif const input_base *pInputBase; canAddInput = false; move16(); /* Find first unused input in array */ FOR( ( i = 0, pByte = inputs ); i < maxInputs; ( ++i, pByte += inputStructSize ) ) #ifdef CODE_IMPROVEMENTS for ( i = 0; i < maxInputs; ++i ) #else for ( i = 0, pByte = inputs; i < maxInputs; ++i, pByte += inputStructSize ) #endif { #ifdef CODE_IMPROVEMENTS pInputBase = (const input_base *) getInputByIndex_fx( inputs, i, inputType ); #else pInputBase = (const input_base *) pByte; #endif IF( EQ_32( pInputBase->inConfig, IVAS_AUDIO_CONFIG_INVALID ) ) { Loading Loading @@ -4175,7 +4226,11 @@ ivas_error IVAS_REND_AddInput_fx( ivas_error error; Word32 maxNumInputsOfType; void *inputsArray; #ifdef CODE_IMPROVEMENTS IVAS_REND_AudioConfigType inputType; #else Word32 inputStructSize; #endif ivas_error ( *activateInput )( void *, AUDIO_CONFIG, IVAS_REND_InputId, RENDER_CONFIG_DATA *, hrtf_handles *hrtfs ); Word32 inputIndex; Loading @@ -4198,12 +4253,19 @@ ivas_error IVAS_REND_AddInput_fx( } #ifdef CODE_IMPROVEMENTS inputType = getAudioConfigType( inConfig ); SWITCH( inputType ) #else SWITCH( getAudioConfigType( inConfig ) ) #endif { case IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED: maxNumInputsOfType = RENDERER_MAX_ISM_INPUTS; inputsArray = hIvasRend->inputsIsm; #ifndef CODE_IMPROVEMENTS inputStructSize = sizeof( *hIvasRend->inputsIsm ); #endif activateInput = setRendInputActiveIsm; move32(); move32(); Loading @@ -4211,7 +4273,9 @@ ivas_error IVAS_REND_AddInput_fx( case IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED: maxNumInputsOfType = RENDERER_MAX_MC_INPUTS; inputsArray = hIvasRend->inputsMc; #ifndef CODE_IMPROVEMENTS inputStructSize = sizeof( *hIvasRend->inputsMc ); #endif activateInput = setRendInputActiveMc; move32(); move32(); Loading @@ -4219,7 +4283,9 @@ ivas_error IVAS_REND_AddInput_fx( case IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS: maxNumInputsOfType = RENDERER_MAX_SBA_INPUTS; inputsArray = hIvasRend->inputsSba; #ifndef CODE_IMPROVEMENTS inputStructSize = sizeof( *hIvasRend->inputsSba ); #endif activateInput = setRendInputActiveSba; move32(); move32(); Loading @@ -4227,7 +4293,9 @@ ivas_error IVAS_REND_AddInput_fx( case IVAS_REND_AUDIO_CONFIG_TYPE_MASA: maxNumInputsOfType = RENDERER_MAX_MASA_INPUTS; inputsArray = hIvasRend->inputsMasa; #ifndef CODE_IMPROVEMENTS inputStructSize = sizeof( *hIvasRend->inputsMasa ); #endif activateInput = setRendInputActiveMasa; move32(); move32(); Loading @@ -4237,14 +4305,22 @@ ivas_error IVAS_REND_AddInput_fx( } /* Find first free input in array corresponding to input type */ #ifdef CODE_IMPROVEMENTS IF( NE_32( ( error = findFreeInputSlot_fx( inputsArray, inputType, maxNumInputsOfType, &inputIndex ) ), IVAS_ERR_OK ) ) #else IF( NE_32( ( error = findFreeInputSlot_fx( inputsArray, inputStructSize, maxNumInputsOfType, &inputIndex ) ), IVAS_ERR_OK ) ) #endif { return error; } *inputId = makeInputId( inConfig, inputIndex ); move16(); #ifdef CODE_IMPROVEMENTS IF( NE_32( ( error = activateInput( getInputByIndex_fx( inputsArray, inputIndex, inputType ), inConfig, *inputId, hIvasRend->hRendererConfig, &hIvasRend->hHrtfs ) ), IVAS_ERR_OK ) ) #else IF( NE_32( ( error = activateInput( (uint8_t *) inputsArray + inputStructSize * inputIndex, inConfig, *inputId, hIvasRend->hRendererConfig, &hIvasRend->hHrtfs ) ), IVAS_ERR_OK ) ) #endif { return error; } Loading