Commit 40113398 authored by Dominik Weckbecker's avatar Dominik Weckbecker 💬
Browse files

restore SBA bitexactness

parent 8c3006b9
Loading
Loading
Loading
Loading
Loading
+31 −10
Original line number Diff line number Diff line
@@ -162,7 +162,11 @@ ivas_error ivas_dirac_config(
    hConfig->dec_param_estim = FALSE;
    if ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) /* skip for MASA decoder */
    {
        if ( ( error = ivas_dirac_sba_config( hQMetaData, element_mode, ivas_total_brate, sba_order, hConfig->nbands - spar_dirac_split_band ) ) != IVAS_ERR_OK )
        if ( ( error = ivas_dirac_sba_config( hQMetaData, element_mode, ivas_total_brate, sba_order, hConfig->nbands - spar_dirac_split_band
#ifdef NONBE_FIX_871_ACELP_CRASH_IN_OSBA
                 ,ivas_format
#endif
			) ) != IVAS_ERR_OK )
        {
            return error;
        }
@@ -319,7 +323,12 @@ void ivas_get_dirac_sba_max_md_bits(
    int16_t *bits_frame_nominal,
    int16_t *metadata_max_bits,
    int16_t *qmetadata_max_bit_req,
    const int16_t nbands )
    const int16_t nbands 
#ifdef NONBE_FIX_871_ACELP_CRASH_IN_OSBA
	,
	IVAS_FORMAT ivas_format
#endif
)
{
    if ( sba_total_brate <= IVAS_13k2 )
    {
@@ -334,10 +343,13 @@ void ivas_get_dirac_sba_max_md_bits(
    else if ( sba_total_brate <= IVAS_24k4 )
    {
        *bits_frame_nominal = ACELP_16k40 / FRAMES_PER_SEC;
#ifdef NONBE_FIX_871_ACELP_CRASH_IN_OSBA
        *metadata_max_bits = 101;
#else
        *metadata_max_bits = 103;
#ifdef NONBE_FIX_871_ACELP_CRASH_IN_OSBA
        /* OSBA needs an additional 2-bits safety margin to avoid acelp crashes */
		if( ivas_format == SBA_ISM_FORMAT)
		{
			( *metadata_max_bits ) -= 2;
		}
#endif
    }
    else if ( sba_total_brate <= IVAS_32k )
@@ -394,6 +406,10 @@ ivas_error ivas_dirac_sba_config(
    int32_t sba_total_brate,          /* i  : SBA total bitrate                                    */
    const int16_t sba_order,          /* i  : Ambisonic (SBA) order                                */
    const int16_t nbands              /* i  : number of frequency bands                            */
#ifdef NONBE_FIX_871_ACELP_CRASH_IN_OSBA
    ,
    IVAS_FORMAT ivas_format
#endif
)
{
    int16_t nbands_coded;
@@ -456,7 +472,12 @@ ivas_error ivas_dirac_sba_config(
        }
    }

    ivas_get_dirac_sba_max_md_bits( sba_total_brate, &hQMetaData->bits_frame_nominal, &hQMetaData->metadata_max_bits, &hQMetaData->qmetadata_max_bit_req, hQMetaData->q_direction[0].cfg.nbands );
    ivas_get_dirac_sba_max_md_bits( sba_total_brate, &hQMetaData->bits_frame_nominal, &hQMetaData->metadata_max_bits, &hQMetaData->qmetadata_max_bit_req, hQMetaData->q_direction[0].cfg.nbands
#ifdef NONBE_FIX_871_ACELP_CRASH_IN_OSBA
                                    ,
                                    ivas_format
#endif
	);

    return error;
}
+8 −0
Original line number Diff line number Diff line
@@ -3647,6 +3647,10 @@ void ivas_get_dirac_sba_max_md_bits(
    int16_t *metadata_max_bits,
    int16_t *qmetadata_max_bit_req,
    const int16_t nbands
#ifdef NONBE_FIX_871_ACELP_CRASH_IN_OSBA
	,
	IVAS_FORMAT ivas_format
#endif
);

ivas_error ivas_dirac_sba_config(
@@ -3655,6 +3659,10 @@ ivas_error ivas_dirac_sba_config(
    int32_t sba_total_brate,                                    /* i  : SBA total bitrate                                    */
    const int16_t sba_order,                                    /* i  : Ambisonic (SBA) order                                */
    const int16_t nbands                                        /* i  : number of frequency bands                            */
#ifdef NONBE_FIX_871_ACELP_CRASH_IN_OSBA
	,
	IVAS_FORMAT ivas_format
#endif
);

ivas_error ivas_dirac_dec_config(
+10 −2
Original line number Diff line number Diff line
@@ -1363,7 +1363,11 @@ ivas_error ivas_init_decoder(
            }
        }

        if ( ( error = ivas_dirac_sba_config( st_ivas->hQMetaData, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ) ? IVAS_MAX_NUM_BANDS : ( IVAS_MAX_NUM_BANDS - SPAR_DIRAC_SPLIT_START_BAND ) ) ) != IVAS_ERR_OK )
        if ( ( error = ivas_dirac_sba_config( st_ivas->hQMetaData, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ) ? IVAS_MAX_NUM_BANDS : ( IVAS_MAX_NUM_BANDS - SPAR_DIRAC_SPLIT_START_BAND )  
#ifdef NONBE_FIX_871_ACELP_CRASH_IN_OSBA
                   ,st_ivas->ivas_format
#endif
			) ) != IVAS_ERR_OK )
        {
            return error;
        }
@@ -1516,7 +1520,11 @@ ivas_error ivas_init_decoder(
            }
        }

        if ( ( error = ivas_dirac_sba_config( st_ivas->hQMetaData, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ) ? IVAS_MAX_NUM_BANDS : ( IVAS_MAX_NUM_BANDS - SPAR_DIRAC_SPLIT_START_BAND ) ) ) != IVAS_ERR_OK )
        if ( ( error = ivas_dirac_sba_config( st_ivas->hQMetaData, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ) ? IVAS_MAX_NUM_BANDS : ( IVAS_MAX_NUM_BANDS - SPAR_DIRAC_SPLIT_START_BAND )
#ifdef NONBE_FIX_871_ACELP_CRASH_IN_OSBA
             ,st_ivas->ivas_format
#endif
			) ) != IVAS_ERR_OK )
        {
            return error;
        }
+5 −1
Original line number Diff line number Diff line
@@ -392,7 +392,11 @@ ivas_error ivas_sba_dec_reconfigure(
        ivas_mono_dmx_renderer_close( &st_ivas->hMonoDmxRenderer );
    }

    if ( ( error = ivas_dirac_sba_config( st_ivas->hQMetaData, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ) ? IVAS_MAX_NUM_BANDS : ( IVAS_MAX_NUM_BANDS - SPAR_DIRAC_SPLIT_START_BAND ) ) ) != IVAS_ERR_OK )
    if ( ( error = ivas_dirac_sba_config( st_ivas->hQMetaData, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ) ? IVAS_MAX_NUM_BANDS : ( IVAS_MAX_NUM_BANDS - SPAR_DIRAC_SPLIT_START_BAND )
#ifdef NONBE_FIX_871_ACELP_CRASH_IN_OSBA
           , st_ivas->ivas_format
#endif
		) ) != IVAS_ERR_OK )
    {
        return error;
    }
+1 −1
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ static void ivas_merge_sba_transports(
    {
        for ( j = 0; j < input_frame; j++ )
        {
            data_out_f[i][j] = data_in_f1[i][j] + data_in_f2[i][j];
            data_out_f[i][j] = ( data_in_f1[i][j] + data_in_f2[i][j] );
        }
    }