Commit 215fe263 authored by emerit's avatar emerit
Browse files

Merge branch 'ericsson/td-renderer-with-radius-and-orientation' into...

Merge branch 'ericsson/td-renderer-with-radius-and-orientation' into orange/no-diegetic-pan-with-radius
parents c324e2d6 87fac8a6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1400,7 +1400,7 @@ static ivas_error decodeG192(
    uint16_t numObj = 0;
    IVAS_DEC_BS_FORMAT bsFormat = IVAS_DEC_BS_UNKOWN;
#ifdef TD5
    float Pos[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES][3] = { 0 }; /* Initialization needed for gcc */
    IVAS_POSITION Pos[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES];
#endif

    IsmFileWriter *ismWriters[IVAS_MAX_NUM_OBJECTS];
+3 −5
Original line number Diff line number Diff line
@@ -1685,15 +1685,13 @@ static void usage_enc( void )
    fprintf( stdout, "-stereo [Mode]      : Stereo format, default is unified stereo \n" );
    fprintf( stdout, "                      optional for Mode: 1: DFT Stereo, 2: TD Stereo, 3: MDCT Stereo\n" );
#ifdef TD5
    fprintf( stdout, "-ism (+)Ch Files    : ISm format \n" );
    fprintf( stdout, "                      where Ch specifies the number of ISms (1-4)\n" );
    fprintf( stdout, "-ism (+)Ch Files    : ISM format \n" );
    fprintf( stdout, "                      where Ch specifies the number of ISMs (1-4)\n" );
    fprintf( stdout, "                      where positive (+) means extended metadata format is used (including orientation and radius) \n" );
#else
    fprintf( stdout, "-ism Channels Files : ISm format \n" );
    fprintf( stdout, "                      where Channels specifies the number of ISms (1-4)\n" );
#endif
    fprintf( stdout, "-ism Channels Files : ISM format \n" );
    fprintf( stdout, "                      where Channels specifies the number of ISMs (1-4)\n" );
#endif
    fprintf( stdout, "                      and Files specify input files containing metadata, one file per object\n" );
    fprintf( stdout, "                      (use NULL for no input metadata)\n" );
    fprintf( stdout, "-sba +/-Order       : Scene Based Audio input format (Ambisonics ACN/SN3D),\n" );
+74 −32
Original line number Diff line number Diff line
@@ -517,6 +517,9 @@ int main(
    int32_t delayTimeScale = 0;
    int16_t i, numChannels;
    ivas_error error = IVAS_ERR_OK;
#ifdef TD5
    IVAS_POSITION Pos[RENDERER_HEAD_POSITIONS_PER_FRAME];
#endif

#ifdef WMOPS
    reset_wmops();
@@ -661,10 +664,14 @@ int main(
    }

    /* === Configure === */
#ifdef TD5
    if ( ( error = IVAS_REND_InitConfig( hIvasRend, ( args.outConfig.audioConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) || ( args.outConfig.audioConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL ) ) ) != IVAS_ERR_OK )
#else
    if ( ( error = IVAS_REND_InitConfig( hIvasRend, strlen( args.renderConfigFilePath ) != 0 ) ) != IVAS_ERR_OK )
    {
        exit( -1 );
    }
#endif

        if ( args.renderConfigFilePath[0] != '\0' )
        {
@@ -672,7 +679,7 @@ int main(

            /* sanity check */
#ifdef TD5
        if ( ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL ) && ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) )
            if ( ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) && ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL ) )
#else
        if ( args.outConfig.audioConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM )
#endif
@@ -913,21 +920,17 @@ int main(
        {
            IVAS_QUATERNION quatBuffer[RENDERER_HEAD_POSITIONS_PER_FRAME];
#ifdef TD5
            float Pos[RENDERER_HEAD_POSITIONS_PER_FRAME][3];
            HeadRotationFileReading( headRotReader, quatBuffer, Pos );
            IVAS_REND_SetHeadRotation( hIvasRend, quatBuffer, Pos );
#else
            HeadRotationFileReading( headRotReader, quatBuffer, frame );
#endif
#ifdef TD5
            IVAS_REND_SetHeadRotationAndPosition( hIvasRend, quatBuffer, Pos );
#else
            IVAS_REND_SetHeadRotation( hIvasRend, quatBuffer );
#endif
        }
        else
        {
#ifdef TD5
            IVAS_REND_SetHeadRotationAndPosition( hIvasRend, NULL, NULL );
            IVAS_REND_SetHeadRotation( hIvasRend, NULL, NULL );
#else
            IVAS_REND_SetHeadRotation( hIvasRend, NULL );
#endif
@@ -1762,9 +1765,10 @@ void getMetadataFromFileReader(
    objectMetadataBuffer->positions[objIdx].elevation = ismMetadata.elevation;
#ifdef TD5
    objectMetadataBuffer->positions[objIdx].radius = ismMetadata.radius;
    objectMetadataBuffer->positions[objIdx].yaw = ismMetadata.yaw;
    objectMetadataBuffer->positions[objIdx].pitch = ismMetadata.pitch;
#endif


    return;
}

@@ -1820,6 +1824,8 @@ static void IsmPositionProvider_getNextFrame(
            objectMetadataBuffer->positions[objIdx].elevation = 0.0f;
#ifdef TD5
            objectMetadataBuffer->positions[objIdx].radius = 1.0f;
            objectMetadataBuffer->positions[objIdx].yaw = 0.0f;
            objectMetadataBuffer->positions[objIdx].pitch = 0.0f;
#endif
        }

@@ -1835,6 +1841,20 @@ static void IsmPositionProvider_getNextFrame(

        /* Clamp elevation to lie within [-90, 90] range (can't be wrapped easily) */
        objectMetadataBuffer->positions[objIdx].elevation = min( max( objectMetadataBuffer->positions[objIdx].elevation, -90 ), 90 );
#ifdef TD5
        /* Wrap yaw to lie within (-180, 180] range */
        while ( objectMetadataBuffer->positions[objIdx].yaw < 0.0f )
        {
            objectMetadataBuffer->positions[objIdx].yaw += 360.0f;
        }
        while ( objectMetadataBuffer->positions[objIdx].yaw >= 360.0f )
        {
            objectMetadataBuffer->positions[objIdx].yaw -= 360.0f;
        }

        /* Clamp pitch to lie within [-90, 90] range (can't be wrapped easily) */
        objectMetadataBuffer->positions[objIdx].pitch = min( max( objectMetadataBuffer->positions[objIdx].pitch, -90 ), 90 );
#endif
    }

    ++positionProvider->frameCounter;
@@ -2069,6 +2089,28 @@ static void parseObjectPosition(
    uint16_t *positionDuration )
{
    char *endptr;
#ifdef TD5
    int16_t read_values;
    float meta_prm[7] = { 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f };

    readNextMetadataChunk( line, "," );
    *positionDuration = (uint16_t) strtol( line, &endptr, 10 );
    readNextMetadataChunk( line, "\n" );

    read_values = (int16_t) sscanf( line, "%f,%f,%f,%f,%f,%f,%f", &meta_prm[0], &meta_prm[1], &meta_prm[2], &meta_prm[3], &meta_prm[4], &meta_prm[5], &meta_prm[6] );

    if ( read_values < 2 )
    {
        fprintf( stderr, "Error reading metadata\n" );
        exit( -1 );
    }

    position->azimuth = meta_prm[0];
    position->elevation = meta_prm[1];
    position->radius = meta_prm[2];
    position->yaw = meta_prm[5];
    position->pitch = meta_prm[6];
#else

    readNextMetadataChunk( line, "," );
    *positionDuration = (uint16_t) strtol( line, &endptr, 10 );
@@ -2095,7 +2137,7 @@ static void parseObjectPosition(
        fprintf( stderr, "Error reading metadata\n" );
        exit( -1 );
    }

#endif
    return;
}

+2 −0
Original line number Diff line number Diff line
@@ -129,6 +129,8 @@ typedef struct
    float elevation;
#ifdef TD5
    float radius;
    float yaw;
    float pitch;
#endif
} IVAS_REND_AudioObjectPosition;

+1 −1
Original line number Diff line number Diff line
@@ -789,7 +789,7 @@ ivas_error set_ism_metadata(
    ISM_METADATA_HANDLE hIsmMeta,                               /* i/o: ISM metadata handle                         */
    float azimuth,                                              /* i  : azimuth                                     */
#ifdef TD5
    float elevation,                                            /* i  : elevation                                   */
    const float elevation,                                      /* i  : elevation value                             */
    float radius_meta,                                          /* i  : radius                                      */
    float yaw,                                                  /* i  : yaw                                         */
    float pitch                                                 /* i  : pitch                                       */
Loading