Commit 146c6fb4 authored by Marek Szczerba's avatar Marek Szczerba
Browse files

Merge branch '196-refactor-renderer-output-configuration' into 'main'

[Renderer non-BE] [ref-using-main] Refactoring of binaural output configuration. BINAURAL_HRIR_REVERB as a...

See merge request !673
parents 8d91fd2c 1101d393
Loading
Loading
Loading
Loading
Loading
+48 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "options.h"
#include "lib_dec.h"
#include "cmdl_tools.h"
#include "audio_file_writer.h"
@@ -275,7 +276,11 @@ int main(
    if ( arg.hrtfReaderEnabled )
    {
        /* sanity check */
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
        if ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM_IR && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM_REVERB )
#else
        if ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM )
#endif
        {
            arg.hrtfReaderEnabled = false;
            fprintf( stderr, "\nError: HRTF binary file cannot be used in this output configuration.\n\n" );
@@ -297,7 +302,11 @@ int main(
    if ( arg.enableHeadRotation )
    {
        /* sanity check */
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
        if ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM_IR && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM_REVERB )
#else
        if ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM )
#endif
        {
            fprintf( stderr, "\nError: Head-rotation file file cannot be used in this output configuration.\n\n" );
            goto cleanup;
@@ -321,7 +330,11 @@ int main(
    if ( arg.enableReferenceRotation )
    {
        /* sanity check */
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
        if ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM_IR && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM_REVERB )
#else
        if ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM )
#endif
        {
            fprintf( stderr, "\nError: Reference rotation file cannot be used in this output configuration.\n\n" );
            goto cleanup;
@@ -352,7 +365,11 @@ int main(
    if ( arg.enableReferenceVectorTracking )
    {
        /* sanity check */
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
        if ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM_IR && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM_REVERB )
#else
        if ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM )
#endif
        {
            fprintf( stderr, "\nError: Reference vector trajectory file cannot be used in this output configuration.\n\n" );
            goto cleanup;
@@ -407,7 +424,11 @@ int main(
    if ( arg.renderConfigEnabled )
    {
        /* sanity check */
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
        if ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM_IR && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM_REVERB )
#else
        if ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM )
#endif
        {
            fprintf( stderr, "\nError: Renderer configuration file cannot be used in this output configuration.\n\n" );
            goto cleanup;
@@ -575,9 +596,17 @@ int main(
        IVAS_RENDER_CONFIG_DATA renderConfig;

        /* sanity check */
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
        if ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM_IR && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM_REVERB )
#else
        if ( arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL_ROOM && arg.outputFormat != IVAS_DEC_OUTPUT_BINAURAL )
#endif
        {
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
            fprintf( stderr, "\nExternal Renderer Config is supported only for binaural output configurations. Exiting. \n\n" );
#else
            fprintf( stderr, "\nExternal Renderer Config is supported only for BINAURAL and BINAURAL_ROOM. Exiting. \n\n" );
#endif
            goto cleanup;
        }

@@ -864,6 +893,20 @@ static IVAS_DEC_AUDIO_CONFIG cmdline2config(
    {
        output_config = IVAS_DEC_OUTPUT_HOA3;
    }
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
    else if ( strcmp( argv_to_upper, "BINAURAL" ) == 0 )
    {
        output_config = IVAS_DEC_OUTPUT_BINAURAL;
    }
    else if ( strcmp( argv_to_upper, "BINAURAL_ROOM_IR" ) == 0 )
    {
        output_config = IVAS_DEC_OUTPUT_BINAURAL_ROOM_IR;
    }
    else if ( strcmp( argv_to_upper, "BINAURAL_ROOM_REVERB" ) == 0 )
    {
        output_config = IVAS_DEC_OUTPUT_BINAURAL_ROOM_REVERB;
    }
#else
    else if ( strcmp( argv_to_upper, "BINAURAL" ) == 0 )
    {
        output_config = IVAS_DEC_OUTPUT_BINAURAL;
@@ -872,6 +915,7 @@ static IVAS_DEC_AUDIO_CONFIG cmdline2config(
    {
        output_config = IVAS_DEC_OUTPUT_BINAURAL_ROOM;
    }
#endif
    else
    {
        output_config = IVAS_DEC_OUTPUT_LS_CUSTOM;
@@ -1421,7 +1465,11 @@ static void usage_dec( void )
    fprintf( stdout, "Mandatory parameters:\n" );
    fprintf( stdout, "---------------------\n" );
    fprintf( stdout, "OutputConf           : Output configuration: MONO, STEREO, 5_1, 7_1, 5_1_2, 5_1_4, 7_1_4, FOA,\n" );
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
    fprintf( stdout, "                       HOA2, HOA3, BINAURAL, BINAURAL_ROOM_IR, BINAURAL_ROOM_REVERB, EXT\n" );
#else
    fprintf( stdout, "                       HOA2, HOA3, BINAURAL, BINAURAL_ROOM, EXT\n" );
#endif
    fprintf( stdout, "                       By default, channel order and loudspeaker positions are equal to the\n" );
    fprintf( stdout, "                       encoder. For loudspeaker outputs, OutputConf can be a custom loudspeaker\n" );
    fprintf( stdout, "                       layout file. See readme.txt for details.\n" );
+65 −1
Original line number Diff line number Diff line
@@ -236,25 +236,41 @@ static const CmdLnParser_Option cliOptions[] = {
        .id = CmdLnOptionId_trajFile,
        .match = "trajectory_file",
        .matchShort = "tf",
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
        .description = "Head rotation trajectory file for simulation of head tracking (only for binaural outputs)",
#else
        .description = "Head rotation trajectory file for simulation of head tracking (only for BINAURAL and BINAURAL_ROOM outputs)",
#endif
    },
    {
        .id = CmdLnOptionId_refRotFile,
        .match = "reference_rotation_file",
        .matchShort = "rf",
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
        .description = "Reference rotation trajectory file for simulation of head tracking (only for binaural outputs)",
#else
        .description = "Reference rotation trajectory file for simulation of head tracking (only for BINAURAL and BINAURAL_ROOM outputs)",
#endif
    },
    {
        .id = CmdLnOptionId_customHrtfFile,
        .match = "custom_hrtf",
        .matchShort = "hrtf",
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
        .description = "Custom HRTF file for binaural rendering (only for binaural outputs)",
#else
        .description = "Custom HRTF file for binaural rendering (only for BINAURAL and BINAURAL_ROOM outputs)",
#endif
    },
    {
        .id = CmdLnOptionId_renderConfigFile,
        .match = "render_config",
        .matchShort = "rc",
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
        .description = "Binaural renderer configuration file (only for binaural outputs)",
#else
        .description = "Binaural renderer configuration file (only for BINAURAL and BINAURAL_ROOM outputs)",
#endif
    },
    {
        .id = CmdLnOptionId_nonDiegeticPan,
@@ -270,7 +286,11 @@ static const CmdLnParser_Option cliOptions[] = {
        .id = CmdLnOptionId_orientationTracking,
        .match = "tracking_type",
        .matchShort = "otr",
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
        .description = "Head orientation tracking type: 'none', 'ref', 'avg' or `ref_vec` or `ref_vec_lev` (only for binaural outputs)",
#else
        .description = "Head orientation tracking type: 'none', 'ref', 'avg' or `ref_vec` or `ref_vec_lev` (only for BINAURAL and BINAURAL_ROOM)",
#endif
    },
    {
        .id = CmdlnOptionId_lfePosition,
@@ -310,7 +330,11 @@ static const CmdLnParser_Option cliOptions[] = {
        .id = CmdLnOptionId_referenceVectorFile,
        .match = "reference_vector_file",
        .matchShort = "rvf",
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
        .description = "Reference vector trajectory file for simulation of head tracking (only for binaural outputs)",
#else
        .description = "Reference vector trajectory file for simulation of head tracking (only for BINAURAL and BINAURAL_ROOM outputs)",
#endif
    },
#ifdef EXTERNAL_ORIENTATIONS
    {
@@ -817,9 +841,17 @@ int main(
        IVAS_RENDER_CONFIG_DATA renderConfig;

        /* sanity check */
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
        if ( ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL ) && ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_IR ) && ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) )
#else
        if ( ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) && ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL ) )
#endif
        {
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
            fprintf( stderr, "\nExternal Renderer Config is only supported for binaural output configurations. Exiting. \n" );
#else
            fprintf( stderr, "\nExternal Renderer Config is supported only when BINAURAL or BINAURAL_ROOM is used as output. Exiting. \n" );
#endif
            exit( -1 );
        }

@@ -835,6 +867,13 @@ int main(
            exit( -1 );
        }

#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
        if ( args.outConfig.audioConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_REVERB )
        {
            renderConfig.room_acoustics.override = TRUE;
        }
#endif

        if ( ( error = IVAS_REND_FeedRenderConfig( hIvasRend, renderConfig ) ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "\nIVAS_DEC_FeedRenderConfig failed\n" );
@@ -1763,8 +1802,13 @@ static bool parseOrientationTracking(
static IVAS_REND_AudioConfig parseAudioConfig(
    const char *configString )
{
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
    char charBuf[21];
    charBuf[20] = '\0';
#else
    char charBuf[14];
    charBuf[13] = '\0';
#endif

    strncpy( charBuf, configString, sizeof( charBuf ) - 1 );
    charBuf[sizeof( charBuf ) - 1] = '\0';
@@ -1837,6 +1881,20 @@ static IVAS_REND_AudioConfig parseAudioConfig(
                return IVAS_REND_AUDIO_CONFIG_UNKNOWN;
        }
    }
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
    if ( strcmp( charBuf, "BINAURAL" ) == 0 )
    {
        return IVAS_REND_AUDIO_CONFIG_BINAURAL;
    }
    if ( strcmp( charBuf, "BINAURAL_ROOM_IR" ) == 0 )
    {
        return IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_IR;
    }
    if ( strcmp( charBuf, "BINAURAL_ROOM_REVERB" ) == 0 )
    {
        return IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_REVERB;
    }
#else
    if ( strcmp( charBuf, "BINAURAL_ROOM" ) == 0 )
    {
        return IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM;
@@ -1845,7 +1903,7 @@ static IVAS_REND_AudioConfig parseAudioConfig(
    {
        return IVAS_REND_AUDIO_CONFIG_BINAURAL;
    }

#endif
    return IVAS_REND_AUDIO_CONFIG_UNKNOWN;
}

@@ -3061,8 +3119,14 @@ static void printSupportedAudioConfigs()
        "HOA3",
        "ISMx (input only)",
        "MASAx (input only)",
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
        "BINAURAL (output only)",
        "BINAURAL_ROOM_IR (output only)",
        "BINAURAL_ROOM_REVERB (output only)",
#else
        "BINAURAL (output only)",
        "BINAURAL_ROOM (output only)",
#endif
    };

    fprintf( stdout, "Supported audio formats:\n" );
+2 −2
Original line number Diff line number Diff line
@@ -93,11 +93,11 @@ modes_with_ext_out=$(./scripts/runIvasCodec.py -l | grep 'MASA\|ISM' | grep -v I
echo "\n======================= 4. JBM, modes with no EXT =======================\n\n"
./scripts/runIvasCodec.py -m $modes_with_no_ext_out -p $cfg $duration_arg $WORKERS --decoder_only --jbm_file $dly_profile | tee smoke_test_output_jbm_noEXT.txt
echo "\n======================= 5. JBM, modes with EXT =======================\n\n"
./scripts/runIvasCodec.py -m $modes_with_ext_out -p $cfg $duration_arg $WORKERS --decoder_only --jbm_file $dly_profile --oc BINAURAL BINAURAL_ROOM mono stereo FOA HOA3 5_1 7_1_4 | tee -a smoke_test_output_jbm_noEXT.txt
./scripts/runIvasCodec.py -m $modes_with_ext_out -p $cfg $duration_arg $WORKERS --decoder_only --jbm_file $dly_profile --oc BINAURAL BINAURAL_ROOM_IR mono stereo FOA HOA3 5_1 7_1_4 | tee -a smoke_test_output_jbm_noEXT.txt

# run all modes with binaural output using external files
modes_with_bin_out="SBA PlanarSBA MASA MC ISM1 ISM2 ISM3 ISM4"
bin_out_modes="BINAURAL BINAURAL_ROOM"
bin_out_modes="BINAURAL BINAURAL_ROOM_IR"

echo "\n======================= 6. binaural out with HRTF files - WB =======================\n\n"
wb_modes=$(./scripts/runIvasCodec.py -l -C $modes_with_bin_out | grep _wb_)
+2 −0
Original line number Diff line number Diff line
@@ -133,8 +133,10 @@ typedef struct
typedef struct _IVAS_ROOM_ACOUSTICS_CONFIG
{
    int16_t override;
#ifndef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
    int16_t use_brir;
    int16_t late_reverb_on;
#endif
    int16_t nBands;                                   /* Number of frequency bands for which reverb properties are provided, integer, range [2..256] */
    float pFc_input[IVAS_CLDFB_NO_CHANNELS_MAX];      /* Center frequencies for which following values are provided: */
    float pAcoustic_rt60[IVAS_CLDFB_NO_CHANNELS_MAX]; /*  - The room's T60 per center frequency */
+6 −0
Original line number Diff line number Diff line
@@ -100,8 +100,14 @@ typedef enum
    AUDIO_CONFIG_HOA2,                          /* ambisonics, order 2          */
    AUDIO_CONFIG_HOA3,                          /* ambisonics, order 3          */
    AUDIO_CONFIG_OBA,                           /* object based audio           */
#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG
    AUDIO_CONFIG_BINAURAL,                      /* binaural with HRIR           */
    AUDIO_CONFIG_BINAURAL_ROOM_IR,              /* binaural with BRIR           */
    AUDIO_CONFIG_BINAURAL_ROOM_REVERB,          /* binaural with HRIR + reverb  */
#else
    AUDIO_CONFIG_BINAURAL,                      /* binaural with HRIR           */
    AUDIO_CONFIG_BINAURAL_ROOM,                 /* binaural with HRIR and BRIR  */
#endif
    AUDIO_CONFIG_ISM1,                          /* ISM1                         */
    AUDIO_CONFIG_ISM2,                          /* ISM2                         */
    AUDIO_CONFIG_ISM3,                          /* ISM3                         */
Loading