Loading lib_rend/ivas_dirac_dec_binaural_functions.c +36 −2 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ #define ADAPT_HTPROTO_ROT_LIM_1 0.8f #ifdef MASA_AND_OBJECTS #define MAX_GAIN_CACHE_SIZE ( ( MASA_MAXIMUM_DIRECTIONS + MAX_NUM_OBJECTS ) * 3 ) /* == max number of simultaneous directions * 3 */ #define MAX_GAIN_CACHE_SIZE ( ( MASA_MAXIMUM_DIRECTIONS * 3 ) + MAX_NUM_OBJECTS ) /* == different calls to get gains */ #else #define MAX_GAIN_CACHE_SIZE 6 #endif Loading Loading @@ -814,6 +814,9 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric int16_t dirac_read_idx; float subFrameTotalEne[CLDFB_NO_CHANNELS_MAX]; PARAMBIN_HRTF_GAIN_CACHE gainCache[MAX_GAIN_CACHE_SIZE]; #ifdef MASA_AND_OBJECTS int16_t gainCacheBaseIndex; #endif hDirAC = st_ivas->hDirAC; h = st_ivas->hDiracDecBin; Loading Loading @@ -952,6 +955,9 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric eleDeg = hDirAC->elevation[dirac_read_idx][bin]; ratio = hDirAC->energy_ratio1[dirac_read_idx][bin]; spreadCoh = hDirAC->spreadCoherence[dirac_read_idx][bin]; #ifdef MASA_AND_OBJECTS gainCacheBaseIndex = 0; #endif } #ifdef MASA_AND_OBJECTS else if ( st_ivas->ivas_format != MASA_ISM_FORMAT || ( st_ivas->ivas_format == MASA_ISM_FORMAT && dirIndex < hDirAC->numParametricDirections ) ) /* For second of the two simultaneous directions */ Loading @@ -970,6 +976,9 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric aziDeg = hDirAC->azimuth2[dirac_read_idx][bin]; eleDeg = hDirAC->elevation2[dirac_read_idx][bin]; spreadCoh = hDirAC->spreadCoherence2[dirac_read_idx][bin]; #ifdef MASA_AND_OBJECTS gainCacheBaseIndex = 3; #endif } #ifdef MASA_AND_OBJECTS else /* For object directions of MASA_ISM_FORMAT */ Loading @@ -989,6 +998,7 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric } ratio = st_ivas->hMasaIsmData->energy_ratio_ism[ismDirIndex][dirac_read_idx][bin]; spreadCoh = 0.0f; gainCacheBaseIndex = 6 + ismDirIndex; } #endif Loading Loading @@ -1024,7 +1034,11 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric spreadCoh = max( spreadCoh, altSpreadCoh ); } #ifdef MASA_AND_OBJECTS getDirectPartGains( bin, aziDeg, eleDeg, &lRealp, &lImagp, &rRealp, &rImagp, h->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex], isHeadtracked ); #else getDirectPartGains( bin, aziDeg, eleDeg, &lRealp, &lImagp, &rRealp, &rImagp, h->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[( dirIndex * 3 )], isHeadtracked ); #endif if ( h->renderStereoOutputInsteadOfBinaural ) { Loading Loading @@ -1067,7 +1081,11 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric rImagp *= centerMul; /* Apply the gain for the left source of the three coherent sources */ #ifdef MASA_AND_OBJECTS getDirectPartGains( bin, aziDeg + 30, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, h->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex + 1], isHeadtracked ); #else getDirectPartGains( bin, aziDeg + 30, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, h->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[( dirIndex * 3 + 1 )], isHeadtracked ); #endif hrtfEneSides = ( lRealpTmp * lRealpTmp ) + ( lImagpTmp * lImagpTmp ) + ( rRealpTmp * rRealpTmp ) + ( rImagpTmp * rImagpTmp ); lRealp += sidesMul * lRealpTmp; Loading @@ -1077,7 +1095,11 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric /* Apply the gain for the right source of the three coherent sources. * -30 degrees to 330 wrapping due to internal functions. */ #ifdef MASA_AND_OBJECTS getDirectPartGains( bin, aziDeg + 330, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, h->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex + 2], isHeadtracked ); #else getDirectPartGains( bin, aziDeg + 330, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, h->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[( dirIndex * 3 + 2 )], isHeadtracked ); #endif hrtfEneSides += ( lRealpTmp * lRealpTmp ) + ( lImagpTmp * lImagpTmp ) + ( rRealpTmp * rRealpTmp ) + ( rImagpTmp * rImagpTmp ); lRealp += sidesMul * lRealpTmp; Loading Loading @@ -1293,7 +1315,12 @@ static void ivas_dirac_dec_binaural_determine_processing_matrices( int16_t dirac_read_idx; #endif DIRAC_DEC_BIN_HANDLE h; #ifdef MASA_AND_OBJECTS PARAMBIN_HRTF_GAIN_CACHE gainCache[MAX_NUM_OBJECTS]; int16_t idx; #else PARAMBIN_HRTF_GAIN_CACHE gainCache; #endif h = st_ivas->hDiracDecBin; #ifdef MASA_AND_OBJECTS Loading @@ -1320,7 +1347,14 @@ static void ivas_dirac_dec_binaural_determine_processing_matrices( dirac_read_idx = st_ivas->hDirAC->dirac_read_idx; #endif #ifdef MASA_AND_OBJECTS for ( idx = 0; idx < MAX_NUM_OBJECTS; idx++ ) { gainCache[idx].azi = -1000; /* Use -1000 as value for uninitialized cache. */ } #else gainCache.azi = -1000; /* Use -1000 as value for uninitialized cache. */ #endif for ( bin = 0; bin < nBins; bin++ ) { Loading Loading @@ -1491,7 +1525,7 @@ static void ivas_dirac_dec_binaural_determine_processing_matrices( h->processMtxImPrev[chA][chB + 2][bin] = h->processMtxIm[chA][chB + 2][bin]; } getDirectPartGains( bin, aziDeg, eleDeg, &lRealp, &lImagp, &rRealp, &rImagp, h->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache, isHeadtracked ); getDirectPartGains( bin, aziDeg, eleDeg, &lRealp, &lImagp, &rRealp, &rImagp, h->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[chB], isHeadtracked ); h->processMtxRe[0][chB + 2][bin] = lRealp * gainFactor; h->processMtxIm[0][chB + 2][bin] = lImagp * gainFactor; Loading Loading
lib_rend/ivas_dirac_dec_binaural_functions.c +36 −2 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ #define ADAPT_HTPROTO_ROT_LIM_1 0.8f #ifdef MASA_AND_OBJECTS #define MAX_GAIN_CACHE_SIZE ( ( MASA_MAXIMUM_DIRECTIONS + MAX_NUM_OBJECTS ) * 3 ) /* == max number of simultaneous directions * 3 */ #define MAX_GAIN_CACHE_SIZE ( ( MASA_MAXIMUM_DIRECTIONS * 3 ) + MAX_NUM_OBJECTS ) /* == different calls to get gains */ #else #define MAX_GAIN_CACHE_SIZE 6 #endif Loading Loading @@ -814,6 +814,9 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric int16_t dirac_read_idx; float subFrameTotalEne[CLDFB_NO_CHANNELS_MAX]; PARAMBIN_HRTF_GAIN_CACHE gainCache[MAX_GAIN_CACHE_SIZE]; #ifdef MASA_AND_OBJECTS int16_t gainCacheBaseIndex; #endif hDirAC = st_ivas->hDirAC; h = st_ivas->hDiracDecBin; Loading Loading @@ -952,6 +955,9 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric eleDeg = hDirAC->elevation[dirac_read_idx][bin]; ratio = hDirAC->energy_ratio1[dirac_read_idx][bin]; spreadCoh = hDirAC->spreadCoherence[dirac_read_idx][bin]; #ifdef MASA_AND_OBJECTS gainCacheBaseIndex = 0; #endif } #ifdef MASA_AND_OBJECTS else if ( st_ivas->ivas_format != MASA_ISM_FORMAT || ( st_ivas->ivas_format == MASA_ISM_FORMAT && dirIndex < hDirAC->numParametricDirections ) ) /* For second of the two simultaneous directions */ Loading @@ -970,6 +976,9 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric aziDeg = hDirAC->azimuth2[dirac_read_idx][bin]; eleDeg = hDirAC->elevation2[dirac_read_idx][bin]; spreadCoh = hDirAC->spreadCoherence2[dirac_read_idx][bin]; #ifdef MASA_AND_OBJECTS gainCacheBaseIndex = 3; #endif } #ifdef MASA_AND_OBJECTS else /* For object directions of MASA_ISM_FORMAT */ Loading @@ -989,6 +998,7 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric } ratio = st_ivas->hMasaIsmData->energy_ratio_ism[ismDirIndex][dirac_read_idx][bin]; spreadCoh = 0.0f; gainCacheBaseIndex = 6 + ismDirIndex; } #endif Loading Loading @@ -1024,7 +1034,11 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric spreadCoh = max( spreadCoh, altSpreadCoh ); } #ifdef MASA_AND_OBJECTS getDirectPartGains( bin, aziDeg, eleDeg, &lRealp, &lImagp, &rRealp, &rImagp, h->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex], isHeadtracked ); #else getDirectPartGains( bin, aziDeg, eleDeg, &lRealp, &lImagp, &rRealp, &rImagp, h->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[( dirIndex * 3 )], isHeadtracked ); #endif if ( h->renderStereoOutputInsteadOfBinaural ) { Loading Loading @@ -1067,7 +1081,11 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric rImagp *= centerMul; /* Apply the gain for the left source of the three coherent sources */ #ifdef MASA_AND_OBJECTS getDirectPartGains( bin, aziDeg + 30, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, h->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex + 1], isHeadtracked ); #else getDirectPartGains( bin, aziDeg + 30, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, h->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[( dirIndex * 3 + 1 )], isHeadtracked ); #endif hrtfEneSides = ( lRealpTmp * lRealpTmp ) + ( lImagpTmp * lImagpTmp ) + ( rRealpTmp * rRealpTmp ) + ( rImagpTmp * rImagpTmp ); lRealp += sidesMul * lRealpTmp; Loading @@ -1077,7 +1095,11 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric /* Apply the gain for the right source of the three coherent sources. * -30 degrees to 330 wrapping due to internal functions. */ #ifdef MASA_AND_OBJECTS getDirectPartGains( bin, aziDeg + 330, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, h->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex + 2], isHeadtracked ); #else getDirectPartGains( bin, aziDeg + 330, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, h->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[( dirIndex * 3 + 2 )], isHeadtracked ); #endif hrtfEneSides += ( lRealpTmp * lRealpTmp ) + ( lImagpTmp * lImagpTmp ) + ( rRealpTmp * rRealpTmp ) + ( rImagpTmp * rImagpTmp ); lRealp += sidesMul * lRealpTmp; Loading Loading @@ -1293,7 +1315,12 @@ static void ivas_dirac_dec_binaural_determine_processing_matrices( int16_t dirac_read_idx; #endif DIRAC_DEC_BIN_HANDLE h; #ifdef MASA_AND_OBJECTS PARAMBIN_HRTF_GAIN_CACHE gainCache[MAX_NUM_OBJECTS]; int16_t idx; #else PARAMBIN_HRTF_GAIN_CACHE gainCache; #endif h = st_ivas->hDiracDecBin; #ifdef MASA_AND_OBJECTS Loading @@ -1320,7 +1347,14 @@ static void ivas_dirac_dec_binaural_determine_processing_matrices( dirac_read_idx = st_ivas->hDirAC->dirac_read_idx; #endif #ifdef MASA_AND_OBJECTS for ( idx = 0; idx < MAX_NUM_OBJECTS; idx++ ) { gainCache[idx].azi = -1000; /* Use -1000 as value for uninitialized cache. */ } #else gainCache.azi = -1000; /* Use -1000 as value for uninitialized cache. */ #endif for ( bin = 0; bin < nBins; bin++ ) { Loading Loading @@ -1491,7 +1525,7 @@ static void ivas_dirac_dec_binaural_determine_processing_matrices( h->processMtxImPrev[chA][chB + 2][bin] = h->processMtxIm[chA][chB + 2][bin]; } getDirectPartGains( bin, aziDeg, eleDeg, &lRealp, &lImagp, &rRealp, &rImagp, h->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache, isHeadtracked ); getDirectPartGains( bin, aziDeg, eleDeg, &lRealp, &lImagp, &rRealp, &rImagp, h->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[chB], isHeadtracked ); h->processMtxRe[0][chB + 2][bin] = lRealp * gainFactor; h->processMtxIm[0][chB + 2][bin] = lImagp * gainFactor; Loading