Commit 919c3803 authored by bayers's avatar bayers
Browse files

fix JBM MC rate switching (#808)

parent f05c5d80
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -210,7 +210,7 @@
#define NONBE_FIX_778_TNS_UNFIED_STEREO_MSAN                  /* FhG: Issue 778: MSAN error due to uninitialized TNS configuration */
#define NONBE_FIX_797_OMASA_INACTIVE_SEP_OBJ                 /* VA: issue 797:  fix of crash when the separated object is inactive and the MASA metadata is using very few bits */
#define NONBE_FIX_798_OSBA_MC_DEC_CRASH

#define NONBE_FIX_808_JBM_PARAMUPMIX_RS                       /* FhG: Issue 808: fix JBM MC rate switching */

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

+16 −1
Original line number Diff line number Diff line
@@ -709,6 +709,18 @@ ivas_error ivas_mc_paramupmix_dec_open(
    /* allocate transport channels*/
    hMCParamUpmix->free_param_interpolator = 0;
    hMCParamUpmix->param_interpolator = NULL;
#ifdef NONBE_FIX_808_JBM_PARAMUPMIX_RS
    if ( st_ivas->hDecoderConfig->Opt_5ms == 1 )
    {
        if ( ( hMCParamUpmix->param_interpolator = (float *) malloc( MAX_JBM_CLDFB_TIMESLOTS * sizeof( float ) ) ) == NULL )
        {
            return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for interpolator\n" ) );
        }
        hMCParamUpmix->free_param_interpolator = 1;

        ivas_jbm_dec_get_adapted_linear_interpolator( DEFAULT_JBM_CLDFB_TIMESLOTS, DEFAULT_JBM_CLDFB_TIMESLOTS, hMCParamUpmix->param_interpolator );
    }
#endif
    if ( st_ivas->hDecoderConfig->Opt_5ms == 1 && st_ivas->hTcBuffer == NULL )
    {
        int16_t nchan_to_allocate;
@@ -718,11 +730,12 @@ ivas_error ivas_mc_paramupmix_dec_open(
        buffer_mode = TC_BUFFER_MODE_RENDERER;
        nchan_tc = ivas_jbm_dec_get_num_tc_channels( st_ivas );
        nchan_to_allocate = MC_PARAMUPMIX_MAX_INPUT_CHANS;
#ifndef NONBE_FIX_808_JBM_PARAMUPMIX_RS
        if ( ( hMCParamUpmix->param_interpolator = (float *) malloc( MAX_JBM_CLDFB_TIMESLOTS * sizeof( float ) ) ) == NULL )
        {
            return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for interpolator\n" ) );
        }

#endif
        if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_STEREO || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_MONO )
        {
            buffer_mode = TC_BUFFER_MODE_BUFFER;
@@ -737,9 +750,11 @@ ivas_error ivas_mc_paramupmix_dec_open(
        {
            return error;
        }
#ifndef NONBE_FIX_808_JBM_PARAMUPMIX_RS
        hMCParamUpmix->free_param_interpolator = 1;

        ivas_jbm_dec_get_adapted_linear_interpolator( DEFAULT_JBM_CLDFB_TIMESLOTS, DEFAULT_JBM_CLDFB_TIMESLOTS, hMCParamUpmix->param_interpolator );
#endif
    }

    st_ivas->hMCParamUpmix = hMCParamUpmix;
+13 −0
Original line number Diff line number Diff line
@@ -1358,6 +1358,19 @@ static ivas_error ivas_mc_dec_reconfig(
        {
            tc_nchan_full_new = 0;
        }
#ifdef NONBE_FIX_808_JBM_PARAMUPMIX_RS
        else if ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX )
        {
            tc_nchan_allocate_new = MC_PARAMUPMIX_MAX_INPUT_CHANS;
            if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_STEREO || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_MONO )
            {
                tc_buffer_mode_new = TC_BUFFER_MODE_BUFFER;
                tc_nchan_tc_new = st_ivas->hDecoderConfig->nchan_out;
                tc_nchan_allocate_new = tc_nchan_tc_new;
            }
            tc_nchan_full_new = tc_nchan_allocate_new;
        }
#endif

        /* reconfigure buffer */
        if ( hTcBuffer->tc_buffer_mode != tc_buffer_mode_new || hTcBuffer->nchan_transport_jbm != tc_nchan_tc_new ||