Commit a815f3b7 authored by stoutjesdijk's avatar stoutjesdijk 🎧
Browse files

added get/feed renderconfig

parent d1732bcd
Loading
Loading
Loading
Loading
+47 −3
Original line number Diff line number Diff line
@@ -40,10 +40,10 @@
#include "hrtf_file_reader.h"
#include "ism_file_reader.h"
#include "lib_rend.h"
#include "render_config_reader.h"
#include "ls_custom_file_reader.h"
#include "masa_file_reader.h"
#include "prot.h"
#include "render_config_reader.h"
#ifdef WMOPS
#include "PROM_Size_lib_rend.h"
#include "wmops.h"
@@ -460,8 +460,11 @@ int32_t main( int32_t argc, char **argv )

    if ( args.renderConfigFile[0] != '\0' )
    {
        RenderConfigReader_open( args.renderConfigFile, &renderConfigReader );
    }
        if ( ( error = RenderConfigReader_open( args.renderConfigFile, &renderConfigReader ) ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "\nError: Can't open Renderer configuration file %s \n\n", args.renderConfigFile );
            exit( -1 );
        }    }

    if ( args.sceneDescriptionInput )
    {
@@ -585,6 +588,47 @@ int32_t main( int32_t argc, char **argv )
        hMasaMetadata = MasaFileReader_getMetadataHandle( masaReader );
    }

    if ( args.renderConfigFile[0] != '\0' )
    {
        IVAS_RENDER_CONFIG_DATA renderConfig;
        
        /* sanity check */
/*        if ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM )
        {
            fprintf( stderr, "\nExternal Renderer Config is supported only when BINAURAL_ROOM is used as output. Exiting. \n" );
            exit( -1 ); // goto cleanup;
        }

        if ( ( error = ivas_render_config_open( &hIvasRend->hRendererConfig ) ) != IVAS_ERR_OK )
        {
            ivas_render_config_open(&renderConfig);
            return error;
        }

        if ( ivas_render_config_init_from_rom( &st->hRendererConfig, st->rendererConfigEnabled ) != IVAS_ERR_OK )
        {
            return IVAS_ERR_INTERNAL_FATAL;
        }
*/
        if ( ( error = IVAS_REND_GetRenderConfig( hIvasRend, &renderConfig ) ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "\nIVAS_DEC_GetRenderConfig failed\n" );
            exit( -1 ); // goto cleanup;
        }

        if ( RenderConfigReader_read( renderConfigReader, &renderConfig ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "Failed to read renderer configuration from file %s\n", args.renderConfigFile );
            exit( -1 ); // goto cleanup;
        }

        if ( ( error = IVAS_REND_FeedRenderConfig( hIvasRend, renderConfig ) ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "\nIVAS_DEC_FeedRenderConfig failed\n" );
            exit( -1 ); // goto cleanup;
        }
    }

    int32_t numOutChannels;
    if ( ( error = IVAS_REND_NumOutChannels( hIvasRend, &numOutChannels ) ) != IVAS_ERR_OK )
    {
+82 −0
Original line number Diff line number Diff line
@@ -152,6 +152,7 @@ struct IVAS_REND
    EFAP_WRAPPER efapOutWrapper;
    IVAS_LSSETUP_CUSTOM_STRUCT customLsOut;
    IVAS_REND_HeadRotData headRotData;
    RENDER_CONFIG_DATA *hRendererConfig;                         /* Renderer config pointer */
};

static int32_t limitRendererOutput(
@@ -2627,6 +2628,87 @@ ivas_error IVAS_REND_FeedInputObjectMetadata(
    return IVAS_ERR_OK;
}


int16_t IVAS_REND_GetRenderConfig(
    IVAS_REND_HANDLE hIvasRend,              /* i/o: IVAS decoder handle         */
    const IVAS_RENDER_CONFIG_HANDLE hRCout /* o  : Render configuration handle */
)
{
    RENDER_CONFIG_HANDLE hRCin;

    if ( hIvasRend == NULL || hIvasRend->hRendererConfig == NULL || hRCout == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }

    hRCin = hIvasRend->hRendererConfig;
#ifdef DEBUGGING
    switch ( hRCin->renderer_type_override )
    {
        case RENDER_TYPE_OVERRIDE_CREND:
            hRCout->renderer_type_override = IVAS_RENDER_TYPE_OVERRIDE_CREND;
            break;
        case RENDER_TYPE_OVERRIDE_FASTCONV:
            hRCout->renderer_type_override = IVAS_RENDER_TYPE_OVERRIDE_FASTCONV;
            break;
        default:
            hRCout->renderer_type_override = IVAS_RENDER_TYPE_OVERRIDE_NONE;
            break;
    }
#endif
    hRCout->room_acoustics.override = hRCin->roomAcoustics.override;
    hRCout->room_acoustics.use_brir = hRCin->roomAcoustics.use_brir;
    hRCout->room_acoustics.late_reverb_on = hRCin->roomAcoustics.late_reverb_on;
    hRCout->room_acoustics.nBands = hRCin->roomAcoustics.nBands;
    hRCout->room_acoustics.acousticPreDelay = hRCin->roomAcoustics.acousticPreDelay;
    hRCout->room_acoustics.inputPreDelay = hRCin->roomAcoustics.inputPreDelay;

    mvr2r( hRCin->roomAcoustics.pFc_input, hRCout->room_acoustics.pFc_input, CLDFB_NO_CHANNELS_MAX );
    mvr2r( hRCin->roomAcoustics.pAcoustic_rt60, hRCout->room_acoustics.pAcoustic_rt60, CLDFB_NO_CHANNELS_MAX );
    mvr2r( hRCin->roomAcoustics.pAcoustic_dsr, hRCout->room_acoustics.pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX );

    return IVAS_ERR_OK;
}


int16_t IVAS_REND_FeedRenderConfig(
    IVAS_REND_HANDLE hIvasRend,                  /* i/o: IVAS decoder handle         */
    const IVAS_RENDER_CONFIG_DATA renderConfig /* i  : Render configuration struct */
)
{
    RENDER_CONFIG_HANDLE hRenderConfig;

    if ( hIvasRend == NULL || hIvasRend->hRendererConfig == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }

    hRenderConfig = hIvasRend->hRendererConfig;
#ifdef DEBUGGING
    hRenderConfig->renderer_type_override = RENDER_TYPE_OVERRIDE_NONE;
    if ( renderConfig.renderer_type_override == IVAS_RENDER_TYPE_OVERRIDE_FASTCONV )
    {
        hRenderConfig->renderer_type_override = RENDER_TYPE_OVERRIDE_FASTCONV;
    }
    if ( renderConfig.renderer_type_override == IVAS_RENDER_TYPE_OVERRIDE_CREND )
    {
        hRenderConfig->renderer_type_override = RENDER_TYPE_OVERRIDE_CREND;
    }
#endif
    hRenderConfig->roomAcoustics.override = renderConfig.room_acoustics.override;
    hRenderConfig->roomAcoustics.use_brir = renderConfig.room_acoustics.use_brir;
    hRenderConfig->roomAcoustics.late_reverb_on = renderConfig.room_acoustics.late_reverb_on;
    hRenderConfig->roomAcoustics.nBands = renderConfig.room_acoustics.nBands;
    hRenderConfig->roomAcoustics.acousticPreDelay = renderConfig.room_acoustics.acousticPreDelay;
    hRenderConfig->roomAcoustics.inputPreDelay = renderConfig.room_acoustics.inputPreDelay;
    mvr2r( renderConfig.room_acoustics.pFc_input, hRenderConfig->roomAcoustics.pFc_input, CLDFB_NO_CHANNELS_MAX );
    mvr2r( renderConfig.room_acoustics.pAcoustic_rt60, hRenderConfig->roomAcoustics.pAcoustic_rt60, CLDFB_NO_CHANNELS_MAX );
    mvr2r( renderConfig.room_acoustics.pAcoustic_dsr, hRenderConfig->roomAcoustics.pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX );

    return IVAS_ERR_OK;
}


ivas_error IVAS_REND_SetHeadRotation(
    IVAS_REND_HANDLE hIvasRend,
    const IVAS_QUATERNION headRot[RENDERER_HEAD_POSITIONS_PER_FRAME] )
+10 −0
Original line number Diff line number Diff line
@@ -234,6 +234,16 @@ ivas_error IVAS_REND_FeedInputMasaMetadata(
    void* TODO
);

int16_t IVAS_REND_GetRenderConfig(
    IVAS_REND_HANDLE hIvasRend,              /* i/o: IVAS decoder handle         */
    const IVAS_RENDER_CONFIG_HANDLE hRCout /* o  : Render configuration handle */
);

int16_t IVAS_REND_FeedRenderConfig(
    IVAS_REND_HANDLE hIvasRend,                  /* i/o: IVAS decoder handle         */
    const IVAS_RENDER_CONFIG_DATA renderConfig /* i  : Render configuration struct */
);

ivas_error IVAS_REND_SetHeadRotation(
    IVAS_REND_HANDLE hIvasRend,                     /* i/o: Renderer handle                                     */
    const IVAS_QUATERNION headRot[RENDERER_HEAD_POSITIONS_PER_FRAME] /* i  : head positions for next rendering call */