Commit 74c54039 authored by Marek Szczerba's avatar Marek Szczerba
Browse files

Merge branch...

Merge branch 'philips/contribution-38-control-metadata-reverb-acoustic-environment-payload' into 'philips/contribution-38-control-metadata-reverb'

Philips/contribution 38 control metadata reverb acoustic environment payload

See merge request !602
parents b91d7ba3 2c986599
Loading
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -142,7 +142,10 @@

#define DISABLE_ADAP_RES_COD_TMP                        /* temporary fix for IVAS-403, disables adaptive residual coding */
/*#define FIX_I4_OL_PITCH*/                             /* fix open-loop pitch used for EVS core switching */
#define CONTROL_METADATA_REVERB                         /* Philips: renderer configuration change to binary format */
#define CONTROL_METADATA_REVERB                         /* Philips: reverb configuration change to binary format */
#ifdef CONTROL_METADATA_REVERB
#define CONTROL_METADATA_EARLY_REFLECTIONS              /* Philips/Qualcomm: early reflections extension to reverb configuration */
#endif
#define COMMAND_LINE_OPTION_LATE_REVERB                 /* Philips: late reverb command line option */
#define USE_HRIR_128_METH5_IRC_53_Q10_SYML_ITRP1_48000  /* Dolby (Orange, FhG) : Contribution 36 - SBA HRIR update */
#define UPDATE_SBA_FILTER                               /* Dolby (Orange, FhG) : Contribution 36 - SBA HRIR update */
+378 −12
Original line number Diff line number Diff line
@@ -49,6 +49,8 @@
#define MAX_ITEM_LENGTH ( 64 )
#ifndef CONTROL_METADATA_REVERB
#define N_REVERB_VECTORS ( 3 )
#else
#define N_ABS_COEFFS ( 6 )
#endif

#define SHORTEST_REV_DEL_LINE       ( 0.015f )
@@ -85,13 +87,26 @@ typedef enum _FREQ_GRID_MODE
    FREQ_GRID_MODE_DEFAULT_BANDING = 2
} FREQ_GRID_MODE;

#ifdef CONTROL_METADATA_EARLY_REFLECTIONS
typedef struct
{
    IVAS_VECTOR3 dimensions;            /* Room dimensions [m] */
    FrequencyGrid *pFG;                 /* Pointer to a frequency grid for absorption coeffs */
    float ( *pAbsCoeff )[N_ABS_COEFFS]; /* Absorption coeffs table pointer */
    IVAS_VECTOR3 *pListenerOrigin;      /* Listener origin */
} EarlyReflectionsConfig;
#endif

typedef struct
{
    uint32_t id;        /* Acoustic environment ID */
    FrequencyGrid *pFG; /* Pointer into Frequency grids table */
    FrequencyGrid *pFG; /* Pointer into Frequency grids table for late reverb coeffs */
    float *pRT60;       /* RT60 table */
    float *pDSR;        /* DSR table */
    float preDelay;     /* Pre-delay */
#ifdef CONTROL_METADATA_EARLY_REFLECTIONS
    EarlyReflectionsConfig *pEarlyReflections; /* Early reflections configuration */
#endif
} AcousticEnv;

struct RenderConfigReader
@@ -122,6 +137,11 @@ typedef enum _RC_LUT
    RC_LUT_FREQ,
    RC_LUT_FREQ_HOP,
    RC_LUT_DSR,
    RC_LUT_METERS,
    RC_LUT_HECTOMETERS,
    RC_LUT_KILOMETERS,
    RC_LUT_CENTIMETERS,
    RC_LUT_ABSORPTION
} RC_LUT;

/*------------------------------------------------------------------------------------------*
@@ -224,9 +244,9 @@ const float lutFreq_Value[] = {
const uint16_t lutFreq_Code[] = { 35, 14, 15, 9, 12, 13, 0, 26, 27, 1, 24, 25, 14, 30, 31, 15, 28, 29, 12, 18, 19, 13, 16, 17, 10, 22, 23, 11, 20, 21, 2, 16, 138, 139, 68 };
const uint8_t lutFreq_Len[] = { 6, 6, 6, 4, 6, 6, 4, 6, 6, 4, 6, 6, 4, 6, 6, 4, 6, 6, 4, 6, 6, 4, 6, 6, 4, 6, 6, 4, 6, 6, 4, 5, 8, 8, 7 };

const float lutFreqHop_Value[] = { 1.090507733f, 1.104089514f, 1.122462048f, 1.148698355f, 1.189207115f, 1.25992105f, 1.414213562f, 2.0f, 4.0f };
const uint16_t lutFreqHop_Code[] = { 12, 13, 2, 3, 0, 1, 1, 2, 7 };
const uint8_t lutFreqHop_Len[] = { 4, 4, 4, 4, 4, 2, 4, 2, 3 };
const float lutFreqHop_Value[] = { 1.059463094f, 1.122462048f, 1.189207115f, 1.259921050f, 1.414213562f, 2.0f, 4.0f };
const uint16_t lutFreqHop_Code[] = { 2, 3, 0, 1, 1, 3, 2 };
const uint8_t lutFreqHop_Len[] = { 4, 4, 4, 2, 4, 2, 2 };

const float lutDsr_Value[] = {
    -150.0f, -149.0f, -148.0f, -147.0f, -146.0f, -145.0f, -144.0f, -143.0f, -142.0f, -141.0f,
@@ -266,6 +286,96 @@ const uint8_t lutDsr_Len[] = {
    8
};

const float lutMeters_Value[] = {
    0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f,
    10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f, 19.0f,
    20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f, 27.0f, 28.0f, 29.0f,
    30.0f, 31.0f, 32.0f, 33.0f, 34.0f, 35.0f, 36.0f, 37.0f, 38.0f, 39.0f,
    40.0f, 41.0f, 42.0f, 43.0f, 44.0f, 45.0f, 46.0f, 47.0f, 48.0f, 49.0f,
    50.0f, 51.0f, 52.0f, 53.0f, 54.0f, 55.0f, 56.0f, 57.0f, 58.0f, 59.0f,
    60.0f, 61.0f, 62.0f, 63.0f, 64.0f, 65.0f, 66.0f, 67.0f, 68.0f, 69.0f,
    70.0f, 71.0f, 72.0f, 73.0f, 74.0f, 75.0f, 76.0f, 77.0f, 78.0f, 79.0f,
    80.0f, 81.0f, 82.0f, 83.0f, 84.0f, 85.0f, 86.0f, 87.0f, 88.0f, 89.0f,
    90.0f, 91.0f, 92.0f, 93.0f, 94.0f, 95.0f, 96.0f, 97.0f, 98.0f, 99.0f
};

const uint16_t lutMeters_Code[] = {
    61, 50, 51, 48, 49, 54, 55, 52, 53, 10,
    11, 8, 9, 14, 15, 12, 13, 2, 3, 0,
    1, 6, 7, 4, 5, 26, 27, 24, 25, 30,
    31, 28, 29, 18, 19, 16, 17, 22, 23, 20,
    21, 42, 43, 40, 41, 46, 47, 44, 45, 16,
    68, 69, 142, 143, 140, 141, 154, 155, 152, 153,
    158, 159, 156, 157, 146, 147, 144, 145, 150, 151,
    148, 149, 234, 235, 232, 233, 238, 239, 236, 237,
    226, 227, 224, 225, 230, 231, 228, 229, 250, 251,
    248, 249, 254, 255, 252, 253, 242, 243, 240, 241
};

const uint8_t lutMeters_Len[] = {
    6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
    6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
    6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
    6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
    6, 6, 6, 6, 6, 6, 6, 6, 6, 5,
    7, 7, 8, 8, 8, 8, 8, 8, 8, 8,
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8
};

const float lutHectometers_Value[] = { 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f };
const uint16_t lutHectometers_Code[] = { 0, 1, 6, 7, 4, 5, 6, 7, 4, 5 };
const uint8_t lutHectometers_Len[] = { 3, 3, 3, 3, 3, 3, 4, 4, 4, 4 };

const float lutKilometers_Value[] = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f };
const uint16_t lutKilometers_Code[] = { 2, 3, 1, 0, 7, 5, 4, 13, 25, 24 };
const uint8_t lutKilometers_Len[] = { 2, 3, 3, 3, 3, 4, 4, 4, 5, 5 };

const float lutCentimeters_Value[] = {
    0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f,
    10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f, 19.0f,
    20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f, 27.0f, 28.0f, 29.0f,
    30.0f, 31.0f, 32.0f, 33.0f, 34.0f, 35.0f, 36.0f, 37.0f, 38.0f, 39.0f,
    40.0f, 41.0f, 42.0f, 43.0f, 44.0f, 45.0f, 46.0f, 47.0f, 48.0f, 49.0f,
    50.0f, 51.0f, 52.0f, 53.0f, 54.0f, 55.0f, 56.0f, 57.0f, 58.0f, 59.0f,
    60.0f, 61.0f, 62.0f, 63.0f, 64.0f, 65.0f, 66.0f, 67.0f, 68.0f, 69.0f,
    70.0f, 71.0f, 72.0f, 73.0f, 74.0f, 75.0f, 76.0f, 77.0f, 78.0f, 79.0f,
    80.0f, 81.0f, 82.0f, 83.0f, 84.0f, 85.0f, 86.0f, 87.0f, 88.0f, 89.0f,
    90.0f, 91.0f, 92.0f, 93.0f, 94.0f, 95.0f, 96.0f, 97.0f, 98.0f, 99.0f
};

const uint16_t lutCentimeters_Code[] = {
    50, 51, 48, 49, 54, 55, 52, 53, 42, 43,
    40, 41, 46, 47, 44, 45, 34, 35, 32, 33,
    38, 39, 36, 37, 58, 59, 56, 57, 62, 63,
    60, 61, 50, 51, 48, 49, 54, 55, 52, 53,
    10, 11, 8, 9, 14, 15, 12, 13, 2, 3,
    0, 1, 6, 7, 4, 5, 26, 27, 24, 25,
    30, 31, 28, 29, 18, 19, 16, 17, 22, 23,
    20, 21, 42, 43, 40, 41, 46, 47, 44, 45,
    34, 35, 32, 33, 38, 39, 36, 37, 122, 123,
    120, 121, 126, 127, 124, 125, 58, 59, 56, 57
};

const uint8_t lutCentimeters_Len[] = {
    6, 6, 6, 6, 6, 6, 6, 6, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 6, 6, 6, 6, 6, 6, 6, 6,
    6, 6, 6, 6, 6, 6, 6, 6, 7, 7,
    7, 7, 7, 7, 7, 7, 6, 6, 6, 6
};

const float lutAbsorption_Value[] = { 0.0f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f };
const uint16_t lutAbsorption_Code[] = { 6, 4, 5, 6, 7, 7, 4, 5, 2, 3, 0 };
const uint8_t lutAbsorption_Len[] = { 3, 3, 3, 4, 4, 3, 4, 4, 4, 4, 3 };

/*------------------------------------------------------------------------------------------*
 * Default frequency grids
 *------------------------------------------------------------------------------------------*/
@@ -302,7 +412,7 @@ const float defaultFrequencyGrid_8[] = {
 *-----------------------------------------------------------------------------------------*/
static ivas_error read_bits(
    RenderConfigReader *this, /* i/o  : Renderer config reader handle */
    uint32_t *pTarget,        /* i/o  : Target read data pointer      */
    uint32_t *pTarget,        /* o    : Target read data pointer      */
    const size_t nBits        /* i    : Number of bits to read        */
)
{
@@ -320,6 +430,7 @@ static ivas_error read_bits(
        return IVAS_ERR_INVALID_RENDER_CONFIG;
    }

    *pTarget = 0;
    for ( n = 0; n < nBits; n++ )
    {
        nByte = ( this->readOffset + n ) >> 3;
@@ -341,7 +452,6 @@ static ivas_error read_bool(
    uint32_t *pResult         /* o    : Target read data pointer      */
)
{
    *pResult = false;
    return read_bits( this, pResult, 1 );
}

@@ -403,10 +513,14 @@ static ivas_error read_code_word(
    uint8_t size;
    uint8_t n;
    uint32_t code;
    uint32_t bits;
    uint32_t nr_bits;
    uint8_t len;

    minLen = 255;
    maxLen = 0;
    bits = 0;
    nr_bits = 0;
    code = 0;

    if ( pResult == NULL )
@@ -471,6 +585,36 @@ static ivas_error read_code_word(
            pLengths = lutDsr_Len;
            size = sizeof lutDsr_Len / sizeof( uint8_t );
            break;
        case RC_LUT_METERS:
            pValues = lutMeters_Value;
            pCodes = lutMeters_Code;
            pLengths = lutMeters_Len;
            size = sizeof lutMeters_Len / sizeof( uint8_t );
            break;
        case RC_LUT_HECTOMETERS:
            pValues = lutHectometers_Value;
            pCodes = lutHectometers_Code;
            pLengths = lutHectometers_Len;
            size = sizeof lutHectometers_Len / sizeof( uint8_t );
            break;
        case RC_LUT_KILOMETERS:
            pValues = lutKilometers_Value;
            pCodes = lutKilometers_Code;
            pLengths = lutKilometers_Len;
            size = sizeof lutKilometers_Len / sizeof( uint8_t );
            break;
        case RC_LUT_CENTIMETERS:
            pValues = lutCentimeters_Value;
            pCodes = lutCentimeters_Code;
            pLengths = lutCentimeters_Len;
            size = sizeof lutCentimeters_Len / sizeof( uint8_t );
            break;
        case RC_LUT_ABSORPTION:
            pValues = lutAbsorption_Value;
            pCodes = lutAbsorption_Code;
            pLengths = lutAbsorption_Len;
            size = sizeof lutAbsorption_Len / sizeof( uint8_t );
            break;
        case RC_LUT_INVALID:
        default:
            return IVAS_ERR_INVALID_RENDER_CONFIG;
@@ -484,11 +628,12 @@ static ivas_error read_code_word(
    }
    for ( len = minLen; len <= maxLen; len++ )
    {
        if ( ( error = read_bits( this, &code, ( len == minLen ) ? minLen : 1 ) ) != IVAS_ERR_OK )
        nr_bits = ( len == minLen ) ? minLen : 1;
        if ( ( error = read_bits( this, &bits, nr_bits ) ) != IVAS_ERR_OK )
        {
            return error;
        }

        code = ( code << nr_bits ) | bits;
        for ( n = 0; n < size; n++ )
        {
            if ( code == pCodes[n] && len == pLengths[n] )
@@ -672,6 +817,105 @@ static ivas_error get_dsr(
    return IVAS_ERR_OK;
}

/*-----------------------------------------------------------------------------------------*
 * Function get_distance()
 * Gets a distance value (in meters)
 *-----------------------------------------------------------------------------------------*/

static ivas_error get_distance(
    RenderConfigReader *this, /* i/o  : Render config reader handle */
    uint16_t isSmall,         /* i    : Flag indicating a small distance */
    float *pResult            /* o    : Distance value              */
)
{
    ivas_error error;
    float value;
    uint32_t flag;

    if ( ( error = read_code_word( this, RC_LUT_METERS, pResult ) ) != IVAS_ERR_OK )
    {
        return error;
    }

    if ( isSmall == false )
    {
        /* addHectometers flag */
        if ( ( error = read_bool( this, &flag ) ) != IVAS_ERR_OK )
        {
            return error;
        }

        if ( flag == true )
        {
            /* Hectometers */
            if ( ( error = read_code_word( this, RC_LUT_HECTOMETERS, &value ) ) != IVAS_ERR_OK )
            {
                return error;
            }
            *pResult += value * 100.0f;

            /* addKilometers flag */
            if ( ( error = read_bool( this, &flag ) ) != IVAS_ERR_OK )
            {
                return error;
            }

            while ( flag == true )
            {
                /* Kilometers */
                if ( ( error = read_code_word( this, RC_LUT_KILOMETERS, &value ) ) != IVAS_ERR_OK )
                {
                    return error;
                }
                *pResult += value * 1000.0f;

                /* addKilometers flag */
                if ( ( error = read_bool( this, &flag ) ) != IVAS_ERR_OK )
                {
                    return error;
                }
            }
        }
    }

    /* addCentimeters flag */
    if ( ( error = read_bool( this, &flag ) ) != IVAS_ERR_OK )
    {
        return error;
    }
    if ( flag == true )
    {
        /* Centimeters */
        if ( ( error = read_code_word( this, RC_LUT_CENTIMETERS, &value ) ) != IVAS_ERR_OK )
        {
            return error;
        }
        *pResult += value * 0.01f;
    }

    return IVAS_ERR_OK;
}

/*-----------------------------------------------------------------------------------------*
 * Function get_absorption()
 * Gets an absorption value
 *-----------------------------------------------------------------------------------------*/

static ivas_error get_absorption(
    RenderConfigReader *this, /* i/o  : Render config reader handle */
    float *pResult            /* o    : Distance value              */
)
{
    ivas_error error;

    if ( ( error = read_code_word( this, RC_LUT_ABSORPTION, pResult ) ) != IVAS_ERR_OK )
    {
        return error;
    }

    return IVAS_ERR_OK;
}

#else
/*-----------------------------------------------------------------------------------------*
 * Function read_bool()
@@ -964,7 +1208,10 @@ static ivas_error RenderConfigReader_readReverb(
{
    uint32_t file_size;
    uint32_t value;
    uint32_t i, n, m;
#ifdef CONTROL_METADATA_EARLY_REFLECTIONS
    uint32_t signx, signy, k;
#endif
    uint32_t i, m, n;
    ivas_error error;
    float freqHop;
    uint32_t gridLen;
@@ -994,6 +1241,20 @@ static ivas_error RenderConfigReader_readReverb(
    fread( pRenderConfigReader->pBitstream, sizeof( uint8_t ), file_size, pReverbConfigFile );
    pRenderConfigReader->length = file_size;

    /****************************/
    /* Read the presence flag   */
    /****************************/
    if ( ( error = read_bool( pRenderConfigReader, &value ) ) != IVAS_ERR_OK )
    {
        return error;
    }

    /* Just return in case no acoustic environment data available */
    if ( value == false )
    {
        return IVAS_ERR_OK;
    }

    /****************************/
    /* Read the frequency grids */
    /****************************/
@@ -1188,6 +1449,9 @@ static ivas_error RenderConfigReader_readReverb(
    {
        pRenderConfigReader->pAE[n].pRT60 = 0;
        pRenderConfigReader->pAE[n].pDSR = 0;
#ifdef CONTROL_METADATA_EARLY_REFLECTIONS
        pRenderConfigReader->pAE[n].pEarlyReflections = 0;
#endif
    }

    for ( n = 0; n < pRenderConfigReader->nAE; n++ )
@@ -1243,6 +1507,102 @@ static ivas_error RenderConfigReader_readReverb(
                return IVAS_ERR_INVALID_RENDER_CONFIG;
            }
        }

#ifdef CONTROL_METADATA_EARLY_REFLECTIONS
        /* Has early reflections */
        if ( ( error = read_bool( pRenderConfigReader, &value ) ) != IVAS_ERR_OK )
        {
            return error;
        }
        if ( value == true )
        {
            if ( ( pRenderConfigReader->pAE[n].pEarlyReflections = (EarlyReflectionsConfig *) malloc( sizeof( EarlyReflectionsConfig ) ) ) == NULL )
            {
                return IVAS_ERR_FAILED_ALLOC;
            }

            /* Room sizes */
            if ( ( error = get_distance( pRenderConfigReader, true, &pRenderConfigReader->pAE[n].pEarlyReflections->dimensions.x ) ) != IVAS_ERR_OK )
            {
                return error;
            }
            if ( ( error = get_distance( pRenderConfigReader, true, &pRenderConfigReader->pAE[n].pEarlyReflections->dimensions.y ) ) != IVAS_ERR_OK )
            {
                return error;
            }
            if ( ( error = get_distance( pRenderConfigReader, true, &pRenderConfigReader->pAE[n].pEarlyReflections->dimensions.z ) ) != IVAS_ERR_OK )
            {
                return error;
            }

            /* Frequency grid ID */
            if ( ( error = get_count_or_index( pRenderConfigReader, &value ) ) != IVAS_ERR_OK )
            {
                return error;
            }
            pRenderConfigReader->pAE[n].pEarlyReflections->pFG = &pRenderConfigReader->pFG[value];

            /* Absorption coefficients */
            if ( ( pRenderConfigReader->pAE[n].pEarlyReflections->pAbsCoeff = malloc( pRenderConfigReader->pAE[n].pEarlyReflections->pFG->nrBands * sizeof( float[N_ABS_COEFFS] ) ) ) == NULL )
            {
                return IVAS_ERR_FAILED_ALLOC;
            }

            for ( m = 0; m < pRenderConfigReader->pAE[n].pEarlyReflections->pFG->nrBands; m++ )
            {
                for ( k = 0; k < N_ABS_COEFFS; k++ )
                {
                    if ( ( error = get_absorption( pRenderConfigReader, &pRenderConfigReader->pAE[n].pEarlyReflections->pAbsCoeff[m][k] ) ) != IVAS_ERR_OK )
                    {
                        return error;
                    }
                }
            }

            /* Has listener origin */
            if ( ( error = read_bool( pRenderConfigReader, &value ) ) != IVAS_ERR_OK )
            {
                return error;
            }

            if ( value == true )
            {
                if ( ( pRenderConfigReader->pAE[n].pEarlyReflections->pListenerOrigin = malloc( sizeof( IVAS_VECTOR3 ) ) ) == NULL )
                {
                    return IVAS_ERR_FAILED_ALLOC;
                }

                if ( ( error = read_bits( pRenderConfigReader, &signx, 1 ) ) != IVAS_ERR_OK )
                {
                    return error;
                }
                if ( ( error = read_bits( pRenderConfigReader, &signy, 1 ) ) != IVAS_ERR_OK )
                {
                    return error;
                }
                if ( ( error = get_distance( pRenderConfigReader, true, &pRenderConfigReader->pAE[n].pEarlyReflections->pListenerOrigin->x ) ) != IVAS_ERR_OK )
                {
                    return error;
                }
                if ( signx == 0 )
                {
                    pRenderConfigReader->pAE[n].pEarlyReflections->pListenerOrigin->x *= -1.0f;
                }
                if ( ( error = get_distance( pRenderConfigReader, true, &pRenderConfigReader->pAE[n].pEarlyReflections->pListenerOrigin->y ) ) != IVAS_ERR_OK )
                {
                    return error;
                }
                if ( signy == 0 )
                {
                    pRenderConfigReader->pAE[n].pEarlyReflections->pListenerOrigin->y *= -1.0f;
                }
                if ( ( error = get_distance( pRenderConfigReader, true, &pRenderConfigReader->pAE[n].pEarlyReflections->pListenerOrigin->z ) ) != IVAS_ERR_OK )
                {
                    return error;
                }
            }
        }
#endif
    }

    /* Cleanup */
@@ -1484,13 +1844,11 @@ ivas_error RenderConfigReader_read(
                            errorHandler( item, ERROR_VALUE_INVALID );
                        }
                    }
#ifdef DEBUGGING
                    else
                    {
                        fprintf( stderr, "Unsupported configuration property %s\n", item );
                    }
#endif
#endif
#ifdef CONTROL_METADATA_REVERB
                    params_idx += params_length;
#endif
@@ -1581,7 +1939,7 @@ void RenderConfigReader_close(
)
{
#ifdef CONTROL_METADATA_REVERB
    uint16_t n;
    uint32_t n;
#endif

    if ( ppRenderConfigReader == NULL || *ppRenderConfigReader == NULL )
@@ -1593,6 +1951,14 @@ void RenderConfigReader_close(
    /* Free the acoustic environments */
    for ( n = 0; n < ( *ppRenderConfigReader )->nAE; n++ )
    {
#ifdef CONTROL_METADATA_EARLY_REFLECTIONS
        if ( ( *ppRenderConfigReader )->pAE[n].pEarlyReflections != NULL )
        {
            free( ( *ppRenderConfigReader )->pAE[n].pEarlyReflections->pListenerOrigin );
            free( ( *ppRenderConfigReader )->pAE[n].pEarlyReflections->pAbsCoeff );
            free( ( *ppRenderConfigReader )->pAE[n].pEarlyReflections );
        }
#endif
        free( ( *ppRenderConfigReader )->pAE[n].pRT60 );
        free( ( *ppRenderConfigReader )->pAE[n].pDSR );
    }
+1 −1
Original line number Diff line number Diff line
version https://git-lfs.github.com/spec/v1
oid sha256:a3b4cf6b770f85bc82129901324078afc0953661b3ff753796d7d4bd15d8c468
oid sha256:84321b26550df78456eea5595f8e7d99cca2b558117cddf117b738f1d8c2e316
size 136
+2 −2
Original line number Diff line number Diff line
version https://git-lfs.github.com/spec/v1
oid sha256:6cb9adc877960d2a7e827126c2f44612569e5554e974b5bb98d3be92cb1ee14a
size 149
oid sha256:6329e3e202458bfae10c8811f4018e8df2c7f2dc8789850ef2d17b72e490f23d
size 150
Loading