Commit dbb312a1 authored by TYAGIRIS's avatar TYAGIRIS
Browse files

Merge branch 'sba_vlbr_dirac_band_mapping_issue' into 'main'

[Non-BE][split-non-BE] SBA : fix at very low bitrates for band mapping in DirAC decoder

See merge request !1230
parents 53e45cf1 84c6a3d0
Loading
Loading
Loading
Loading
Loading
+33 −7
Original line number Diff line number Diff line
@@ -194,11 +194,19 @@ ivas_error ivas_dirac_config(

    if ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT )
    {
#ifdef NONBE_FIX_907_VLBR_DIRAC_BAND_MAPPING
        ivas_dirac_config_bands( band_grouping, IVAS_MAX_NUM_BANDS, (int16_t) ( Fs * INV_CLDFB_BANDWIDTH + 0.5f ), dirac_to_spar_md_bands, hQMetaData->useLowerBandRes, hConfig->enc_param_start_band, hFbMdft, 1 );
#else
        ivas_dirac_config_bands( band_grouping, IVAS_MAX_NUM_BANDS, (int16_t) ( Fs * INV_CLDFB_BANDWIDTH + 0.5f ), dirac_to_spar_md_bands, hQMetaData->useLowerBandRes, hConfig->enc_param_start_band, hFbMdft );
#endif
    }
    else
    {
#ifdef NONBE_FIX_907_VLBR_DIRAC_BAND_MAPPING
        ivas_dirac_config_bands( band_grouping, hConfig->nbands, (int16_t) ( Fs * INV_CLDFB_BANDWIDTH + 0.5f ), NULL, 0, 0, hFbMdft, 1 );
#else
        ivas_dirac_config_bands( band_grouping, hConfig->nbands, (int16_t) ( Fs * INV_CLDFB_BANDWIDTH + 0.5f ), NULL, 0, 0, hFbMdft );
#endif
    }

    return error;
@@ -206,11 +214,22 @@ ivas_error ivas_dirac_config(


/*-------------------------------------------------------------------------
 * ivas_dirac_sba_config_bands()
 * ivas_dirac_config_bands()
 *
 * DirAC Configuration freq. band function; used also in MASA decoder
 *------------------------------------------------------------------------*/

#ifdef NONBE_FIX_907_VLBR_DIRAC_BAND_MAPPING
void ivas_dirac_config_bands(
    int16_t *band_grouping, /* o  : band grouping                          */
    const int16_t nbands,   /* i  : number of bands                        */
    const int16_t max_band, /* i  : maximal band index +1                  */
    int16_t *dirac_to_spar_md_bands,
    const int8_t useLowerBandRes,
    const int16_t enc_param_start_band,
    IVAS_FB_MIXER_HANDLE hFbMdft,
    const int8_t BandGroupLowRes )
#else
void ivas_dirac_config_bands(
    int16_t *band_grouping, /* o  : band grouping                          */
    const int16_t nbands,   /* i  : number of bands                        */
@@ -219,6 +238,7 @@ void ivas_dirac_config_bands(
    const int8_t useLowerBandRes,
    const int16_t enc_param_start_band,
    IVAS_FB_MIXER_HANDLE hFbMdft )
#endif
{
    int16_t i;
    {
@@ -269,6 +289,10 @@ void ivas_dirac_config_bands(
            {
                int16_t step = DIRAC_LOW_BANDRES_STEP;
                int16_t reduced_band;
#ifdef NONBE_FIX_907_VLBR_DIRAC_BAND_MAPPING
                if ( BandGroupLowRes )
#endif
                {
                    for ( band = enc_param_start_band + 2, reduced_band = enc_param_start_band + 1; band <= DIRAC_MAX_NBANDS; band += step, reduced_band++ )
                    {
                        band_grouping[reduced_band] = band_grouping[band];
@@ -277,6 +301,8 @@ void ivas_dirac_config_bands(
                    {
                        band_grouping[reduced_band] = max_band;
                    }
                }

                for ( band = enc_param_start_band + ( DIRAC_MAX_NBANDS - enc_param_start_band ) / 2 - 1, reduced_band = DIRAC_MAX_NBANDS - 1; band >= enc_param_start_band; band--, reduced_band -= step )
                {
                    dirac_to_spar_md_bands[reduced_band] = dirac_to_spar_md_bands[band];
+15 −0
Original line number Diff line number Diff line
@@ -3624,6 +3624,18 @@ ivas_error ivas_dirac_config(
    const int16_t enc_dec                                       /* i  : encoder or decoder flag                 */
);

#ifdef NONBE_FIX_907_VLBR_DIRAC_BAND_MAPPING
void ivas_dirac_config_bands(
    int16_t *band_grouping,                                     /* o  : band grouping                           */
    const int16_t nbands,                                       /* i  : number of bands                         */ 
    const int16_t max_band,                                     /* i  : maximal band index +1                   */
    int16_t *dirac_to_spar_md_bands,                            /* o  : mapping of DirAC parameter band index to SPAR FB band index */
    const int8_t useLowerBandRes,                               /* i  : flag indicating lower band resolution for DirAC             */
    const int16_t enc_param_start_band,                         /* i  : band index of first DirAC parameter band                    */
    IVAS_FB_MIXER_HANDLE hFbMdft,                               /* i  : MDFT filterbank handle                                      */ 
    const int8_t BandGroupLowRes                                /* i  : flag indicating lower band grouping resolution for DirAC    */
);
#else
void ivas_dirac_config_bands(
    int16_t *band_grouping,                                     /* o  : band grouping                           */
    const int16_t nbands,                                       /* i  : number of bands                         */ 
@@ -3633,6 +3645,9 @@ void ivas_dirac_config_bands(
    const int16_t enc_param_start_band,                         /* i  : band index of first DirAC parameter band                    */
    IVAS_FB_MIXER_HANDLE hFbMdft
);
#endif



void ivas_get_dirac_sba_max_md_bits(
    const int32_t sba_total_brate,

lib_com/options.h

100644 → 100755
+1 −0
Original line number Diff line number Diff line
@@ -166,6 +166,7 @@
#define NONBE_FIX_926_OSBA_DECODER_CRASH_PLANAR_SBA           /* FhG: issue 926: crash in OSBA decoding with planar FOA */
#define NONBE_FIX_908_OSBA_BR_SWITCHING_CRASH                 /* FhG: issue 908: fix crash in OSBA BR switching with long test vectors */
#define NONBE_FIX_BINAURAL_ROOM_IR_REVERBERATOR               /* FhG: re-enable acidentially disabled reverberator for BINAURAL_ROOM_IR */
#define NONBE_FIX_907_VLBR_DIRAC_BAND_MAPPING                 /* Dlb: issue 907: fix for band mapping at VLBR */ 

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

+9 −1
Original line number Diff line number Diff line
@@ -1275,7 +1275,11 @@ void ivas_qmetadata_to_dirac(
            /* SID/zero-frame: 1 direction, 5 bands, nblocks re-generated out of SID decoder*/
            start_band = 0;
            hDirAC->hConfig->nbands = 5;
#ifdef NONBE_FIX_907_VLBR_DIRAC_BAND_MAPPING
            ivas_dirac_config_bands( hDirAC->band_grouping, hDirAC->hConfig->nbands, nbands, NULL, 0, 0, NULL, 1 );
#else
            ivas_dirac_config_bands( hDirAC->band_grouping, hDirAC->hConfig->nbands, nbands, NULL, 0, 0, NULL );
#endif
            nbands = 5;
        }
        else
@@ -1290,8 +1294,11 @@ void ivas_qmetadata_to_dirac(
                hDirAC->hConfig->nbands = q_direction->cfg.nbands;
            }

#ifdef NONBE_FIX_907_VLBR_DIRAC_BAND_MAPPING
            ivas_dirac_config_bands( hDirAC->band_grouping, hDirAC->hConfig->nbands, nbands, dirac_to_spar_md_bands, hQMetaData->useLowerBandRes, hDirAC->hConfig->enc_param_start_band, hDirAC->hFbMdft, 0 );
#else
            ivas_dirac_config_bands( hDirAC->band_grouping, hDirAC->hConfig->nbands, nbands, dirac_to_spar_md_bands, hQMetaData->useLowerBandRes, hDirAC->hConfig->enc_param_start_band, hDirAC->hFbMdft );

#endif
            nbands = hDirAC->hConfig->nbands;
            if ( hQMetaData->q_direction[0].cfg.nblocks == 0 )
            {
@@ -1349,6 +1356,7 @@ void ivas_qmetadata_to_dirac(
                {
                    qBand_idx = band;
                }

                diffuseness = 1.0f - q_direction->band_data[qBand_idx].energy_ratio[0];
#ifdef DEBUG_MODE_DIRAC
                dbgwrite( &diffuseness, sizeof( float ), 1, 1, "./res/dirac_dec_diffuseness.dat" );
+10 −0
Original line number Diff line number Diff line
@@ -1385,8 +1385,13 @@ ivas_error ivas_init_decoder(
                st_ivas->hQMetaData->numTwoDirBands = (uint8_t) st_ivas->hQMetaData->q_direction[0].cfg.nbands;
            }

#ifdef NONBE_FIX_907_VLBR_DIRAC_BAND_MAPPING
            ivas_dirac_config_bands( band_grouping, IVAS_MAX_NUM_BANDS, (int16_t) ( st_ivas->hDecoderConfig->output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ),
                                     st_ivas->hSpar->dirac_to_spar_md_bands, st_ivas->hQMetaData->useLowerBandRes, st_ivas->hSpar->enc_param_start_band, 0, 1 );
#else
            ivas_dirac_config_bands( band_grouping, IVAS_MAX_NUM_BANDS, (int16_t) ( st_ivas->hDecoderConfig->output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ),
                                     st_ivas->hSpar->dirac_to_spar_md_bands, st_ivas->hQMetaData->useLowerBandRes, st_ivas->hSpar->enc_param_start_band, 0 );
#endif
        }
        st_ivas->sba_dirac_stereo_flag = ivas_get_sba_dirac_stereo_flag( st_ivas );

@@ -1540,8 +1545,13 @@ ivas_error ivas_init_decoder(
                st_ivas->hQMetaData->numTwoDirBands = (uint8_t) st_ivas->hQMetaData->q_direction[0].cfg.nbands;
            }

#ifdef NONBE_FIX_907_VLBR_DIRAC_BAND_MAPPING
            ivas_dirac_config_bands( band_grouping, IVAS_MAX_NUM_BANDS, (int16_t) ( st_ivas->hDecoderConfig->output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ),
                                     st_ivas->hSpar->dirac_to_spar_md_bands, st_ivas->hQMetaData->useLowerBandRes, st_ivas->hSpar->enc_param_start_band, 0, 1 );
#else
            ivas_dirac_config_bands( band_grouping, IVAS_MAX_NUM_BANDS, (int16_t) ( st_ivas->hDecoderConfig->output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ),
                                     st_ivas->hSpar->dirac_to_spar_md_bands, st_ivas->hQMetaData->useLowerBandRes, st_ivas->hSpar->enc_param_start_band, 0 );
#endif
        }

        for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ )
Loading