Commit 1f106a02 authored by Jouni Paulus's avatar Jouni Paulus
Browse files

fix memory leak in specific MASA encoding conditions by re-using the existing...

fix memory leak in specific MASA encoding conditions by re-using the existing spherical indexing struct. switch: FIX_505_MASA_SPHGRID_REUSE.
parent 639d93d1
Loading
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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 */

+21 −0
Original line number Diff line number Diff line
@@ -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 );