Commit da879d57 authored by norvell's avatar norvell
Browse files

Add NONBE_1300_TDREND_JBM_SHORT_FRAMES to address short JBM frames in TD renderer

parent 37f235fe
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -180,6 +180,7 @@
#define NONBE_1122_KEEP_EVS_MODE_UNCHANGED              /* FhG: Disables fix for issue 1122 in EVS mode to keep BE tests green. This switch should be removed once the 1122 fix is added to EVS via a CR.  */
#define NONBE_1296_TDREND_ITD_OUT_OF_BOUNDS_ACCESS      /* Eri: issue 1296: ITD resampling can occasionally read out of bounds, especially when the requested subframes are short (1.25 ms). Seen for headtracking+JBM. */
#define NONBE_1303_GRANULARITY_OSBA_REND                /* VA: issue 1303: Correctly set the granularity in OSBA, Disc mode, and BINAURAL_ROOM_REVERB output */
#define NONBE_1300_TDREND_JBM_SHORT_FRAMES              /* Eri: issue 1300: The JBM operates on 1.25 ms granularity, compatible with CLDFB. The TD renderer needs adaptations to handle such short frames. */

/* ##################### End NON-BE switches ########################### */

+16 −0
Original line number Diff line number Diff line
@@ -437,6 +437,9 @@ ivas_error TDREND_GetMix(
    float hrf_left_delta[SFX_SPAT_BIN_MAX_FILTER_LENGTH];
    float hrf_right_delta[SFX_SPAT_BIN_MAX_FILTER_LENGTH];
    int16_t intp_count;
#ifdef NONBE_1300_TDREND_JBM_SHORT_FRAMES
    int16_t currShift, prevShift, transition_len, length_in2;
#endif

    error = IVAS_ERR_OK;

@@ -462,6 +465,19 @@ ivas_error TDREND_GetMix(
        {
            TDREND_SRC_REND_UpdateFiltersFromSpatialParams( hBinRendererTd, SrcRend_p, SrcSpatial_p, Src_p->hrf_left_prev,
                                                            Src_p->hrf_right_prev, hrf_left_delta, hrf_right_delta, &intp_count, &Src_p->filterlength, &Src_p->itd, &Src_p->Gain, Src_p );
#ifdef NONBE_1300_TDREND_JBM_SHORT_FRAMES
            /* For short subframes triggered by JBM, ensure interpolation and ITD transition fits within subframe */
            intp_count = min( intp_count, subframe_length );
            currShift = abs( Src_p->itd );
            prevShift = abs( Src_p->previtd );
            transition_len = subframe_length - max( 0, SFX_SPAT_BIN_SINC_M - currShift );
            length_in2 = transition_len - (int16_t) ( ( (float) ( transition_len * prevShift ) / ( (float) ( prevShift + currShift ) ) ) + 0.5f ) - currShift;
            if ( Src_p->itd * Src_p->previtd < 0 && length_in2 <= 0 )
            {
                /* Subframe too short for ITD transition -- change to ITD=0 and push the rest of the transition to next subframe */
                Src_p->itd = 0;
            }
#endif
        }

        /* Render source if needed */