Commit f404d857 authored by Jan Brouwer's avatar Jan Brouwer
Browse files

Combined the use of text-based render configuration files and binary reverb configuration files

parent 77ddec94
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -505,11 +505,7 @@ int main(
            goto cleanup;
        }

#ifdef CONTROL_METADATA_REVERB
        if ( RenderConfigReader_read( renderConfigReader ) != IVAS_ERR_OK )
#else
        if ( RenderConfigReader_read( renderConfigReader, &renderConfig ) != IVAS_ERR_OK )
#endif
        {
            fprintf( stderr, "Failed to read renderer configuration from file %s\n\n", arg.renderConfigFilename );
            goto cleanup;
@@ -521,6 +517,11 @@ int main(
            fprintf( stderr, "Failed to get acoustic environment with ID: %d\n\n", ACOUSTIC_ENVIRONMENT_ID );
            goto cleanup;
        }
        if ( RenderConfigReader_checkValues( &renderConfig ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "Invalid reverberation configuration parameters\n\n" );
            goto cleanup;
        }

#ifdef COMMAND_LINE_OPTION_LATE_REVERB
        if ( arg.outputFormat == IVAS_DEC_OUTPUT_BINAURAL_REVERB )
+5 −4
Original line number Diff line number Diff line
@@ -742,11 +742,7 @@ int main(
            exit( -1 );
        }

#ifdef CONTROL_METADATA_REVERB
        if ( RenderConfigReader_read( renderConfigReader ) != IVAS_ERR_OK )
#else
        if ( RenderConfigReader_read( renderConfigReader, &renderConfig ) != IVAS_ERR_OK )
#endif
        {
            fprintf( stderr, "Failed to read renderer configuration from file %s\n", args.renderConfigFilePath );
            exit( -1 );
@@ -758,6 +754,11 @@ int main(
            fprintf( stderr, "Failed to get acoustic environment with ID: %d\n\n", ACOUSTIC_ENVIRONMENT_ID );
            exit( -1 );
        }
        if ( RenderConfigReader_checkValues( &renderConfig ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "Invalid reverberation configuration parameters\n\n" );
            exit( -1 );
        }
#ifdef COMMAND_LINE_OPTION_LATE_REVERB
        if ( args.outConfig.audioConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_REVERB )
        {
+54 −26
Original line number Diff line number Diff line
@@ -35,10 +35,9 @@
#include "prot.h"
#ifdef CONTROL_METADATA_REVERB
#include <math.h>
#else
#endif
#include <ctype.h>
#include "cmdl_tools.h"
#endif

/*------------------------------------------------------------------------------------------*
 * PreProc Macros
@@ -46,7 +45,9 @@

#ifndef CONTROL_METADATA_REVERB
#define MAX_LINE_LENGTH  ( 1024 )
#endif
#define MAX_ITEM_LENGTH ( 64 )
#ifndef CONTROL_METADATA_REVERB
#define N_REVERB_VECTORS ( 3 )
#endif

@@ -702,6 +703,7 @@ static int16_t read_bool(

    return true;
}
#endif

/*-----------------------------------------------------------------------------------------*
 * Function read_vector()
@@ -823,7 +825,7 @@ static int32_t errorHandler(
 * Verifies if the configuration parameters lie within acceptable limits
 *------------------------------------------------------------------------------------------*/

static ivas_error RenderConfigReader_checkValues(
ivas_error RenderConfigReader_checkValues(
    IVAS_RENDER_CONFIG_HANDLE hRenderConfig /* o  : Renderer configuration handle          */
)
{
@@ -908,7 +910,6 @@ static ivas_error RenderConfigReader_checkValues(

    return IVAS_ERR_OK;
}
#endif

/*------------------------------------------------------------------------------------------*
 * RenderConfigReader_open()
@@ -933,17 +934,7 @@ ivas_error RenderConfigReader_open(
        return IVAS_ERR_FAILED_FILE_OPEN;
    }

#ifdef CONTROL_METADATA_REVERB
    pConfigFile = fopen( pConfigPath, "rb" );
#else
    /* use corresponding .cfg file */
    length = strlen( pConfigPath );
    if ( length >= 4 && strcmp( &pConfigPath[length - 4], ".dat" ) == 0 )
    {
        strcpy( &pConfigPath[length - 4], ".cfg" );
    }
    pConfigFile = fopen( pConfigPath, "r" );
#endif

    if ( !pConfigFile )
    {
@@ -959,13 +950,14 @@ ivas_error RenderConfigReader_open(


/*------------------------------------------------------------------------------------------*
 * RenderConfigReader_read()
 * RenderConfigReader_readReverb()
 *
 * Reads the configuration from a file
 * Reads the binary reverb configuration from a file
 *------------------------------------------------------------------------------------------*/

#ifdef CONTROL_METADATA_REVERB
ivas_error RenderConfigReader_read(
static ivas_error RenderConfigReader_readReverb(
    const char *pReverbConfigPath,          /* i   : Reverb configuration file path        */
    RenderConfigReader *pRenderConfigReader /* i/o : RenderConfigReader handle             */
)
{
@@ -977,11 +969,20 @@ ivas_error RenderConfigReader_read(
    uint32_t gridLen;
    uint32_t subGridLen;
    const float *pGrid;
    FILE *pReverbConfigFile;

    /* Open the configuration file  */
    pReverbConfigFile = fopen( pReverbConfigPath, "rb" );

    if ( !pReverbConfigFile )
    {
        return IVAS_ERR_FAILED_FILE_OPEN;
    }

    /* Read the bitstream */
    fseek( pRenderConfigReader->pConfigFile, 0, SEEK_END );
    file_size = ftell( pRenderConfigReader->pConfigFile );
    rewind( pRenderConfigReader->pConfigFile );
    fseek( pReverbConfigFile, 0, SEEK_END );
    file_size = ftell( pReverbConfigFile );
    rewind( pReverbConfigFile );

    pRenderConfigReader->pBitstream = (uint8_t *) malloc( file_size * sizeof( uint8_t ) );
    if ( pRenderConfigReader->pBitstream == NULL )
@@ -989,7 +990,7 @@ ivas_error RenderConfigReader_read(
        return IVAS_ERR_FAILED_ALLOC;
    }

    fread( pRenderConfigReader->pBitstream, sizeof( uint8_t ), file_size, pRenderConfigReader->pConfigFile );
    fread( pRenderConfigReader->pBitstream, sizeof( uint8_t ), file_size, pReverbConfigFile );
    pRenderConfigReader->length = file_size;

    /****************************/
@@ -1250,7 +1251,8 @@ ivas_error RenderConfigReader_read(
    return IVAS_ERR_OK;
}

#else
#endif

ivas_error RenderConfigReader_read(
    RenderConfigReader *pRenderConfigReader, /* i/o : RenderConfigReader handle           */
    IVAS_RENDER_CONFIG_HANDLE hRenderConfig  /* o   : Renderer configuration handle       */
@@ -1266,7 +1268,11 @@ ivas_error RenderConfigReader_read(
    char chapter[MAX_ITEM_LENGTH + 1];
    char *pValue;
    int16_t nBandsInput;
#ifdef CONTROL_METADATA_REVERB
    ivas_error error;
#else
    int16_t nVectorsMissing;
#endif

    fseek( pRenderConfigReader->pConfigFile, 0, SEEK_END );
    file_size = ftell( pRenderConfigReader->pConfigFile );
@@ -1275,7 +1281,9 @@ ivas_error RenderConfigReader_read(
    pParams = (char *) calloc( file_size + 1, sizeof( char ) );
    pTemp = (char *) calloc( file_size + 1, sizeof( char ) );
    nBandsInput = hRenderConfig->room_acoustics.nBands;
#ifndef CONTROL_METADATA_REVERB
    nVectorsMissing = N_REVERB_VECTORS;
#endif

    /* read file line by line */
    while ( fgets( pConfig_str, file_size, pRenderConfigReader->pConfigFile ) != NULL )
@@ -1308,6 +1316,7 @@ ivas_error RenderConfigReader_read(
            to_upper( chapter );

            /* interpret params */
#ifndef CONTROL_METADATA_REVERB
            if ( strcmp( chapter, "ROOMACOUSTICS" ) == 0 )
            {
                params_idx = 0;
@@ -1397,6 +1406,13 @@ ivas_error RenderConfigReader_read(
            }
#ifdef DEBUGGING
            else if ( strcmp( chapter, "GENERAL" ) == 0 && strlen( pParams ) != 0 )
#endif
#else
#ifdef DEBUGGING
            if ( strcmp( chapter, "GENERAL" ) == 0 && strlen( pParams ) != 0 )
#endif
#endif
#ifdef DEBUGGING
            {
                params_idx = 0;
                pValue = (char *) calloc( strlen( pParams ), sizeof( char ) );
@@ -1426,6 +1442,15 @@ ivas_error RenderConfigReader_read(
                            errorHandler( item, ERROR_VALUE_INVALID );
                        }
                    }
                    if ( strcmp( item, "REVERBFILE" ) == 0 )
                    {
                        // TODO: need to preserve file name case for non Windows OSes
                        if ( ( error = RenderConfigReader_readReverb(pValue, pRenderConfigReader) ) != IVAS_ERR_OK)
                        {
                            printf( "RenderConfigReader_readReverb(%s) returned %d\n", pValue, error );
                            errorHandler( item, error );
                        }
                    }
#ifdef DEBUGGING
                    else
                    {
@@ -1462,9 +1487,12 @@ ivas_error RenderConfigReader_read(
        fprintf( stderr, "Errors occurred\n" );
        return IVAS_ERR_FAILED_FILE_PARSE;
    }
    return RenderConfigReader_checkValues( hRenderConfig );
}
#ifdef CONTROL_METADATA_REVERB
    return IVAS_ERR_OK;
#else
    RenderConfigReader_checkValues( hRenderConfig );
#endif
}

#ifdef CONTROL_METADATA_REVERB
/*------------------------------------------------------------------------------------------*
+6 −7
Original line number Diff line number Diff line
@@ -51,25 +51,24 @@ ivas_error RenderConfigReader_open(
    RenderConfigReader **ppRenderConfigReader /* o  : RenderConfigReader handle             */
);

/* Reads a configuration                                                                    */
#ifdef CONTROL_METADATA_REVERB
ivas_error RenderConfigReader_read(
    RenderConfigReader *pRenderConfigReader  /* i  : RenderConfigReader handle              */
);

/* Get an acoustic environment                                                              */
ivas_error RenderConfigReader_getAcousticEnvironment(
    RenderConfigReader *pRenderConfigReader, /* i  : RenderConfigReader handle              */
    uint16_t id,                             /* i  : Acoustic environment ID                */
    IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pAcEnv  /* o  : Target acoustic environment pointer    */
);
/* Verifies configuration parameters                                                        */
ivas_error RenderConfigReader_checkValues(
    IVAS_RENDER_CONFIG_HANDLE hRenderConfig  /* o  : Renderer configuration handle          */
);
#endif

#else
/* Reads a configuration                                                                    */
ivas_error RenderConfigReader_read(
    RenderConfigReader *pRenderConfigReader, /* i  : RenderConfigReader handle              */
    IVAS_RENDER_CONFIG_HANDLE hRenderConfig  /* o  : Renderer configuration handle          */
);
#endif

/* Closes the renderer configuration reader and deallocates memory                          */
void RenderConfigReader_close(
+8 −8
Original line number Diff line number Diff line
@@ -909,35 +909,35 @@

// Multi-channel 5_1 at 512 kbps, 48kHz in, 48kHz out, BINAURAL_REVERB out Config renderer
../IVAS_cod -mc 5_1 512000 48 testv/stv51MC48c.wav bit
../IVAS_dec -render_config testv/rend_config_renderer.dat BINAURAL_REVERB 48 bit testv/stv51MC48c.wav_MC51_512000_48-48_MC_Config_renderer.tst
../IVAS_dec -render_config testv/rend_config_renderer.cfg BINAURAL_REVERB 48 bit testv/stv51MC48c.wav_MC51_512000_48-48_MC_Config_renderer.tst

// Multi-channel 5_1 at 512 kbps, 48kHz in, 32kHz out, BINAURAL_REVERB out Config renderer
../IVAS_cod -mc 5_1 512000 48 testv/stv51MC48c.wav bit
../IVAS_dec -render_config testv/rend_config_renderer.dat BINAURAL_REVERB 32 bit testv/stv51MC48c.wav_MC51_512000_48-32_MC_Config_renderer.tst
../IVAS_dec -render_config testv/rend_config_renderer.cfg BINAURAL_REVERB 32 bit testv/stv51MC48c.wav_MC51_512000_48-32_MC_Config_renderer.tst

// Multi-channel 5_1 at 512 kbps, 48kHz in, 16kHz out, BINAURAL_REVERB out Config renderer
../IVAS_cod -mc 5_1 512000 48 testv/stv51MC48c.wav bit
../IVAS_dec -render_config testv/rend_config_renderer.dat BINAURAL_REVERB 16 bit testv/stv51MC48c.wav_MC51_512000_48-16_MC_Config_renderer.tst
../IVAS_dec -render_config testv/rend_config_renderer.cfg BINAURAL_REVERB 16 bit testv/stv51MC48c.wav_MC51_512000_48-16_MC_Config_renderer.tst

// Multi-channel 5_1 at 512 kbps, 48kHz in, 48kHz out, BINAURAL_REVERB out Config hospital_patientroom
../IVAS_cod -mc 5_1 512000 48 testv/stv51MC48c.wav bit
../IVAS_dec -render_config testv/rend_config_hospital_patientroom.dat BINAURAL_REVERB 48 bit testv/stv51MC48c.wav_MC51_512000_48-48_MC_Config_hospital_patientroom.tst
../IVAS_dec -render_config testv/rend_config_hospital_patientroom.cfg BINAURAL_REVERB 48 bit testv/stv51MC48c.wav_MC51_512000_48-48_MC_Config_hospital_patientroom.tst

// Multi-channel 5_1 at 512 kbps, 48kHz in, 48kHz out, BINAURAL_REVERB out Config recreation
../IVAS_cod -mc 5_1 512000 48 testv/stv51MC48c.wav bit
../IVAS_dec -render_config testv/rend_config_recreation.dat BINAURAL_REVERB 48 bit testv/stv51MC48c.wav_MC51_512000_48-48_MC_Config_recreation.tst
../IVAS_dec -render_config testv/rend_config_recreation.cfg BINAURAL_REVERB 48 bit testv/stv51MC48c.wav_MC51_512000_48-48_MC_Config_recreation.tst

// Multi-channel 5_1_2 at 512 kbps, 48kHz in, 48kHz out, BINAURAL_REVERB out Config renderer
../IVAS_cod -mc 5_1_2 512000 48 testv/stv512MC48c.wav bit
../IVAS_dec -render_config testv/rend_config_renderer.dat BINAURAL_REVERB 48 bit testv/stv512MC48c.wav_MC512_512000_48-48_MC_Config_renderer.tst
../IVAS_dec -render_config testv/rend_config_renderer.cfg BINAURAL_REVERB 48 bit testv/stv512MC48c.wav_MC512_512000_48-48_MC_Config_renderer.tst

// Multi-channel 5_1_4 at 512 kbps, 48kHz in, 48kHz out, BINAURAL_REVERB out Config renderer
../IVAS_cod -mc 5_1_4 512000 48 testv/stv514MC48c.wav bit
../IVAS_dec -render_config testv/rend_config_renderer.dat BINAURAL_REVERB 48 bit testv/stv514MC48c.wav_MC514_512000_48-48_MC_Config_renderer.tst
../IVAS_dec -render_config testv/rend_config_renderer.cfg BINAURAL_REVERB 48 bit testv/stv514MC48c.wav_MC514_512000_48-48_MC_Config_renderer.tst

// Multi-channel 7_1_4 at 512 kbps, 48kHz in, 48kHz out, BINAURAL_REVERB out Config renderer
../IVAS_cod -mc 7_1_4 512000 48 testv/stv714MC48c.wav bit
../IVAS_dec -render_config testv/rend_config_renderer.dat BINAURAL_REVERB 48 bit testv/stv714MC48c.wav_MC714_512000_48-48_MC_Config_renderer.tst
../IVAS_dec -render_config testv/rend_config_renderer.cfg BINAURAL_REVERB 48 bit testv/stv714MC48c.wav_MC714_512000_48-48_MC_Config_renderer.tst

// Multi-channel 5_1 bitrate switching from 13.2 kbps to 512 kbps, 48kHz in, 48kHz out, 7_1_4 out
../IVAS_cod -mc 5_1 ../scripts/switchPaths/sw_mctech_5fr.bin 48 testv/stv51MC48c.wav bit
Loading