Commit 98c8bc51 authored by vaclav's avatar vaclav
Browse files

Merge branch '1303-renderer-granularity-revision' into 'main'

Resolve "Renderer granularity revision"

See merge request !2059
parents 9caaf7b2 49f7e0ee
Loading
Loading
Loading
Loading
Loading
+13 −0
Original line number Original line Diff line number Diff line
@@ -656,6 +656,13 @@ void ivas_renderer_select(
    Decoder_Struct *st_ivas                                     /* i/o: IVAS decoder structure                  */
    Decoder_Struct *st_ivas                                     /* i/o: IVAS decoder structure                  */
);
);


#ifdef NONBE_1303_REND_GRANULARITY
/*! r: secondary binaural renderer type */
RENDERER_TYPE ivas_renderer_secondary_select(
    Decoder_Struct *st_ivas                                     /* i/o: IVAS decoder structure                  */
);

#endif
ivas_error ivas_mc_enc_config(
ivas_error ivas_mc_enc_config(
    Encoder_Struct *st_ivas                                     /* i/o: IVAS encoder structure                  */
    Encoder_Struct *st_ivas                                     /* i/o: IVAS encoder structure                  */
);
);
@@ -885,10 +892,16 @@ TC_BUFFER_MODE ivas_jbm_dec_get_tc_buffer_mode(


/*! r: render granularity */
/*! r: render granularity */
int16_t ivas_jbm_dec_get_render_granularity(
int16_t ivas_jbm_dec_get_render_granularity(
#ifdef NONBE_1303_REND_GRANULARITY
    const RENDERER_TYPE renderer_type,                          /* i  : renderer type                                               */
    const RENDERER_TYPE renderer_type_sec,                      /* i  : secondary renderer type                                     */
    const int32_t output_Fs                                     /* i  : sampling rate                                               */
#else
    const RENDERER_TYPE rendererType, /* i  : renderer type     */
    const RENDERER_TYPE rendererType, /* i  : renderer type     */
    const IVAS_FORMAT ivas_format,    /* i  : ivas format */
    const IVAS_FORMAT ivas_format,    /* i  : ivas format */
    const MC_MODE mc_mode,            /* i  : MC mode */
    const MC_MODE mc_mode,            /* i  : MC mode */
    const int32_t output_Fs           /* i  : sampling rate     */
    const int32_t output_Fs           /* i  : sampling rate     */
#endif
);
);


ivas_error ivas_jbm_dec_tc_buffer_open(
ivas_error ivas_jbm_dec_tc_buffer_open(
+1 −0
Original line number Original line Diff line number Diff line
@@ -181,6 +181,7 @@
#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_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_1303_GRANULARITY_OSBA_REND                /* VA: issue 1303: Correctly set the granularity in OSBA, Disc mode, and BINAURAL_ROOM_REVERB output */
#define NONBE_1118_EVS_LR_HQ_BITERROR                   /* VA: issue 1118: fix EVS decoder crash in LR-HQ in case of bit errors */
#define NONBE_1118_EVS_LR_HQ_BITERROR                   /* VA: issue 1118: fix EVS decoder crash in LR-HQ in case of bit errors */
#define NONBE_1303_REND_GRANULARITY                     /* VA: issue 1303: Renderer granularity revision */


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


+12 −2
Original line number Original line Diff line number Diff line
@@ -2126,6 +2126,7 @@ ivas_error ivas_init_decoder(
                return error;
                return error;
            }
            }
        }
        }
#ifndef NONBE_1303_REND_GRANULARITY


        granularity = NS2SA( st_ivas->hDecoderConfig->output_Fs, FRAME_SIZE_NS / MAX_PARAM_SPATIAL_SUBFRAMES );
        granularity = NS2SA( st_ivas->hDecoderConfig->output_Fs, FRAME_SIZE_NS / MAX_PARAM_SPATIAL_SUBFRAMES );
        n_channels_transport_jbm = ivas_jbm_dec_get_num_tc_channels( st_ivas );
        n_channels_transport_jbm = ivas_jbm_dec_get_num_tc_channels( st_ivas );
@@ -2134,6 +2135,7 @@ ivas_error ivas_init_decoder(
        {
        {
            return error;
            return error;
        }
        }
#endif
    }
    }
    else if ( st_ivas->renderer_type == RENDERER_MC )
    else if ( st_ivas->renderer_type == RENDERER_MC )
    {
    {
@@ -2166,6 +2168,7 @@ ivas_error ivas_init_decoder(
        }
        }


        st_ivas->binaural_latency_ns = st_ivas->hCrendWrapper->binaural_latency_ns;
        st_ivas->binaural_latency_ns = st_ivas->hCrendWrapper->binaural_latency_ns;
#ifndef NONBE_1303_REND_GRANULARITY


        if ( ( st_ivas->ivas_format == MC_FORMAT ) && ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) )
        if ( ( st_ivas->ivas_format == MC_FORMAT ) && ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) )
        {
        {
@@ -2189,6 +2192,7 @@ ivas_error ivas_init_decoder(
                return error;
                return error;
            }
            }
        }
        }
#endif
    }
    }


    if ( st_ivas->ivas_format == MASA_ISM_FORMAT )
    if ( st_ivas->ivas_format == MASA_ISM_FORMAT )
@@ -2203,7 +2207,7 @@ ivas_error ivas_init_decoder(


            if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB )
            if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB )
            {
            {
                if ( ( error = ivas_reverb_open( &st_ivas->hReverb, st_ivas->hHrtfStatistics, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK )
                if ( ( error = ivas_reverb_open( &st_ivas->hReverb, st_ivas->hHrtfStatistics, st_ivas->hRenderConfig, output_Fs ) ) != IVAS_ERR_OK )
                {
                {
                    return error;
                    return error;
                }
                }
@@ -2382,12 +2386,18 @@ ivas_error ivas_init_decoder(
     *-----------------------------------------------------------------*/
     *-----------------------------------------------------------------*/


    if ( st_ivas->hTcBuffer == NULL )
    if ( st_ivas->hTcBuffer == NULL )

    {
    {
        /* no module has yet open the TC buffer, open a default one */
        /* no module has yet open the TC buffer, open a default one */
#ifdef NONBE_1303_REND_GRANULARITY
        granularity = ivas_jbm_dec_get_render_granularity( st_ivas->renderer_type, ivas_renderer_secondary_select( st_ivas ), output_Fs );
        n_channels_transport_jbm = ivas_jbm_dec_get_num_tc_channels( st_ivas );

        if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, ivas_jbm_dec_get_tc_buffer_mode( st_ivas ), n_channels_transport_jbm, n_channels_transport_jbm, n_channels_transport_jbm, granularity ) ) != IVAS_ERR_OK )
#else
        n_channels_transport_jbm = ivas_jbm_dec_get_num_tc_channels( st_ivas );
        n_channels_transport_jbm = ivas_jbm_dec_get_num_tc_channels( st_ivas );


        if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, ivas_jbm_dec_get_tc_buffer_mode( st_ivas ), n_channels_transport_jbm, n_channels_transport_jbm, n_channels_transport_jbm, NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ) ) ) != IVAS_ERR_OK )
        if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, ivas_jbm_dec_get_tc_buffer_mode( st_ivas ), n_channels_transport_jbm, n_channels_transport_jbm, n_channels_transport_jbm, NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ) ) ) != IVAS_ERR_OK )
#endif
        {
        {
            return error;
            return error;
        }
        }
+5 −2
Original line number Original line Diff line number Diff line
@@ -122,6 +122,7 @@ static ivas_error ivas_ism_bitrate_switching_dec(
        mvs2s( st_ivas->hSpatParamRendCom->subframe_nbslots, st_ivas->hTcBuffer->subframe_nbslots, MAX_JBM_SUBFRAMES_5MS );
        mvs2s( st_ivas->hSpatParamRendCom->subframe_nbslots, st_ivas->hTcBuffer->subframe_nbslots, MAX_JBM_SUBFRAMES_5MS );
    }
    }


#ifndef NONBE_1303_REND_GRANULARITY
    /* JBM: when granularity goes down (e.g. Discrete ISM with TD Obj Renderer -> ParamISM with binaural fastconv
    /* 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 */
            render what still fits in the new granularity */
    tc_granularity_new = ivas_jbm_dec_get_render_granularity( st_ivas->renderer_type, st_ivas->ivas_format, st_ivas->mc_mode, st_ivas->hDecoderConfig->output_Fs );
    tc_granularity_new = ivas_jbm_dec_get_render_granularity( st_ivas->renderer_type, st_ivas->ivas_format, st_ivas->mc_mode, st_ivas->hDecoderConfig->output_Fs );
@@ -138,7 +139,7 @@ static ivas_error ivas_ism_bitrate_switching_dec(
            return error;
            return error;
        }
        }
    }
    }

#endif
    if ( st_ivas->ism_mode != last_ism_mode )
    if ( st_ivas->ism_mode != last_ism_mode )
    {
    {
        /* EFAP handle */
        /* EFAP handle */
@@ -306,7 +307,9 @@ static ivas_error ivas_ism_bitrate_switching_dec(
    tc_nchan_tc_new = ivas_jbm_dec_get_num_tc_channels( st_ivas );
    tc_nchan_tc_new = ivas_jbm_dec_get_num_tc_channels( st_ivas );
    tc_nchan_allocate_new = tc_nchan_tc_new;
    tc_nchan_allocate_new = tc_nchan_tc_new;
    tc_nchan_full_new = tc_nchan_tc_new;
    tc_nchan_full_new = tc_nchan_tc_new;

#ifdef NONBE_1303_REND_GRANULARITY
    tc_granularity_new = ivas_jbm_dec_get_render_granularity( st_ivas->renderer_type, RENDERER_DISABLE, st_ivas->hDecoderConfig->output_Fs );
#endif


    if ( st_ivas->ism_mode == ISM_MODE_PARAM && ( st_ivas->renderer_type != RENDERER_MONO_DOWNMIX && st_ivas->renderer_type != RENDERER_DISABLE && st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC && st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC_ROOM ) )
    if ( st_ivas->ism_mode == ISM_MODE_PARAM && ( st_ivas->renderer_type != RENDERER_MONO_DOWNMIX && st_ivas->renderer_type != RENDERER_DISABLE && st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC && st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC_ROOM ) )
    {
    {
+15 −0
Original line number Original line Diff line number Diff line
@@ -403,7 +403,11 @@ ivas_error ivas_param_ism_dec_open(
    Decoder_Struct *st_ivas /* i/o: IVAS decoder structure      */
    Decoder_Struct *st_ivas /* i/o: IVAS decoder structure      */
)
)
{
{
#ifdef NONBE_1303_REND_GRANULARITY
    int16_t i, granularity;
#else
    int16_t i;
    int16_t i;
#endif
    PARAM_ISM_DEC_HANDLE hParamIsmDec;
    PARAM_ISM_DEC_HANDLE hParamIsmDec;
    IVAS_OUTPUT_SETUP hOutSetup;
    IVAS_OUTPUT_SETUP hOutSetup;
    SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom;
    SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom;
@@ -539,6 +543,9 @@ ivas_error ivas_param_ism_dec_open(
    st_ivas->hParamIsmDec = hParamIsmDec;
    st_ivas->hParamIsmDec = hParamIsmDec;
    st_ivas->hSpatParamRendCom = hSpatParamRendCom;
    st_ivas->hSpatParamRendCom = hSpatParamRendCom;


#ifdef NONBE_1303_REND_GRANULARITY
    granularity = ivas_jbm_dec_get_render_granularity( st_ivas->renderer_type, RENDERER_DISABLE, output_Fs );
#endif


    if ( st_ivas->renderer_type != RENDERER_MONO_DOWNMIX && st_ivas->renderer_type != RENDERER_DISABLE )
    if ( st_ivas->renderer_type != RENDERER_MONO_DOWNMIX && st_ivas->renderer_type != RENDERER_DISABLE )
    {
    {
@@ -578,7 +585,11 @@ ivas_error ivas_param_ism_dec_open(


        if ( st_ivas->hTcBuffer == NULL )
        if ( st_ivas->hTcBuffer == NULL )
        {
        {
#ifdef NONBE_1303_REND_GRANULARITY
            if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, TC_BUFFER_MODE_RENDERER, nchan_transport, nchan_transport, nchan_full, granularity ) ) != IVAS_ERR_OK )
#else
            if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, TC_BUFFER_MODE_RENDERER, nchan_transport, nchan_transport, nchan_full, NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ) ) ) != IVAS_ERR_OK )
            if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, TC_BUFFER_MODE_RENDERER, nchan_transport, nchan_transport, nchan_full, NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ) ) ) != IVAS_ERR_OK )
#endif
            {
            {
                return error;
                return error;
            }
            }
@@ -591,7 +602,11 @@ ivas_error ivas_param_ism_dec_open(
        if ( st_ivas->hTcBuffer == NULL )
        if ( st_ivas->hTcBuffer == NULL )
        {
        {
            int16_t nchan_to_allocate = st_ivas->hDecoderConfig->nchan_out;
            int16_t nchan_to_allocate = st_ivas->hDecoderConfig->nchan_out;
#ifdef NONBE_1303_REND_GRANULARITY
            if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, TC_BUFFER_MODE_BUFFER, nchan_to_allocate, nchan_to_allocate, nchan_to_allocate, granularity ) ) != IVAS_ERR_OK )
#else
            if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, TC_BUFFER_MODE_BUFFER, nchan_to_allocate, nchan_to_allocate, nchan_to_allocate, NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ) ) ) != IVAS_ERR_OK )
            if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, TC_BUFFER_MODE_BUFFER, nchan_to_allocate, nchan_to_allocate, nchan_to_allocate, NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ) ) ) != IVAS_ERR_OK )
#endif
            {
            {
                return error;
                return error;
            }
            }
Loading