Commit 1b1e364d authored by Lauros Pajunen's avatar Lauros Pajunen
Browse files

Save PI data and apply the saved data

parent f615ef39
Loading
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -3591,9 +3591,11 @@ static ivas_error decodeVoIP(
                    numPiData++;
                }

                if ( ( error = IVAS_RTP_ApplyPiData( hIvasDec, &ivasRtp.piData[ivasRtp.nProcPiData], numPiData ) ) != IVAS_ERR_OK )
                IVAS_RTP_SavePiData( hIvasDec, &ivasRtp.piData[ivasRtp.nProcPiData], numPiData, &ivasRtp.piDataSaved );

                if ( ( error = IVAS_RTP_ApplySavedPiData( hIvasDec, &ivasRtp.piDataSaved ) ) != IVAS_ERR_OK )
                {
                    fprintf( stderr, "\nError in IVAS_DEC_VoIP_GetSamples: %s\n", IVAS_DEC_GetErrorMessage( error ) );
                    fprintf( stderr, "\nError in IVAS_RTP_ApplySavedPiData: %s\n", IVAS_DEC_GetErrorMessage( error ) );
                    goto cleanup;
                }

+43 −14
Original line number Diff line number Diff line
@@ -43,10 +43,15 @@
#include "jbm_pcmdsp_fifo.h"
#include <math.h>
#include <assert.h>
#ifdef IVAS_RTPDUMP
#include <string.h>
#endif
#ifdef DEBUGGING
#include "debug.h"
#ifndef IVAS_RTPDUMP
#include <string.h>
#endif
#endif
#include "wmc_auto.h"

/*---------------------------------------------------------------------*
@@ -5623,9 +5628,8 @@ static void IVAS_DEC_setDiegeticInputPI(
}
#endif

ivas_error IVAS_RTP_ApplyPiData( IVAS_DEC_HANDLE hIvasDec, PIDATA_TS *piData, uint32_t numPiData )
void IVAS_RTP_SavePiData( IVAS_DEC_HANDLE hIvasDec, PIDATA_TS *piData, uint32_t numPiData, PIDATA_SAVED *piDataSaved )
{
    ivas_error error = IVAS_ERR_OK;
    while ( numPiData-- )
    {
        uint32_t piDataType = piData->data.noPiData.piDataType;
@@ -5633,25 +5637,23 @@ ivas_error IVAS_RTP_ApplyPiData( IVAS_DEC_HANDLE hIvasDec, PIDATA_TS *piData, ui
        {
            case IVAS_PI_SCENE_ORIENTATION:
            {
                IVAS_QUATERNION *quat = &piData->data.scene.orientation;
                DEBUG_PRINT( stdout, "PI_SCENE_ORIENTATION : %f, %f, %f, %f\n", quat->w, quat->x, quat->y, quat->z );
                error = IVAS_DEC_feedSinglePIorientation( hIvasDec, true, quat );
                memcpy( &piDataSaved->scene, &piData->data.scene, piData->data.scene.size );
                piDataSaved->sceneSaved = true;
            }
            break;

            case IVAS_PI_DEVICE_ORIENTATION_COMPENSATED:
            {
                IVAS_QUATERNION *quat = &piData->data.deviceCompensated.orientation;
                DEBUG_PRINT( stdout, "PI_DEVICE_ORIENTATION : %f, %f, %f, %f\n", quat->w, quat->x, quat->y, quat->z );
                error = IVAS_DEC_feedSinglePIorientation( hIvasDec, true, quat );
                memcpy( &piDataSaved->deviceCompensated, &piData->data.deviceCompensated, piData->data.deviceCompensated.size );
                piDataSaved->deviceCompensatedSaved = true;
            }
            break;

#ifdef RTP_S4_251135_CR26253_0016_REV1
            case IVAS_PI_DIEGETIC_TYPE:
            {
                DEBUG_PRINT( stdout, "PI_DIEGETIC_TYPE : %d, %d, %d, %d, %d\n", piData->data.digeticIndicator.isDiegetic[0], piData->data.digeticIndicator.isDiegetic[1], piData->data.digeticIndicator.isDiegetic[2], piData->data.digeticIndicator.isDiegetic[3], piData->data.digeticIndicator.isDiegetic[4] );
                IVAS_DEC_setDiegeticInputPI( hIvasDec, piData->data.digeticIndicator.isDiegetic );
                memcpy( &piDataSaved->digeticIndicator, &piData->data.digeticIndicator, piData->data.digeticIndicator.size );
                piDataSaved->digeticIndicatorSaved = true;
            }
            break;
#endif
@@ -5662,12 +5664,39 @@ ivas_error IVAS_RTP_ApplyPiData( IVAS_DEC_HANDLE hIvasDec, PIDATA_TS *piData, ui
            }
            break;
        }
        if ( error != IVAS_ERR_OK )
        piData++;
    }
}

ivas_error IVAS_RTP_ApplySavedPiData( IVAS_DEC_HANDLE hIvasDec, PIDATA_SAVED *piDataSaved )
{
            return error;
    ivas_error error = IVAS_ERR_OK;

    if ( piDataSaved->sceneSaved && !piDataSaved->sceneApplied )
    {
        IVAS_QUATERNION *quat = &piDataSaved->scene.orientation;
        DEBUG_PRINT( stdout, "PI_SCENE_ORIENTATION : %f, %f, %f, %f\n", quat->w, quat->x, quat->y, quat->z );
        error = IVAS_DEC_feedSinglePIorientation( hIvasDec, true, quat );
        piDataSaved->sceneApplied = true;
    }
        piData++;

    if ( piDataSaved->deviceCompensatedSaved && !piDataSaved->deviceCompensatedApplied )
    {
        IVAS_QUATERNION *quat = &piDataSaved->deviceCompensated.orientation;
        DEBUG_PRINT( stdout, "PI_DEVICE_ORIENTATION : %f, %f, %f, %f\n", quat->w, quat->x, quat->y, quat->z );
        error = IVAS_DEC_feedSinglePIorientation( hIvasDec, true, quat );
        piDataSaved->deviceCompensatedApplied = true;
    }

#ifdef RTP_S4_251135_CR26253_0016_REV1
    if ( piDataSaved->digeticIndicatorSaved && !piDataSaved->digeticIndicatorApplied )
    {
        DEBUG_PRINT( stdout, "PI_DIEGETIC_TYPE : %d, %d, %d, %d, %d\n", piDataSaved->digeticIndicator.isDiegetic[0], piDataSaved->digeticIndicator.isDiegetic[1], piDataSaved->digeticIndicator.isDiegetic[2], piDataSaved->digeticIndicator.isDiegetic[3], piDataSaved->digeticIndicator.isDiegetic[4] );
        IVAS_DEC_setDiegeticInputPI( hIvasDec, piDataSaved->digeticIndicator.isDiegetic );
        piDataSaved->digeticIndicatorApplied = true;
    }
#endif

    return error;
}
#endif
+2 −1
Original line number Diff line number Diff line
@@ -559,7 +559,8 @@ void IVAS_DEC_PrintDisclaimer(

#ifdef IVAS_RTPDUMP
#include "ivas_rtp_pi_data.h"
ivas_error IVAS_RTP_ApplyPiData( IVAS_DEC_HANDLE hIvasDec, PIDATA_TS *piData, uint32_t numPiData );
void IVAS_RTP_SavePiData( IVAS_DEC_HANDLE hIvasDec, PIDATA_TS *piData, uint32_t numPiData, PIDATA_SAVED *piDataSaved );
ivas_error IVAS_RTP_ApplySavedPiData( IVAS_DEC_HANDLE hIvasDec, PIDATA_SAVED *piDataSaved );
#endif

/* clang-format on */
+74 −0
Original line number Diff line number Diff line
@@ -146,6 +146,78 @@ static const char *const PiDataNames[IVAS_PI_MAX_ID] = {
    "RESERVED30", "NO_DATA"
};

static void resetSavedPiDataAppliance(
    PIDATA_SAVED *piDataSaved
)
{
    piDataSaved->sceneApplied = false;
    piDataSaved->deviceCompensatedApplied = false;
    piDataSaved->deviceUnCompensatedApplied = false;
    piDataSaved->acousticEnvApplied = false;
#ifdef RTP_S4_251135_CR26253_0016_REV1
    piDataSaved->audioDescApplied = false;
    piDataSaved->ismNumApplied = false;
    piDataSaved->ismIdApplied = false;
    piDataSaved->ismGainApplied = false;
    piDataSaved->ismOrientationApplied = false;
    piDataSaved->ismPositionApplied = false;
    piDataSaved->ismAttenuationApplied = false;
    piDataSaved->ismDirectivityApplied = false;
    piDataSaved->digeticIndicatorApplied = false;
    piDataSaved->dynSuppressionIndicationApplied = false;
    piDataSaved->focusIndicationApplied = false;

    piDataSaved->playbackOrientationApplied = false;
    piDataSaved->headOrientationApplied = false;
    piDataSaved->listnerPositionApplied = false;
    piDataSaved->dynSuppressionRequestApplied = false;
    piDataSaved->focusRequestApplied = false;
    piDataSaved->piLatencyApplied = false;
    piDataSaved->ismEditIdApplied = false;
    piDataSaved->ismEditGainApplied = false;
    piDataSaved->ismEditOrientationApplied = false;
    piDataSaved->ismEditPositionApplied = false;
    piDataSaved->ismEditDirectionApplied = false;
#endif /* RTP_S4_251135_CR26253_0016_REV1 */
}

static void initSavedPiData(
    PIDATA_SAVED *piDataSaved
)
{
    piDataSaved->sceneSaved = false;
    piDataSaved->deviceCompensatedSaved = false;
    piDataSaved->deviceUnCompensatedSaved = false;
    piDataSaved->acousticEnvSaved = false;
#ifdef RTP_S4_251135_CR26253_0016_REV1
    piDataSaved->audioDescSaved = false;
    piDataSaved->ismNumSaved = false;
    piDataSaved->ismIdSaved = false;
    piDataSaved->ismGainSaved = false;
    piDataSaved->ismOrientationSaved = false;
    piDataSaved->ismPositionSaved = false;
    piDataSaved->ismAttenuationSaved = false;
    piDataSaved->ismDirectivitySaved = false;
    piDataSaved->digeticIndicatorSaved = false;
    piDataSaved->dynSuppressionIndicationSaved = false;
    piDataSaved->focusIndicationSaved = false;

    piDataSaved->playbackOrientationSaved = false;
    piDataSaved->headOrientationSaved = false;
    piDataSaved->listnerPositionSaved = false;
    piDataSaved->dynSuppressionRequestSaved = false;
    piDataSaved->focusRequestSaved = false;
    piDataSaved->piLatencySaved = false;
    piDataSaved->ismEditIdSaved = false;
    piDataSaved->ismEditGainSaved = false;
    piDataSaved->ismEditOrientationSaved = false;
    piDataSaved->ismEditPositionSaved = false;
    piDataSaved->ismEditDirectionSaved = false;
#endif /* RTP_S4_251135_CR26253_0016_REV1 */

    resetSavedPiDataAppliance( piDataSaved );
}

void IVAS_RTP_LogPiData(
    FILE *f_piDataOut,       /* i/o : Output json file handle to dump PI data for debug/test             */
    const PIDATA_TS *piData, /* i   : PI Data + Timestamp array containing all PI data in current packet */
@@ -749,6 +821,7 @@ ivas_error IVAS_RTP_READER_Init(
            }
        }
    }
    initSavedPiData( &rtp->piDataSaved );

    return error;
}
@@ -853,6 +926,7 @@ ivas_error IVAS_RTP_ReadNextFrame(

        rtp->nReadPiData = 0;
        rtp->nProcPiData = 0;
        resetSavedPiDataAppliance( &rtp->piDataSaved );

        /* Pre-read all PI data */
        while ( rtp->numPiDataInPacket != 0 )
+1 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ typedef struct
{
    uint8_t packet[NOMINAL_BUFFER_SIZE( IVAS_MAX_FRAMES_PER_RTP_PACKET )];
    PIDATA_TS piData[IVAS_PI_MAX_ID * IVAS_MAX_FRAMES_PER_RTP_PACKET];
    PIDATA_SAVED piDataSaved;

    IVAS_RTP_FILE_HANDLE hRtpFile;
    FILE *f_piDataOut;
Loading