From 1f106a026f0b868e27dffe30d52aa88f266063af Mon Sep 17 00:00:00 2001 From: Jouni Paulus Date: Thu, 25 May 2023 10:31:50 +0200 Subject: [PATCH] fix memory leak in specific MASA encoding conditions by re-using the existing spherical indexing struct. switch: FIX_505_MASA_SPHGRID_REUSE. --- lib_com/options.h | 3 +++ lib_enc/ivas_masa_enc.c | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/lib_com/options.h b/lib_com/options.h index deb91f1805..2d1ac97a23 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -210,6 +210,9 @@ #define FIX_I503_ASAN_ERROR_IND_LIST /* VA: fix issue #503: address sanitizer error with IND_LIST_DYN */ #define FIX_473_JITTER_NONDIEGETIC_PANNING /* FhG,Orange: add missing non-diegetic panning to JITTER */ +#ifdef HR_METADATA +#define FIX_505_MASA_SPHGRID_REUSE /* Nokia: Fix issue #505: MASA spherical grid reuse fix */ +#endif /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ diff --git a/lib_enc/ivas_masa_enc.c b/lib_enc/ivas_masa_enc.c index 0c768f1a17..e62a38f380 100644 --- a/lib_enc/ivas_masa_enc.c +++ b/lib_enc/ivas_masa_enc.c @@ -65,6 +65,10 @@ static void average_masa_metadata( MASA_METADATA_FRAME *masaMetadata, float ener #ifdef HR_METADATA , const SPHERICAL_GRID_DATA *sphGrid +#ifdef FIX_505_MASA_SPHGRID_REUSE + , + const uint8_t useSphGrid +#endif #endif ); @@ -505,7 +509,9 @@ ivas_error ivas_masa_enc_config( #endif ivas_error error; #ifdef HR_METADATA +#ifndef FIX_505_MASA_SPHGRID_REUSE SPHERICAL_GRID_DATA *sphGrid; +#endif #endif error = IVAS_ERR_OK; @@ -528,6 +534,7 @@ ivas_error ivas_masa_enc_config( if ( hMasa->data.sync_state.frame_mode == MASA_FRAME_1SF && hMasa->data.sync_state.prev_offset != 0 ) { #ifdef HR_METADATA +#ifndef FIX_505_MASA_SPHGRID_REUSE if ( ( sphGrid = (SPHERICAL_GRID_DATA *) malloc( sizeof( SPHERICAL_GRID_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA spherical grid\n" ) ); @@ -541,13 +548,19 @@ ivas_error ivas_masa_enc_config( { sphGrid->no_theta = 0; } +#endif #endif /* average over sub-frames */ average_masa_metadata( &( hMasa->masaMetadata ), hMasa->data.energy #ifdef HR_METADATA , +#ifdef FIX_505_MASA_SPHGRID_REUSE + &( hMasa->data.Sph_Grid16 ), + ivas_total_brate == IVAS_512k ? TRUE : FALSE +#else sphGrid +#endif #endif ); } @@ -1826,6 +1839,10 @@ static void average_masa_metadata( #ifdef HR_METADATA , const SPHERICAL_GRID_DATA *Sph_Grid16 +#ifdef FIX_505_MASA_SPHGRID_REUSE + , + const uint8_t useSphGrid +#endif #endif ) { @@ -1875,7 +1892,11 @@ static void average_masa_metadata( hMeta->directional_meta[i].azimuth[j][k] = atan2f( y_sum, x_sum ) / EVS_PI * 180.0f; hMeta->directional_meta[i].elevation[j][k] = atan2f( z_sum, sqrtf( x_sum * x_sum + y_sum * y_sum ) ) / EVS_PI * 180.0f; #ifdef HR_METADATA +#ifdef FIX_505_MASA_SPHGRID_REUSE + if ( useSphGrid == TRUE ) +#else if ( Sph_Grid16->no_theta > 0 ) +#endif { hMeta->directional_meta[i].spherical_index[j][k] = index_theta_phi_16( &( hMeta->directional_meta[i].elevation[j][k] ), &( hMeta->directional_meta[i].azimuth[j][k] ), Sph_Grid16 ); -- GitLab