Commit 5b9b506c authored by Tapani Pihlajakuja's avatar Tapani Pihlajakuja
Browse files

Adds several fixes to HBR MASA metadata path. Addresses issues 438 and 477 as well.

parent ff5b6f37
Loading
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1235,6 +1235,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
+34 −3
Original line number Diff line number Diff line
@@ -313,20 +313,33 @@ 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;

#ifdef FIX_HBR_MASAMETA
    if ( maxBand == MASA_FREQUENCY_BANDS - 1 )
#else
    if ( sampling_rate == 48000 )
#endif
    {
        return;
    }

#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 +348,7 @@ void masa_sample_rate_band_correction(
        maxBand++;
    }
    maxBand--;

#endif
    numBands48k = config->numCodingBands;

    for ( band = 1; band < config->numCodingBands + 1; band++ )
@@ -345,7 +358,21 @@ void masa_sample_rate_band_correction(
        if ( highBand >= maxBand )
        {
            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 +420,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;
+15 −6
Original line number Diff line number Diff line
@@ -3188,9 +3188,13 @@ int16_t ivas_qmetadata_dec_decode_hr_384_512(
    IVAS_QMETADATA_HANDLE hQMetaData,                           /* i/o: hQMetaData handle                       */
    uint16_t *bitstream,                                        /* i  : bitstream                               */
    int16_t *index,                                             /* i/o: bitstream position                      */
    const SPHERICAL_GRID_DATA *sph_grid16,                      /* i  : spherical grid for deindexing           */
    const int16_t bits_sph_idx,
    const int16_t bits_sp_coh
    SPHERICAL_GRID_DATA *sph_grid16,                            /* i: spherical grid for deindexing             */
    int16_t bits_sph_idx,
    int16_t bits_sp_coh
#ifdef FIX_HBR_MASAMETA
    ,
    uint8_t ncoding_bands_config
#endif
);
#endif

@@ -5218,7 +5222,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
@@ -481,6 +481,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
@@ -220,6 +220,7 @@

#define HYBRID_ITD_MAX                                 /* FhG: Improvement for DFT-stereo for cases with large ITDs */

#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