diff --git a/lib_com/options.h b/lib_com/options.h index deb91f1805202dbac31e1ff3f5c43ca9a74531c4..2d1ac97a23bbdb6887f9dea91bf18b498b67a589 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 0c768f1a176107342df11f6df965acaa24998ab2..e62a38f3801b9ed3b5fb5d7f6dbc8f6758e63dbb 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 );