Loading apps/decoder.c +27 −41 Original line number Diff line number Diff line Loading @@ -75,17 +75,12 @@ static #define MIN_NUM_BITS_ACTIVE_FRAME 56 #define NUM_BITS_SID_IVAS_5K2 104 #ifdef SPLIT_REND_WITH_HEAD_ROT #define NUM_FRAMES_PER_SEC 50 #define MAX_FRAME_SIZE ( 48000 / NUM_FRAMES_PER_SEC ) #define MAX_FRAME_SIZE ( 48000 / IVAS_NUM_FRAMES_PER_SEC ) #else #define MAX_FRAME_SIZE ( 48000 / 50 ) #endif #define MAX_NUM_OUTPUT_CHANNELS 16 #define MAX_OUTPUT_PCM_BUFFER_SIZE ( MAX_NUM_OUTPUT_CHANNELS * MAX_FRAME_SIZE ) #ifdef SPLIT_REND_WITH_HEAD_ROT #define MAX_SPLIT_REND_BITRATE ( 768000 ) /* TODO tmu: unify with SPLIT_REND_MAX_BRATE ? */ #define MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES ( ( ( (int32_t) MAX_SPLIT_REND_BITRATE / NUM_FRAMES_PER_SEC ) + 7 ) >> 3 ) #endif #define IVAS_PUBLIC_ORIENT_TRK_NONE ( 0 ) #define IVAS_PUBLIC_ORIENT_TRK_REF ( 1 ) #define IVAS_PUBLIC_ORIENT_TRK_AVG ( 2 ) Loading Loading @@ -207,7 +202,7 @@ int main( ivas_error error = IVAS_ERR_UNKNOWN; int16_t pcmBuf[MAX_OUTPUT_PCM_BUFFER_SIZE]; #ifdef SPLIT_REND_WITH_HEAD_ROT uint8_t splitRendBitsBuf[MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES]; uint8_t splitRendBitsBuf[IVAS_MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES]; #endif RenderConfigReader *renderConfigReader = NULL; #ifdef DEBUGGING Loading Loading @@ -434,6 +429,7 @@ int main( arg.enableHeadRotation = true; } #endif if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputFormat, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.enableExternalOrientation, arg.orientation_tracking, arg.renderConfigEnabled, arg.Opt_non_diegetic_pan, arg.non_diegetic_pan_gain, arg.delayCompensationEnabled ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nConfigure failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); Loading Loading @@ -1643,7 +1639,7 @@ static ivas_error initOnFirstGoodFrame( #ifdef SPLIT_REND_WITH_HEAD_ROT if ( *hSplitRendFileReadWrite != NULL ) { IVAS_SPLIT_REND_BITS splitRendBitsZero; IVAS_SPLIT_REND_BITS_DATA splitRendBitsZero; splitRendBitsZero.bits_written = 0; splitRendBitsZero.bits_read = 0; Loading Loading @@ -1815,12 +1811,9 @@ static ivas_error decodeG192( uint16_t numObj = 0; IVAS_DEC_BS_FORMAT bsFormat = IVAS_DEC_BS_UNKOWN; IVAS_VECTOR3 Pos[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; #ifdef SPLIT_REND_WITH_HEAD_ROT IVAS_SPLIT_REND_BITS splitRendBits; SplitFileReadWrite *hSplitRendFileReadWrite; SplitFileReadWrite *splitRendWriter = NULL; #endif IsmFileWriter *ismWriters[IVAS_MAX_NUM_OBJECTS]; for ( i = 0; i < IVAS_MAX_NUM_OBJECTS; ++i ) { Loading @@ -1844,15 +1837,6 @@ static ivas_error decodeG192( reset_wmops(); #endif #ifdef SPLIT_REND_WITH_HEAD_ROT // TODO: move the init into IVAS_DEC_Configure() splitRendBits.bits_buf = splitRendBitsBuf; splitRendBits.bits_read = 0; splitRendBits.bits_written = 0; splitRendBits.buf_len = MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES; hSplitRendFileReadWrite = NULL; #endif /*------------------------------------------------------------------------------------------* * Loop for every packet (frame) of bitstream data * - Read the bitstream packet Loading Loading @@ -2003,7 +1987,7 @@ static ivas_error decodeG192( if ( ( error = IVAS_DEC_GetSamples( hIvasDec, pcmBuf, &nOutSamples #ifdef SPLIT_REND_WITH_HEAD_ROT , &splitRendBits splitRendBitsBuf #endif ) ) != IVAS_ERR_OK ) { Loading Loading @@ -2039,9 +2023,10 @@ static ivas_error decodeG192( &numObj #ifdef SPLIT_REND_WITH_HEAD_ROT , &hSplitRendFileReadWrite &splitRendWriter #endif ); if ( error != IVAS_ERR_OK ) { goto cleanup; Loading @@ -2057,26 +2042,26 @@ static ivas_error decodeG192( if ( decodedGoodFrame ) { #ifdef SPLIT_REND_WITH_HEAD_ROT if ( ( hSplitRendFileReadWrite != NULL ) && ( arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CODED ) ) if ( arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CODED || arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_PCM ) { if ( split_rend_write_bitstream_to_file( hSplitRendFileReadWrite, splitRendBits.bits_buf, &splitRendBits.bits_read, &splitRendBits.bits_written, splitRendBits.codec, splitRendBits.pose_correction ) != IVAS_ERR_OK ) IVAS_SPLIT_REND_BITS_DATA splitRendBits; if ( ( error = IVAS_DEC_GetSplitRendBits( hIvasDec, &splitRendBits ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nUnable to write to bitstream file!\n" ); exit( -1 ); } fprintf( stderr, "\nError in IVAS_DEC_SplitRendBits: %s\n", IVAS_DEC_GetErrorMessage( error ) ); goto cleanup; } else { if ( ( hSplitRendFileReadWrite != NULL ) && ( arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_PCM ) ) { if ( split_rend_write_bitstream_to_file( hSplitRendFileReadWrite, splitRendBits.bits_buf, &splitRendBits.bits_read, &splitRendBits.bits_written, splitRendBits.codec, splitRendBits.pose_correction ) != IVAS_ERR_OK ) if ( split_rend_write_bitstream_to_file( splitRendWriter, splitRendBits.bits_buf, &splitRendBits.bits_read, &splitRendBits.bits_written, splitRendBits.codec, splitRendBits.pose_correction ) != IVAS_ERR_OK ) { fprintf( stderr, "\nUnable to write to bitstream file!\n" ); exit( -1 ); fprintf( stderr, "\nError writing split rendering bitstream to file!\n" ); goto cleanup; } } #endif if ( arg.outputFormat != IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CODED ) { #endif if ( delayNumSamples < nOutSamples ) { if ( ( error = AudioFileWriter_write( afWriter, &pcmBuf[delayNumSamples * nOutChannels], nOutSamples * nOutChannels - ( delayNumSamples * nOutChannels ) ) ) != IVAS_ERR_OK ) Loading Loading @@ -2239,10 +2224,11 @@ static ivas_error decodeG192( cleanup: #ifdef SPLIT_REND_WITH_HEAD_ROT if ( hSplitRendFileReadWrite != NULL ) if ( splitRendWriter != NULL ) { split_rend_reader_writer_close( &hSplitRendFileReadWrite ); split_rend_reader_writer_close( &splitRendWriter ); } if ( afWriter != NULL ) { #endif Loading lib_com/cnst.h +0 −3 Original line number Diff line number Diff line Loading @@ -629,9 +629,6 @@ enum #define CLDFB_NO_COL_MAX_SWITCH_BFI 10 /* CLDFB resampling - max number of CLDFB col. for switching, BFI */ #define CLDFB_OVRLP_MIN_SLOTS 3 /* CLDFB resampling - minimize processing to minimum required for transition frame ACELP->TCX/HQ */ #define INV_CLDFB_BANDWIDTH ( 1.f / 800.f ) #ifdef SPLIT_REND_WITH_HEAD_ROT // VE!!!!! #define CLDFB_PLC_XF 2 /* Length of cross-fade into first good frame after frame loss in CLDFB cols. */ #endif #define L_FILT_2OVER3 12 #define L_FILT_2OVER3_LP 3 Loading lib_com/common_api_types.h +7 −1 Original line number Diff line number Diff line Loading @@ -52,6 +52,12 @@ #define RENDERER_HEAD_POSITIONS_PER_FRAME 4 #ifdef SPLIT_REND_WITH_HEAD_ROT #define IVAS_NUM_FRAMES_PER_SEC 50 #define MAX_SPLIT_REND_BITRATE 768000 #define IVAS_MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES ( ( ( (int32_t) MAX_SPLIT_REND_BITRATE / IVAS_NUM_FRAMES_PER_SEC ) + 7 ) >> 3 ) #endif /*----------------------------------------------------------------------------------* * Common API structures Loading Loading @@ -132,7 +138,7 @@ typedef struct ivas_split_rend_bits_t int32_t bits_read; IVAS_SPLIT_REND_CODEC codec; IVAS_SPLIT_REND_POSE_CORRECTION_MODE pose_correction; } ivas_split_rend_bits_t, IVAS_SPLIT_REND_BITS, *IVAS_SPLIT_REND_BITS_HANDLE; } ivas_split_rend_bits_t, IVAS_SPLIT_REND_BITS_DATA, *IVAS_SPLIT_REND_BITS_HANDLE; #endif typedef struct { Loading lib_com/ivas_cnst.h +5 −1 Original line number Diff line number Diff line Loading @@ -1604,13 +1604,17 @@ typedef enum * Split Binaural Rendering Constants *----------------------------------------------------------------------------------*/ #ifdef SPLIT_REND_WITH_HEAD_ROT #define CLDFB_PLC_XF 2 /* Length of cross-fade into first good frame after frame loss in CLDFB cols. */ #endif #define SPLIT_REND_DECOR_ALPHA 0.25f #define SPLIT_REND_MAX_YAW_ONLY_POSES 2 #define SPLIT_REND_MAX_PITCH_ONLY_POSES 2 #define SPLIT_REND_MAX_ROLL_ONLY_POSES 2 #define SPLIT_REND_MAX_ONE_AXIS_MD_POSES 2 #define MAX_EXTRAPOLATION_ANGLE (15.0f) /* this means additional 15 degrees can be extrapolated on top of MD probing poses*/ #define MAX_EXTRAPOLATION_ANGLE 15.0f /* this means additional 15 degrees can be extrapolated on top of MD probing poses*/ #define SPLIT_REND_MAX_DOF 3 Loading lib_com/ivas_prot.h +1 −1 Original line number Diff line number Diff line Loading @@ -310,7 +310,7 @@ ivas_error ivas_dec( int16_t *data /* o : output synthesis signal */ #ifdef SPLIT_REND_WITH_HEAD_ROT , IVAS_SPLIT_REND_BITS_HANDLE hSplitRendBits uint8_t *splitRendBitsBuf /* o : output split rendering bits */ #endif ); Loading Loading
apps/decoder.c +27 −41 Original line number Diff line number Diff line Loading @@ -75,17 +75,12 @@ static #define MIN_NUM_BITS_ACTIVE_FRAME 56 #define NUM_BITS_SID_IVAS_5K2 104 #ifdef SPLIT_REND_WITH_HEAD_ROT #define NUM_FRAMES_PER_SEC 50 #define MAX_FRAME_SIZE ( 48000 / NUM_FRAMES_PER_SEC ) #define MAX_FRAME_SIZE ( 48000 / IVAS_NUM_FRAMES_PER_SEC ) #else #define MAX_FRAME_SIZE ( 48000 / 50 ) #endif #define MAX_NUM_OUTPUT_CHANNELS 16 #define MAX_OUTPUT_PCM_BUFFER_SIZE ( MAX_NUM_OUTPUT_CHANNELS * MAX_FRAME_SIZE ) #ifdef SPLIT_REND_WITH_HEAD_ROT #define MAX_SPLIT_REND_BITRATE ( 768000 ) /* TODO tmu: unify with SPLIT_REND_MAX_BRATE ? */ #define MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES ( ( ( (int32_t) MAX_SPLIT_REND_BITRATE / NUM_FRAMES_PER_SEC ) + 7 ) >> 3 ) #endif #define IVAS_PUBLIC_ORIENT_TRK_NONE ( 0 ) #define IVAS_PUBLIC_ORIENT_TRK_REF ( 1 ) #define IVAS_PUBLIC_ORIENT_TRK_AVG ( 2 ) Loading Loading @@ -207,7 +202,7 @@ int main( ivas_error error = IVAS_ERR_UNKNOWN; int16_t pcmBuf[MAX_OUTPUT_PCM_BUFFER_SIZE]; #ifdef SPLIT_REND_WITH_HEAD_ROT uint8_t splitRendBitsBuf[MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES]; uint8_t splitRendBitsBuf[IVAS_MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES]; #endif RenderConfigReader *renderConfigReader = NULL; #ifdef DEBUGGING Loading Loading @@ -434,6 +429,7 @@ int main( arg.enableHeadRotation = true; } #endif if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputFormat, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.enableExternalOrientation, arg.orientation_tracking, arg.renderConfigEnabled, arg.Opt_non_diegetic_pan, arg.non_diegetic_pan_gain, arg.delayCompensationEnabled ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nConfigure failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); Loading Loading @@ -1643,7 +1639,7 @@ static ivas_error initOnFirstGoodFrame( #ifdef SPLIT_REND_WITH_HEAD_ROT if ( *hSplitRendFileReadWrite != NULL ) { IVAS_SPLIT_REND_BITS splitRendBitsZero; IVAS_SPLIT_REND_BITS_DATA splitRendBitsZero; splitRendBitsZero.bits_written = 0; splitRendBitsZero.bits_read = 0; Loading Loading @@ -1815,12 +1811,9 @@ static ivas_error decodeG192( uint16_t numObj = 0; IVAS_DEC_BS_FORMAT bsFormat = IVAS_DEC_BS_UNKOWN; IVAS_VECTOR3 Pos[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; #ifdef SPLIT_REND_WITH_HEAD_ROT IVAS_SPLIT_REND_BITS splitRendBits; SplitFileReadWrite *hSplitRendFileReadWrite; SplitFileReadWrite *splitRendWriter = NULL; #endif IsmFileWriter *ismWriters[IVAS_MAX_NUM_OBJECTS]; for ( i = 0; i < IVAS_MAX_NUM_OBJECTS; ++i ) { Loading @@ -1844,15 +1837,6 @@ static ivas_error decodeG192( reset_wmops(); #endif #ifdef SPLIT_REND_WITH_HEAD_ROT // TODO: move the init into IVAS_DEC_Configure() splitRendBits.bits_buf = splitRendBitsBuf; splitRendBits.bits_read = 0; splitRendBits.bits_written = 0; splitRendBits.buf_len = MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES; hSplitRendFileReadWrite = NULL; #endif /*------------------------------------------------------------------------------------------* * Loop for every packet (frame) of bitstream data * - Read the bitstream packet Loading Loading @@ -2003,7 +1987,7 @@ static ivas_error decodeG192( if ( ( error = IVAS_DEC_GetSamples( hIvasDec, pcmBuf, &nOutSamples #ifdef SPLIT_REND_WITH_HEAD_ROT , &splitRendBits splitRendBitsBuf #endif ) ) != IVAS_ERR_OK ) { Loading Loading @@ -2039,9 +2023,10 @@ static ivas_error decodeG192( &numObj #ifdef SPLIT_REND_WITH_HEAD_ROT , &hSplitRendFileReadWrite &splitRendWriter #endif ); if ( error != IVAS_ERR_OK ) { goto cleanup; Loading @@ -2057,26 +2042,26 @@ static ivas_error decodeG192( if ( decodedGoodFrame ) { #ifdef SPLIT_REND_WITH_HEAD_ROT if ( ( hSplitRendFileReadWrite != NULL ) && ( arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CODED ) ) if ( arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CODED || arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_PCM ) { if ( split_rend_write_bitstream_to_file( hSplitRendFileReadWrite, splitRendBits.bits_buf, &splitRendBits.bits_read, &splitRendBits.bits_written, splitRendBits.codec, splitRendBits.pose_correction ) != IVAS_ERR_OK ) IVAS_SPLIT_REND_BITS_DATA splitRendBits; if ( ( error = IVAS_DEC_GetSplitRendBits( hIvasDec, &splitRendBits ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nUnable to write to bitstream file!\n" ); exit( -1 ); } fprintf( stderr, "\nError in IVAS_DEC_SplitRendBits: %s\n", IVAS_DEC_GetErrorMessage( error ) ); goto cleanup; } else { if ( ( hSplitRendFileReadWrite != NULL ) && ( arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_PCM ) ) { if ( split_rend_write_bitstream_to_file( hSplitRendFileReadWrite, splitRendBits.bits_buf, &splitRendBits.bits_read, &splitRendBits.bits_written, splitRendBits.codec, splitRendBits.pose_correction ) != IVAS_ERR_OK ) if ( split_rend_write_bitstream_to_file( splitRendWriter, splitRendBits.bits_buf, &splitRendBits.bits_read, &splitRendBits.bits_written, splitRendBits.codec, splitRendBits.pose_correction ) != IVAS_ERR_OK ) { fprintf( stderr, "\nUnable to write to bitstream file!\n" ); exit( -1 ); fprintf( stderr, "\nError writing split rendering bitstream to file!\n" ); goto cleanup; } } #endif if ( arg.outputFormat != IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CODED ) { #endif if ( delayNumSamples < nOutSamples ) { if ( ( error = AudioFileWriter_write( afWriter, &pcmBuf[delayNumSamples * nOutChannels], nOutSamples * nOutChannels - ( delayNumSamples * nOutChannels ) ) ) != IVAS_ERR_OK ) Loading Loading @@ -2239,10 +2224,11 @@ static ivas_error decodeG192( cleanup: #ifdef SPLIT_REND_WITH_HEAD_ROT if ( hSplitRendFileReadWrite != NULL ) if ( splitRendWriter != NULL ) { split_rend_reader_writer_close( &hSplitRendFileReadWrite ); split_rend_reader_writer_close( &splitRendWriter ); } if ( afWriter != NULL ) { #endif Loading
lib_com/cnst.h +0 −3 Original line number Diff line number Diff line Loading @@ -629,9 +629,6 @@ enum #define CLDFB_NO_COL_MAX_SWITCH_BFI 10 /* CLDFB resampling - max number of CLDFB col. for switching, BFI */ #define CLDFB_OVRLP_MIN_SLOTS 3 /* CLDFB resampling - minimize processing to minimum required for transition frame ACELP->TCX/HQ */ #define INV_CLDFB_BANDWIDTH ( 1.f / 800.f ) #ifdef SPLIT_REND_WITH_HEAD_ROT // VE!!!!! #define CLDFB_PLC_XF 2 /* Length of cross-fade into first good frame after frame loss in CLDFB cols. */ #endif #define L_FILT_2OVER3 12 #define L_FILT_2OVER3_LP 3 Loading
lib_com/common_api_types.h +7 −1 Original line number Diff line number Diff line Loading @@ -52,6 +52,12 @@ #define RENDERER_HEAD_POSITIONS_PER_FRAME 4 #ifdef SPLIT_REND_WITH_HEAD_ROT #define IVAS_NUM_FRAMES_PER_SEC 50 #define MAX_SPLIT_REND_BITRATE 768000 #define IVAS_MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES ( ( ( (int32_t) MAX_SPLIT_REND_BITRATE / IVAS_NUM_FRAMES_PER_SEC ) + 7 ) >> 3 ) #endif /*----------------------------------------------------------------------------------* * Common API structures Loading Loading @@ -132,7 +138,7 @@ typedef struct ivas_split_rend_bits_t int32_t bits_read; IVAS_SPLIT_REND_CODEC codec; IVAS_SPLIT_REND_POSE_CORRECTION_MODE pose_correction; } ivas_split_rend_bits_t, IVAS_SPLIT_REND_BITS, *IVAS_SPLIT_REND_BITS_HANDLE; } ivas_split_rend_bits_t, IVAS_SPLIT_REND_BITS_DATA, *IVAS_SPLIT_REND_BITS_HANDLE; #endif typedef struct { Loading
lib_com/ivas_cnst.h +5 −1 Original line number Diff line number Diff line Loading @@ -1604,13 +1604,17 @@ typedef enum * Split Binaural Rendering Constants *----------------------------------------------------------------------------------*/ #ifdef SPLIT_REND_WITH_HEAD_ROT #define CLDFB_PLC_XF 2 /* Length of cross-fade into first good frame after frame loss in CLDFB cols. */ #endif #define SPLIT_REND_DECOR_ALPHA 0.25f #define SPLIT_REND_MAX_YAW_ONLY_POSES 2 #define SPLIT_REND_MAX_PITCH_ONLY_POSES 2 #define SPLIT_REND_MAX_ROLL_ONLY_POSES 2 #define SPLIT_REND_MAX_ONE_AXIS_MD_POSES 2 #define MAX_EXTRAPOLATION_ANGLE (15.0f) /* this means additional 15 degrees can be extrapolated on top of MD probing poses*/ #define MAX_EXTRAPOLATION_ANGLE 15.0f /* this means additional 15 degrees can be extrapolated on top of MD probing poses*/ #define SPLIT_REND_MAX_DOF 3 Loading
lib_com/ivas_prot.h +1 −1 Original line number Diff line number Diff line Loading @@ -310,7 +310,7 @@ ivas_error ivas_dec( int16_t *data /* o : output synthesis signal */ #ifdef SPLIT_REND_WITH_HEAD_ROT , IVAS_SPLIT_REND_BITS_HANDLE hSplitRendBits uint8_t *splitRendBitsBuf /* o : output split rendering bits */ #endif ); Loading