Commit c3e0f97b authored by TYAGIRIS's avatar TYAGIRIS
Browse files

Merge branch 'dlb_fix_1297' into 'main'

[non-BE] fix for issue 1297

See merge request !2052
parents b91f1a56 3b169b01
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -173,6 +173,7 @@

#define NONBE_1244_FIX_SWB_BWE_MEMORY                   /* VA: issue 1244: fix to SWB BWE memory in case of switching from FB coding - pending a review by Huawei */ 
#define NONBE_FIX_1180_HQMDCT_PHECU_LT_MUTING           /* Ericsson: issue 1180, corrected long term mute loop attnuation after 200ms  in PhECU-PLC  */
#define NONBE_FIX_1297_SPAR_JBM_MEM_SAN                 /*Dolby: issue 1297, SPAR + JBM + BR switch memory sanitizer*/  
#define NONBE_1289_STEREO_SW_TO_MONO                    /* VA: issue 1289: Fix glitch when stereo signal is decoded to mono n TD->DFT switching */
#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. */

+62 −31
Original line number Diff line number Diff line
@@ -1533,20 +1533,45 @@ ivas_error ivas_jbm_dec_flush_renderer(
        }
        else if ( st_ivas->ivas_format == SBA_ISM_FORMAT )
        {
#ifdef NONBE_FIX_1297_SPAR_JBM_MEM_SAN
            if ( ism_mode_old == ISM_SBA_MODE_DISC )
            {
#endif
                float *tc_local[MAX_TRANSPORT_CHANNELS];
                int16_t last_spar_md_idx;
                int16_t last_dirac_md_idx;
                uint16_t nSamplesAvailableNext;
#ifdef NONBE_FIX_1297_SPAR_JBM_MEM_SAN
                ISM_MODE ism_mode_orig;
                RENDERER_TYPE renderer_type_orig;
                int32_t ivas_total_brate;
                ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate;
                renderer_type_orig = st_ivas->renderer_type;
                ism_mode_orig = st_ivas->ism_mode;
                st_ivas->ism_mode = ism_mode_old;
                st_ivas->renderer_type = renderer_type_old;
                st_ivas->hDecoderConfig->ivas_total_brate = st_ivas->hDecoderConfig->last_ivas_total_brate;
#endif

                last_spar_md_idx = st_ivas->hSpar->render_to_md_map[st_ivas->hSpar->slots_rendered - 1];
                last_dirac_md_idx = st_ivas->hSpatParamRendCom->render_to_md_map[st_ivas->hSpatParamRendCom->slots_rendered - 1];
#ifdef NONBE_FIX_1297_SPAR_JBM_MEM_SAN
#ifdef DEBUGGING
                assert( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV );
#endif
#else
#ifdef DEBUGGING
            assert( ism_mode_old == ISM_SBA_MODE_DISC && st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV );
#endif
#endif
                /* copy from ISM delay buffer to the correct place in tcs */
                for ( ch_idx = 0; ch_idx < st_ivas->nchan_ism; ch_idx++ )
                {
#ifdef NONBE_FIX_1297_SPAR_JBM_MEM_SAN
                    tc_local[ch_idx] = &st_ivas->hTcBuffer->tc[ch_idx][hTcBuffer->n_samples_rendered];
#else
                tc_local[ch_idx] = &st_ivas->hTcBuffer->tc[ch_idx + 2][hTcBuffer->n_samples_rendered];
#endif
                    mvr2r( st_ivas->hSbaIsmData->delayBuffer[ch_idx], tc_local[ch_idx], st_ivas->hSbaIsmData->delayBuffer_size );
                }

@@ -1571,6 +1596,12 @@ ivas_error ivas_jbm_dec_flush_renderer(
                {
                    return error;
                }
#ifdef NONBE_FIX_1297_SPAR_JBM_MEM_SAN
                st_ivas->ism_mode = ism_mode_orig;
                st_ivas->renderer_type = renderer_type_orig;
                st_ivas->hDecoderConfig->ivas_total_brate = ivas_total_brate;
            }
#endif
        }
        else
        {
+7 −0
Original line number Diff line number Diff line
@@ -1034,8 +1034,15 @@ ivas_error IVAS_DEC_ReadFormat(
            }
        }

#ifdef NONBE_FIX_1297_SPAR_JBM_MEM_SAN
        if ( ( renderer_type_old != st_ivas->renderer_type && renderer_type_old != RENDERER_DISABLE ) ||
             ( st_ivas->ini_active_frame > 0 &&
               ( ( ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT ) && st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC && st_ivas->ism_mode != ISM_MASA_MODE_DISC ) ||
                 ( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV && st_ivas->ism_mode != ISM_SBA_MODE_DISC ) ) ) )
#else
        if ( ( renderer_type_old != st_ivas->renderer_type && renderer_type_old != RENDERER_DISABLE ) ||
             ( st_ivas->ini_active_frame > 0 && ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT ) && st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC && st_ivas->ism_mode != ISM_MASA_MODE_DISC ) )
#endif
        {
            /* JBM: when granularity goes down (e.g. Discrete ISM with TD Obj Renderer -> ParamISM with binaural fastconv
            render what still fits in the new granularity */