Commit efb96ffc authored by vasilache's avatar vasilache
Browse files

Merge branch 'nokia/fix-hrb-masa-metadata' into 'main'

[non-BE] Adds several fixes to HBR MASA metadata path. Addresses issues 438 and 477 as well.

See merge request !658
parents 7a240bd5 12ff2a66
Loading
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1206,6 +1206,9 @@ enum
#define MASA_MAX_BITS_HR                        2000                        /* max. bit-budget for MASA metadata in HR mode*/
#define HR_MASA_ER_LEVELS                       16
#endif
#ifdef FIX_HBR_MASAMETA
#define MAX_REDUCED_NBANDS                      18                          /* max number of subbands that is less than the default value 24 */
#endif

#define LIMIT_ER_ELEVATION_ENC                  4
#define LIMIT_ER_SIMPLE_ENC                     6
+31 −3
Original line number Diff line number Diff line
@@ -313,20 +313,31 @@ void masa_sample_rate_band_correction(
    MASA_CODEC_CONFIG *config,        /* i/o: MASA codec config                     */
    int16_t *band_mapping,            /* i/o: Band mapping used and modified        */
    IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: QMetadata structure for modification  */
    const int32_t sampling_rate       /* i  : Sampling rate                         */
    ,
#ifdef FIX_HBR_MASAMETA
    const uint8_t maxBand, /* i  : max band                              */
    uint8_t is_encoder,    /* i: signals if called at encoder            */
#else
    const int32_t sampling_rate, /* i  : Sampling rate                         */
#endif
    MASA_DECODER_EXT_OUT_META_HANDLE hExtOutMeta /* i/o: MASA decoder metadata ext out buffer */
)
{
    uint8_t band, sf;
#ifdef FIX_HBR_MASAMETA
    int16_t highBand;
#else
    int16_t maxBin, highBand, maxBand;
#endif
    uint8_t numBands48k;

#ifndef FIX_HBR_MASAMETA
    if ( sampling_rate == 48000 )
    {
        return;
    }
#endif

#ifndef FIX_HBR_MASAMETA
    /* Find maximum band usable at this sample rate */
    maxBin = (int16_t) ( CLDFB_NO_CHANNELS_MAX * sampling_rate / 48000 );
    maxBand = 0;
@@ -335,7 +346,7 @@ void masa_sample_rate_band_correction(
        maxBand++;
    }
    maxBand--;

#endif
    numBands48k = config->numCodingBands;

    for ( band = 1; band < config->numCodingBands + 1; band++ )
@@ -346,6 +357,19 @@ void masa_sample_rate_band_correction(
        {
            config->numCodingBands = band;
            hQMetaData->numCodingBands = band;
#ifdef FIX_HBR_MASAMETA
            if ( is_encoder )
            {
                if ( hQMetaData->q_direction->cfg.nbands > band )
                {
                    hQMetaData->q_direction->cfg.nbands = band;
                }
                if ( hQMetaData->no_directions == 2 && hQMetaData->q_direction[1].cfg.nbands > band )
                {
                    hQMetaData->q_direction[1].cfg.nbands = band;
                }
            }
#endif
            band_mapping[band] = maxBand;
            break;
        }
@@ -393,7 +417,11 @@ void masa_sample_rate_band_correction(
        /* in decoder, zero the EXT out MASA meta buffer */
        for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ )
        {
#ifdef FIX_HBR_MASAMETA
            for ( band = hQMetaData->numCodingBands; band < MASA_FREQUENCY_BANDS; band++ )
#else
            for ( band = config->numCodingBands; band < MASA_FREQUENCY_BANDS; band++ )
#endif
            {
                hExtOutMeta->directionIndex[0][sf][band] = SPH_IDX_FRONT;
                hExtOutMeta->directToTotalRatio[0][sf][band] = 0u;
+13 −4
Original line number Diff line number Diff line
@@ -3169,6 +3169,10 @@ int16_t ivas_qmetadata_dec_decode_hr_384_512(
    const SPHERICAL_GRID_DATA *sph_grid16,                      /* i: spherical grid for deindexing             */
    const int16_t bits_sph_idx,
    const int16_t bits_sp_coh
#ifdef FIX_HBR_MASAMETA
    ,
    uint8_t ncoding_bands_config
#endif
);
#endif

@@ -5139,7 +5143,12 @@ void masa_sample_rate_band_correction(
    MASA_CODEC_CONFIG *config,                                  /* i/o: MASA codec config                               */
    int16_t *band_mapping,                                      /* i/o: Band mapping used and modified                  */
    IVAS_QMETADATA_HANDLE hQMetaData,                           /* i/o: QMetadata structure for modification            */
#ifdef FIX_HBR_MASAMETA
    const uint8_t maxBand,                                      /* i  : max band                                        */
    uint8_t is_encoder,                                         /* i: signals if called at encoder                      */
#else
    const int32_t sampling_rate,                                /* i  : sampling rate                                   */
#endif
    MASA_DECODER_EXT_OUT_META_HANDLE hExtOutMeta                /* i/o: MASA decoder metadata ext out buffer            */
);

+3 −0
Original line number Diff line number Diff line
@@ -471,6 +471,9 @@ typedef struct
    int16_t nbands;
    int16_t nblocks;
    int16_t start_band;
#ifdef FIX_HBR_MASAMETA
    uint8_t inactiveBands;
#endif
    int16_t search_effort;
    MC_LS_SETUP mc_ls_setup;

+1 −0
Original line number Diff line number Diff line
@@ -159,6 +159,7 @@
#define FIX_487_LOWRATE_SBA_TUNING_FIX                  /* Dlb: TUning fix for low bitrate cases to match theoretical longest SPAR MD bitstream */
#define FIX_490_MASA_2TC_LBR_DTX                        /* Nokia: Fixes issue 490 by correcting condition. */

#define FIX_HBR_MASAMETA                                /* Nokia: Fixes to HBR MASA metadata at 384 and 512 kbps. Addresses issues 438 and 477 as well. */

/* ################## End DEVELOPMENT switches ######################### */
/* clang-format on */
Loading