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 +7 −0 Original line number Diff line number Diff line Loading @@ -236,6 +236,9 @@ int main( 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 @@ -627,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 apps/encoder_fmtsw.c +7 −0 Original line number Diff line number Diff line Loading @@ -338,6 +338,9 @@ int encoder_main( 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 @@ -727,7 +730,11 @@ int encoder_main( if ( arg.rtpdumpOutput && init_RtpWriter ) { #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 lib_com/basop_util.c +60 −0 Original line number Diff line number Diff line Loading @@ -714,6 +714,66 @@ Word16 getScaleFactor16( /* o: measured headroom in range [ return i; } #ifdef OPTIMIZE_FFT_STACK /* o: measured headroom in range [0..31], 0 if all x[i] == 0 */ Word16 getScaleFactor32_cmplx( cmplx *x, /* i: array containing 32-bit data */ const Word16 len_x /* i: length of the array to scan */ ) { Word16 i, i_min, i_max, i_re, i_im; Word32 x_min_re, x_max_re, x_min_im, x_max_im; x_max_re = 0; move32(); x_min_re = 0; move32(); x_max_im = 0; move32(); x_min_im = 0; move32(); FOR( i = 0; i < len_x; i++ ) { if ( x[i].re >= 0 ) x_max_re = L_max( x_max_re, x[i].re ); if ( x[i].re < 0 ) x_min_re = L_min( x_min_re, x[i].re ); if ( x[i].im >= 0 ) x_max_im = L_max( x_max_im, x[i].im ); if ( x[i].im < 0 ) x_min_im = L_min( x_min_im, x[i].im ); } i_max = 0x20; move16(); i_min = 0x20; move16(); if ( x_max_re != 0 ) i_max = norm_l( x_max_re ); if ( x_min_re != 0 ) i_min = norm_l( x_min_re ); i_re = s_and( s_min( i_max, i_min ), 0x1F ); i_max = 0x20; move16(); i_min = 0x20; move16(); if ( x_max_im != 0 ) i_max = norm_l( x_max_im ); if ( x_min_im != 0 ) i_min = norm_l( x_min_im ); i_im = s_and( s_min( i_max, i_min ), 0x1F ); return s_min( i_re, i_im ); } #endif /********************************************************************/ /*! Loading lib_com/basop_util.h +12 −3 Original line number Diff line number Diff line Loading @@ -216,10 +216,19 @@ void BASOP_Util_Sqrt_InvSqrt_MantExp( Word16 mantissa, /*!< mantissa */ and -32768 <= x <= -16384 for negative x */ Word16 getScaleFactor16( /* o: measured headroom in range [0..15], 0 if all x[i] == 0 */ /* o: measured headroom in range [0..15], 0 if all x[i] == 0 */ Word16 getScaleFactor16( const Word16 *x, /* i: array containing 16-bit data */ const Word16 len_x ); /* i: length of the array to scan */ #ifdef OPTIMIZE_FFT_STACK /* o: measured headroom in range [0..31], 0 if all x[i] == 0 */ Word16 getScaleFactor32_cmplx( cmplx *x, /* i: array containing 32-bit data */ const Word16 len_x /* i: length of the array to scan */ ); #endif /********************************************************************/ /*! \brief Calculates the scalefactor needed to normalize input array Loading 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 +7 −0 Original line number Diff line number Diff line Loading @@ -236,6 +236,9 @@ int main( 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 @@ -627,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
apps/encoder_fmtsw.c +7 −0 Original line number Diff line number Diff line Loading @@ -338,6 +338,9 @@ int encoder_main( 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 @@ -727,7 +730,11 @@ int encoder_main( if ( arg.rtpdumpOutput && init_RtpWriter ) { #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
lib_com/basop_util.c +60 −0 Original line number Diff line number Diff line Loading @@ -714,6 +714,66 @@ Word16 getScaleFactor16( /* o: measured headroom in range [ return i; } #ifdef OPTIMIZE_FFT_STACK /* o: measured headroom in range [0..31], 0 if all x[i] == 0 */ Word16 getScaleFactor32_cmplx( cmplx *x, /* i: array containing 32-bit data */ const Word16 len_x /* i: length of the array to scan */ ) { Word16 i, i_min, i_max, i_re, i_im; Word32 x_min_re, x_max_re, x_min_im, x_max_im; x_max_re = 0; move32(); x_min_re = 0; move32(); x_max_im = 0; move32(); x_min_im = 0; move32(); FOR( i = 0; i < len_x; i++ ) { if ( x[i].re >= 0 ) x_max_re = L_max( x_max_re, x[i].re ); if ( x[i].re < 0 ) x_min_re = L_min( x_min_re, x[i].re ); if ( x[i].im >= 0 ) x_max_im = L_max( x_max_im, x[i].im ); if ( x[i].im < 0 ) x_min_im = L_min( x_min_im, x[i].im ); } i_max = 0x20; move16(); i_min = 0x20; move16(); if ( x_max_re != 0 ) i_max = norm_l( x_max_re ); if ( x_min_re != 0 ) i_min = norm_l( x_min_re ); i_re = s_and( s_min( i_max, i_min ), 0x1F ); i_max = 0x20; move16(); i_min = 0x20; move16(); if ( x_max_im != 0 ) i_max = norm_l( x_max_im ); if ( x_min_im != 0 ) i_min = norm_l( x_min_im ); i_im = s_and( s_min( i_max, i_min ), 0x1F ); return s_min( i_re, i_im ); } #endif /********************************************************************/ /*! Loading
lib_com/basop_util.h +12 −3 Original line number Diff line number Diff line Loading @@ -216,10 +216,19 @@ void BASOP_Util_Sqrt_InvSqrt_MantExp( Word16 mantissa, /*!< mantissa */ and -32768 <= x <= -16384 for negative x */ Word16 getScaleFactor16( /* o: measured headroom in range [0..15], 0 if all x[i] == 0 */ /* o: measured headroom in range [0..15], 0 if all x[i] == 0 */ Word16 getScaleFactor16( const Word16 *x, /* i: array containing 16-bit data */ const Word16 len_x ); /* i: length of the array to scan */ #ifdef OPTIMIZE_FFT_STACK /* o: measured headroom in range [0..31], 0 if all x[i] == 0 */ Word16 getScaleFactor32_cmplx( cmplx *x, /* i: array containing 32-bit data */ const Word16 len_x /* i: length of the array to scan */ ); #endif /********************************************************************/ /*! \brief Calculates the scalefactor needed to normalize input array Loading