diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c index 044eebd1e649442e8db00f6e94ee98609e83477f..62e1479ec91cfd7183533cae34442ab552e5710c 100644 --- a/lib_dec/ivas_dec.c +++ b/lib_dec/ivas_dec.c @@ -179,6 +179,19 @@ ivas_error ivas_dec( if ( st_ivas->bfi && st_ivas->ini_frame == 0 ) { +#ifdef FIX_264_AUDIO_CHANNELS_TO_HEAP + for ( n = 0; n < nchan_out; n++ ) + { + /* note: these are intra-frame heap memories */ + if ( ( st_ivas->p_output_f[n] = (float *) malloc( ( 48000 / FRAMES_PER_SEC ) * sizeof( float ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for floating-point output audio buffer!\n" ) ); + } + output[n] = st_ivas->p_output_f[n]; + p_output[n] = output[n]; + } +#endif + /* zero output when first frame(s) is lost */ for ( n = 0; n < nchan_out; n++ ) { @@ -1255,6 +1268,17 @@ ivas_error ivas_dec( st_ivas->last_ivas_format = st_ivas->ivas_format; #endif +#ifdef FIX_264_AUDIO_CHANNELS_TO_HEAP + if ( st_ivas->bfi && st_ivas->ini_frame == 0 ) + { + for ( n = 0; n < nchan_out; n++ ) + { + free( st_ivas->p_output_f[n] ); + st_ivas->p_output_f[n] = NULL; + } + } +#endif + #ifdef DEBUG_MODE_INFO dbgwrite( &st_ivas->bfi, sizeof( int16_t ), 1, output_frame, "res/bfi" ); dbgwrite( &st_ivas->BER_detect, sizeof( int16_t ), 1, output_frame, "res/BER_detect" ); diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 74ca4b9489eaff1e90123e185ff609572951bc6f..3dce01a6fcbb9879488881453a5f3adb104ebbe3 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -4141,13 +4141,17 @@ static int16_t getCldfbRendFlag( static void closeSplitRend( SPLIT_REND_WRAPPER *pSplitRendWrapper, IVAS_REND_AudioBuffer *pSplitRendEncBuffer ) { ivas_split_renderer_close( pSplitRendWrapper ); + if ( pSplitRendEncBuffer->data != NULL ) { free( pSplitRendEncBuffer->data ); pSplitRendEncBuffer->data = NULL; } + pSplitRendEncBuffer->config.numChannels = 0; pSplitRendEncBuffer->config.numSamplesPerChannel = 0; + + return; } #endif @@ -8253,13 +8257,13 @@ static ivas_error renderInputMasa( break; /* ToDo */ // #ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG - // case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_IR: - // case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_REVERB: + // case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_IR: + // case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_REVERB: // #else - // case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM: + // case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM: // #endif - // renderMasaToBinauralRoom( masaInput, outConfig, outAudio ); - // break; + // renderMasaToBinauralRoom( masaInput, outConfig, outAudio ); + // break; #ifdef SPLIT_REND_WITH_HEAD_ROT_PARAMBIN case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CODED: case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM: @@ -8701,7 +8705,7 @@ ivas_error IVAS_REND_GetSamples( &bits, Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, - ( const int16_t )( ( BINAURAL_MAXBANDS * hIvasRend->sampleRateOut ) / 48000 ), + (const int16_t) ( ( BINAURAL_MAXBANDS * hIvasRend->sampleRateOut ) / 48000 ), tmpBinaural, 1, td_input,