Commit 6632b160 authored by Tapani Pihlajakuja's avatar Tapani Pihlajakuja
Browse files

Implements system for setting default reverb parameters per format.

parent 87e93d91
Loading
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1579,6 +1579,8 @@ typedef enum
#define RV_LENGTH_NR_FC                         ( RV_FILTER_MAX_FFT_SIZE / 2 ) + 1
#define RV_LENGTH_NR_FC_16KHZ                   ( RV_FILTER_MAX_FFT_SIZE / 4 ) + 1
#define IVAS_REVERB_DEFAULT_N_BANDS             31
#define IVAS_REVERB_MASA_DEFAULT_N_BANDS        60
#define IVAS_REVERB_MC_DEFAULT_N_BANDS          60

#define LR_IAC_LENGTH_NR_FC                     ( RV_LENGTH_NR_FC )
#define LR_IAC_LENGTH_NR_FC_16KHZ               ( RV_LENGTH_NR_FC_16KHZ )
+13 −3
Original line number Diff line number Diff line
@@ -1377,16 +1377,26 @@ ivas_error ivas_init_decoder(
        }
    }

    /*--------------------------------------------------------------------*
     * Allocate and initialize HRTF Statistics handle
     *--------------------------------------------------------------------*/
    /*--------------------------------------------------------------------------*
     * Allocate and initialize HRTF Statistics handle, get default reverb values
     *--------------------------------------------------------------------------*/

    if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB )
    {
        /* Init HRTF statistics */
        if ( ( error = ivas_HRTF_statistics_init( &st_ivas->hHrtfStatistics, output_Fs ) ) != IVAS_ERR_OK )
        {
            return error;
        }

        /* Get default reverb values based on format, if custom values were not given */
        if ( st_ivas->hDecoderConfig->Opt_RendConfigCustom == 0 )
        {
            if ( ( error = ivas_render_config_change_defaults( st_ivas->hRenderConfig, st_ivas->ivas_format ) ) != IVAS_ERR_OK )
            {
                return error;
            }
        }
    }

    /*-----------------------------------------------------------------*
+5 −0
Original line number Diff line number Diff line
@@ -1344,6 +1344,11 @@ ivas_error ivas_render_config_init_from_rom(
    RENDER_CONFIG_HANDLE *hRenderConfig                         /* i/o: Renderer config handle                  */
);

ivas_error ivas_render_config_change_defaults(
    RENDER_CONFIG_HANDLE hRenderConfig,                         /* i/o: Renderer config handle                  */
    IVAS_FORMAT ivas_format                                     /* i:   IVAS format                             */
);


/*----------------------------------------------------------------------------------*
 * Quaternion operations
+50 −0
Original line number Diff line number Diff line
@@ -48,6 +48,12 @@
#define IVAS_REVERB_DEFAULT_PRE_DELAY   0.016f
#define IVAS_REVERB_DEFAULT_INPUT_DELAY 0.1f

#define IVAS_REVERB_MASA_DEFAULT_PRE_DELAY 0.0125f
#define IVAS_REVERB_MASA_DEFAULT_INPUT_DELAY 0.0f

#define IVAS_REVERB_MC_DEFAULT_PRE_DELAY 0.0125f
#define IVAS_REVERB_MC_DEFAULT_INPUT_DELAY 0.0f

#define IVAS_REVERB_DEFAULT_USE_ER 0


@@ -150,3 +156,47 @@ ivas_error ivas_render_config_init_from_rom(

    return IVAS_ERR_OK;
}


/*-------------------------------------------------------------------*
 * ivas_render_config_change_defaults()
 *
 *  Changes default values from ROM, based on the IVAS format
 *-------------------------------------------------------------------*/

ivas_error ivas_render_config_change_defaults(
    RENDER_CONFIG_HANDLE hRenderConfig, /* i/o: Renderer config handle */
    IVAS_FORMAT ivas_format             /* i:   IVAS format            */
)
{
    if ( ivas_format == MASA_FORMAT )
    {
        hRenderConfig->roomAcoustics.nBands = IVAS_REVERB_MASA_DEFAULT_N_BANDS;
        hRenderConfig->roomAcoustics.acousticPreDelay = IVAS_REVERB_MASA_DEFAULT_PRE_DELAY;
        hRenderConfig->roomAcoustics.inputPreDelay = IVAS_REVERB_MASA_DEFAULT_INPUT_DELAY;
        hRenderConfig->roomAcoustics.use_er = IVAS_REVERB_DEFAULT_USE_ER;
        set_zero( &hRenderConfig->roomAcoustics.pFc_input[0], CLDFB_NO_CHANNELS_MAX );
        set_zero( &hRenderConfig->roomAcoustics.pAcoustic_rt60[0], CLDFB_NO_CHANNELS_MAX );
        set_zero( &hRenderConfig->roomAcoustics.pAcoustic_dsr[0], CLDFB_NO_CHANNELS_MAX );

        mvr2r( ivas_reverb_masa_default_fc, hRenderConfig->roomAcoustics.pFc_input, IVAS_REVERB_MASA_DEFAULT_N_BANDS );
        mvr2r( ivas_reverb_masa_default_RT60, hRenderConfig->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_MASA_DEFAULT_N_BANDS );
        mvr2r( ivas_reverb_masa_default_DSR, hRenderConfig->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_MASA_DEFAULT_N_BANDS );
    }
    else if ( ivas_format == MC_FORMAT )
    {
        hRenderConfig->roomAcoustics.nBands = IVAS_REVERB_MC_DEFAULT_N_BANDS;
        hRenderConfig->roomAcoustics.acousticPreDelay = IVAS_REVERB_MC_DEFAULT_PRE_DELAY;
        hRenderConfig->roomAcoustics.inputPreDelay = IVAS_REVERB_MC_DEFAULT_INPUT_DELAY;
        hRenderConfig->roomAcoustics.use_er = IVAS_REVERB_DEFAULT_USE_ER;
        set_zero( &hRenderConfig->roomAcoustics.pFc_input[0], CLDFB_NO_CHANNELS_MAX );
        set_zero( &hRenderConfig->roomAcoustics.pAcoustic_rt60[0], CLDFB_NO_CHANNELS_MAX );
        set_zero( &hRenderConfig->roomAcoustics.pAcoustic_dsr[0], CLDFB_NO_CHANNELS_MAX );

        mvr2r( ivas_reverb_mc_default_fc, hRenderConfig->roomAcoustics.pFc_input, IVAS_REVERB_MC_DEFAULT_N_BANDS );
        mvr2r( ivas_reverb_mc_default_RT60, hRenderConfig->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_MC_DEFAULT_N_BANDS );
        mvr2r( ivas_reverb_mc_default_DSR, hRenderConfig->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_MC_DEFAULT_N_BANDS );
    }

    return IVAS_ERR_OK;
}
+61 −0
Original line number Diff line number Diff line
@@ -380,6 +380,67 @@ const float ivas_reverb_default_DSR[IVAS_REVERB_DEFAULT_N_BANDS] =
    6.2001e-08f, 2.8483e-08f, 2.6267e-08f
};

const float ivas_reverb_masa_default_fc[IVAS_REVERB_MASA_DEFAULT_N_BANDS] =
{
    200.0f, 600.0f, 1000.0f, 1400.0f, 1800.0f, 2200.0f, 2600.0f, 3000.0f, 3400.0f, 3800.0f,
    4200.0f, 4600.0f, 5000.0f, 5400.0f, 5800.0f, 6200.0f, 6600.0f, 7000.0f, 7400.0f, 7800.0f,
    8200.0f, 8600.0f, 9000.0f, 9400.0f, 9800.0f, 10200.0f, 10600.0f, 11000.0f, 11400.0f, 11800.0f,
    12200.0f, 12600.0f, 13000.0f, 13400.0f, 13800.0f, 14200.0f, 14600.0f, 15000.0f, 15400.0f, 15800.0f,
    16200.0f, 16600.0f, 17000.0f, 17400.0f, 17800.0f, 18200.0f, 18600.0f, 19000.0f, 19400.0f, 19800.0f,
    20200.0f, 20600.0f, 21000.0f, 21400.0f, 21800.0f, 22200.0f, 22600.0f, 23000.0f, 23400.0f, 23800.0f
};

const float ivas_reverb_masa_default_RT60[IVAS_REVERB_MASA_DEFAULT_N_BANDS] =
{
    0.300000f, 0.273750f, 0.265941f, 0.263784f, 0.265572f, 0.261790f, 0.252988f, 0.245801f, 0.237429f, 0.228169f,
    0.219536f, 0.211116f, 0.203262f, 0.196144f, 0.189161f, 0.182436f, 0.176237f, 0.170114f, 0.164250f, 0.158791f,
    0.153349f, 0.148312f, 0.143266f, 0.138398f, 0.133929f, 0.129493f, 0.125309f, 0.121833f, 0.118321f, 0.115130f,
    0.112655f, 0.109958f, 0.107465f, 0.105311f, 0.103006f, 0.100783f, 0.098629f, 0.096469f, 0.094335f, 0.092217f,
    0.090115f, 0.088057f, 0.086034f, 0.084061f, 0.082327f, 0.080552f, 0.078876f, 0.077614f, 0.076203f, 0.074918f,
    0.074102f, 0.073068f, 0.072153f, 0.071659f, 0.070969f, 0.070686f, 0.070224f, 0.069878f, 0.069936f, 0.069820f
};

const float ivas_reverb_masa_default_DSR[IVAS_REVERB_MASA_DEFAULT_N_BANDS] =
{
    1.562141e-05f, 7.104127e-06f, 4.699859e-06f, 4.302786e-06f, 5.277136e-06f, 6.382504e-06f, 7.237492e-06f, 9.198124e-06f, 1.073813e-05f, 1.148954e-05f,
    1.063691e-05f, 9.580873e-06f, 8.187593e-06f, 7.045559e-06f, 5.871790e-06f, 4.857175e-06f, 4.194530e-06f, 3.594923e-06f, 3.377501e-06f, 4.063327e-06f,
    4.885563e-06f, 6.276646e-06f, 7.591577e-06f, 8.950862e-06f, 9.394771e-06f, 9.701081e-06f, 9.456415e-06f, 8.555601e-06f, 8.035221e-06f, 7.461511e-06f,
    6.976915e-06f, 6.454842e-06f, 5.885498e-06f, 5.657134e-06f, 5.205549e-06f, 4.791783e-06f, 4.635302e-06f, 4.326645e-06f, 4.245139e-06f, 4.107671e-06f,
    4.033808e-06f, 3.961318e-06f, 3.862554e-06f, 3.742024e-06f, 3.559007e-06f, 3.379882e-06f, 3.192690e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f,
    3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f, 3.129763e-06f
};

const float ivas_reverb_mc_default_fc[IVAS_REVERB_MC_DEFAULT_N_BANDS] =
{
    200.0f, 600.0f, 1000.0f, 1400.0f, 1800.0f, 2200.0f, 2600.0f, 3000.0f, 3400.0f, 3800.0f,
    4200.0f, 4600.0f, 5000.0f, 5400.0f, 5800.0f, 6200.0f, 6600.0f, 7000.0f, 7400.0f, 7800.0f,
    8200.0f, 8600.0f, 9000.0f, 9400.0f, 9800.0f, 10200.0f, 10600.0f, 11000.0f, 11400.0f, 11800.0f,
    12200.0f, 12600.0f, 13000.0f, 13400.0f, 13800.0f, 14200.0f, 14600.0f, 15000.0f, 15400.0f, 15800.0f,
    16200.0f, 16600.0f, 17000.0f, 17400.0f, 17800.0f, 18200.0f, 18600.0f, 19000.0f, 19400.0f, 19800.0f,
    20200.0f, 20600.0f, 21000.0f, 21400.0f, 21800.0f, 22200.0f, 22600.0f, 23000.0f, 23400.0f, 23800.0f
};

const float ivas_reverb_mc_default_RT60[IVAS_REVERB_MC_DEFAULT_N_BANDS] =
{
    0.400000f, 0.370000f, 0.361076f, 0.358610f, 0.360654f, 0.356331f, 0.346272f, 0.338059f, 0.328491f, 0.317907f,
    0.308041f, 0.298419f, 0.289442f, 0.281307f, 0.273326f, 0.265641f, 0.258557f, 0.251559f, 0.244857f, 0.238618f,
    0.232398f, 0.226642f, 0.220876f, 0.215312f, 0.210205f, 0.205135f, 0.200353f, 0.196380f, 0.192367f, 0.188720f,
    0.185892f, 0.182809f, 0.179960f, 0.177499f, 0.174864f, 0.172323f, 0.169862f, 0.167393f, 0.164954f, 0.162534f,
    0.160132f, 0.157780f, 0.155467f, 0.153213f, 0.151231f, 0.149203f, 0.147286f, 0.145845f, 0.144232f, 0.142763f,
    0.141831f, 0.140649f, 0.139604f, 0.139039f, 0.138250f, 0.137927f, 0.137399f, 0.137004f, 0.137070f, 0.136937f
};

const float ivas_reverb_mc_default_DSR[IVAS_REVERB_MC_DEFAULT_N_BANDS] =
{
    2.705517e-05f, 1.205788e-05f, 7.921604e-06f, 7.237642e-06f, 8.891490e-06f, 1.071545e-05f, 1.204347e-05f, 1.518662e-05f, 1.755462e-05f, 1.855867e-05f,
    1.697032e-05f, 1.508359e-05f, 1.271521e-05f, 1.079401e-05f, 8.865647e-06f, 7.221897e-06f, 6.140750e-06f, 5.175824e-06f, 4.778731e-06f, 5.648105e-06f,
    6.661798e-06f, 8.394316e-06f, 9.940707e-06f, 1.146325e-05f, 1.176827e-05f, 1.186537e-05f, 1.128682e-05f, 9.990709e-06f, 9.163022e-06f, 8.314448e-06f,
    7.627883e-06f, 6.903900e-06f, 6.161279e-06f, 5.807365e-06f, 5.227551e-06f, 4.705133e-06f, 4.448539e-06f, 4.053002e-06f, 3.877406e-06f, 3.653874e-06f,
    3.490109e-06f, 3.330512e-06f, 3.151909e-06f, 2.961156e-06f, 2.737213e-06f, 2.520732e-06f, 2.309620e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f,
    2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f, 2.210372e-06f
};


/*----------------------------------------------------------------------------------*
 * Renderer SBA & MC enc/dec matrices
 *----------------------------------------------------------------------------------*/
Loading