Loading lib_util/ivas_rtp_file.c +87 −73 Original line number Diff line number Diff line Loading @@ -139,9 +139,9 @@ static ivas_error IvasRtpFile_Read( static const char *const PiDataNames[IVAS_PI_MAX_ID] = { "SCENE_ORIENTATION", "DEVICE_ORIENTATION_COMPENSATED", "DEVICE_ORIENTATION_UNCOMPENSATED", "ACOUSTIC_ENVIRONMENT", "AUDIO_DESCRIPTION", "ISM_NUM", "ISM_ID", "ISM_GAIN", "ISM_ORIENTATION", "ISM_POSITION", "ISM_DISTANCE_ATTENUATION", "ISM_DIRECTIVITY", "DIEGETIC_TYPE", "RESERVED13", "ISM_POSITION", "ISM_DISTANCE_ATTENUATION", "ISM_DIRECTIVITY", "DIEGETIC_TYPE", "DYNAMIC_AUDIO_SUPPRESSION_INDICATION", "AUDIO_FOCUS_INDICATION", "RESERVED15", "PLAYBACK_DEVICE_ORIENTATION", "HEAD_ORIENTATION", "LISTENER_POSITION", "DYNAMIC_AUDIO_SUPPRESSION", "AUDIO_FOCUS_REQUEST", "PI_LATENCY", "R_ISM_ID", "R_ISM_GAIN", "DYNAMIC_AUDIO_SUPPRESSION_REQUEST", "AUDIO_FOCUS_REQUEST", "PI_LATENCY", "R_ISM_ID", "R_ISM_GAIN", "R_ISM_ORIENTATION", "R_ISM_POSITION", "R_ISM_DIRECTION", "RESERVED27", "RESERVED28", "RESERVED29", "RESERVED30", "NO_DATA" }; Loading Loading @@ -273,9 +273,20 @@ void IVAS_RTP_LogPiData( fprintf( f_piDataOut, "\n\t\t}" ); } break; case IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION: case IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION_REQUEST: { const IVAS_PIDATA_DYNAMIC_SUPPRESSION *das = &cur->data.dynSuppression; const IVAS_PIDATA_DYNAMIC_SUPPRESSION *das = &cur->data.dynSuppressionRequest; fprintf( f_piDataOut, "{\n" ); fprintf( f_piDataOut, "\t\t\t\"preferSpeech\": %s,\n", das->speech ? "true" : "false" ); fprintf( f_piDataOut, "\t\t\t\"preferMusic\": %s,\n", das->music ? "true" : "false" ); fprintf( f_piDataOut, "\t\t\t\"preferAmbiance\": %s,\n", das->ambiance ? "true" : "false" ); fprintf( f_piDataOut, "\t\t\t\"level\": %d", das->sli ); fprintf( f_piDataOut, "\n\t\t}" ); } break; case IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION_INDICATION: { const IVAS_PIDATA_DYNAMIC_SUPPRESSION *das = &cur->data.dynSuppressionIndication; fprintf( f_piDataOut, "{\n" ); fprintf( f_piDataOut, "\t\t\t\"preferSpeech\": %s,\n", das->speech ? "true" : "false" ); fprintf( f_piDataOut, "\t\t\t\"preferMusic\": %s,\n", das->music ? "true" : "false" ); Loading @@ -284,7 +295,6 @@ void IVAS_RTP_LogPiData( fprintf( f_piDataOut, "\n\t\t}" ); } break; case IVAS_PI_RESERVED13: case IVAS_PI_AUDIO_FOCUS_REQUEST: { fprintf( f_piDataOut, "{" ); Loading Loading @@ -375,18 +385,6 @@ void IVAS_RTP_WriteExtPiData( fprintf( f_piDataOut, "%f,%f,%f,%f", cur->data.deviceUnCompensated.orientation.w, cur->data.deviceUnCompensated.orientation.x, cur->data.deviceUnCompensated.orientation.y, cur->data.deviceUnCompensated.orientation.z ); } break; #ifdef RTP_S4_251135_CR26253_0016_REV1 case IVAS_PI_PLAYBACK_DEVICE_ORIENTATION: { fprintf( f_piDataOut, "%f,%f,%f,%f", cur->data.playbackOrientation.orientation.w, cur->data.playbackOrientation.orientation.x, cur->data.playbackOrientation.orientation.y, cur->data.playbackOrientation.orientation.z ); } break; case IVAS_PI_HEAD_ORIENTATION: { fprintf( f_piDataOut, "%f,%f,%f,%f", cur->data.headOrientation.orientation.w, cur->data.headOrientation.orientation.x, cur->data.headOrientation.orientation.y, cur->data.headOrientation.orientation.z ); } break; #endif case IVAS_PI_ACOUSTIC_ENVIRONMENT: { fprintf( f_piDataOut, "%d", cur->data.acousticEnv.aeid ); Loading @@ -403,11 +401,6 @@ void IVAS_RTP_WriteExtPiData( } break; #ifdef RTP_S4_251135_CR26253_0016_REV1 case IVAS_PI_LISTENER_POSITION: { fprintf( f_piDataOut, "%f,%f,%f", cur->data.listnerPosition.position.x, cur->data.listnerPosition.position.y, cur->data.listnerPosition.position.z ); } break; case IVAS_PI_AUDIO_DESCRIPTION: { uint32_t nEntries = cur->data.audioDesc.nValidEntries; Loading @@ -420,57 +413,6 @@ void IVAS_RTP_WriteExtPiData( } } break; case IVAS_PI_DIEGETIC_TYPE: { const bool *isDiegetic = cur->data.digeticIndicator.isDiegetic; fprintf( f_piDataOut, "%d,%d,%d,%d,%d", isDiegetic[0], isDiegetic[1], isDiegetic[2], isDiegetic[3], isDiegetic[4] ); } break; case IVAS_PI_AUDIO_FOCUS_INDICATION: { if ( cur->data.focusIndication.availDirection ) { fprintf( f_piDataOut, "%f,%f,%f,%f", cur->data.focusIndication.direction.w, cur->data.focusIndication.direction.x, cur->data.focusIndication.direction.y, cur->data.focusIndication.direction.z ); if ( cur->data.focusIndication.availLevel ) { fprintf( f_piDataOut, "," ); } } if ( cur->data.focusIndication.availLevel ) { fprintf( f_piDataOut, "%d", cur->data.focusIndication.flvl ); } } break; case IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION: { const IVAS_PIDATA_DYNAMIC_SUPPRESSION *das = &cur->data.dynSuppression; fprintf( f_piDataOut, "%d,%d,%d,%d", das->speech, das->music, das->ambiance, das->sli ); } break; case IVAS_PI_RESERVED13: case IVAS_PI_AUDIO_FOCUS_REQUEST: { if ( cur->data.focusRequest.availDirection ) { fprintf( f_piDataOut, "%f,%f,%f,%f", cur->data.focusRequest.direction.w, cur->data.focusRequest.direction.x, cur->data.focusRequest.direction.y, cur->data.focusRequest.direction.z ); if ( cur->data.focusRequest.availLevel ) { fprintf( f_piDataOut, "," ); } } if ( cur->data.focusRequest.availLevel ) { fprintf( f_piDataOut, "%d", cur->data.focusRequest.flvl ); } } break; case IVAS_PI_RESERVED15: case IVAS_PI_RESERVED27: case IVAS_PI_RESERVED28: case IVAS_PI_RESERVED29: case IVAS_PI_RESERVED30: case IVAS_PI_ISM_NUM: { fprintf( f_piDataOut, "%d", cur->data.ismNum.numObjects ); Loading Loading @@ -548,6 +490,72 @@ void IVAS_RTP_WriteExtPiData( } } break; case IVAS_PI_DIEGETIC_TYPE: { const bool *isDiegetic = cur->data.digeticIndicator.isDiegetic; fprintf( f_piDataOut, "%d,%d,%d,%d,%d", isDiegetic[0], isDiegetic[1], isDiegetic[2], isDiegetic[3], isDiegetic[4] ); } break; case IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION_INDICATION: { const IVAS_PIDATA_DYNAMIC_SUPPRESSION *das = &cur->data.dynSuppressionIndication; fprintf( f_piDataOut, "%d,%d,%d,%d", das->speech, das->music, das->ambiance, das->sli ); } break; case IVAS_PI_AUDIO_FOCUS_INDICATION: { if ( cur->data.focusIndication.availDirection ) { fprintf( f_piDataOut, "%f,%f,%f,%f", cur->data.focusIndication.direction.w, cur->data.focusIndication.direction.x, cur->data.focusIndication.direction.y, cur->data.focusIndication.direction.z ); if ( cur->data.focusIndication.availLevel ) { fprintf( f_piDataOut, "," ); } } if ( cur->data.focusIndication.availLevel ) { fprintf( f_piDataOut, "%d", cur->data.focusIndication.flvl ); } } break; case IVAS_PI_PLAYBACK_DEVICE_ORIENTATION: { fprintf( f_piDataOut, "%f,%f,%f,%f", cur->data.playbackOrientation.orientation.w, cur->data.playbackOrientation.orientation.x, cur->data.playbackOrientation.orientation.y, cur->data.playbackOrientation.orientation.z ); } break; case IVAS_PI_HEAD_ORIENTATION: { fprintf( f_piDataOut, "%f,%f,%f,%f", cur->data.headOrientation.orientation.w, cur->data.headOrientation.orientation.x, cur->data.headOrientation.orientation.y, cur->data.headOrientation.orientation.z ); } break; case IVAS_PI_LISTENER_POSITION: { fprintf( f_piDataOut, "%f,%f,%f", cur->data.listnerPosition.position.x, cur->data.listnerPosition.position.y, cur->data.listnerPosition.position.z ); } break; case IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION_REQUEST: { const IVAS_PIDATA_DYNAMIC_SUPPRESSION *das = &cur->data.dynSuppressionRequest; fprintf( f_piDataOut, "%d,%d,%d,%d", das->speech, das->music, das->ambiance, das->sli ); } break; case IVAS_PI_AUDIO_FOCUS_REQUEST: { if ( cur->data.focusRequest.availDirection ) { fprintf( f_piDataOut, "%f,%f,%f,%f", cur->data.focusRequest.direction.w, cur->data.focusRequest.direction.x, cur->data.focusRequest.direction.y, cur->data.focusRequest.direction.z ); if ( cur->data.focusRequest.availLevel ) { fprintf( f_piDataOut, "," ); } } if ( cur->data.focusRequest.availLevel ) { fprintf( f_piDataOut, "%d", cur->data.focusRequest.flvl ); } } break; case IVAS_PI_PI_LATENCY: { fprintf( f_piDataOut, "%d", cur->data.piLatency.latency ); Loading Loading @@ -578,6 +586,12 @@ void IVAS_RTP_WriteExtPiData( fprintf( f_piDataOut, "%f,%f", cur->data.ismEditDirection.azimuth, cur->data.ismEditDirection.elevation ); } break; case IVAS_PI_RESERVED15: case IVAS_PI_RESERVED27: case IVAS_PI_RESERVED28: case IVAS_PI_RESERVED29: case IVAS_PI_RESERVED30: break; #endif /* RTP_S4_251135_CR26253_0016_REV1 */ } fprintf( f_piDataOut, "\n" ); Loading lib_util/ivas_rtp_payload.c +1 −1 Original line number Diff line number Diff line Loading @@ -1388,7 +1388,7 @@ static uint32_t parseSubsequentEByte( const IVAS_DATA_BUFFER *payload, uint32_t break; #endif default: /* Reserved for future use - unhandled atm */ assert( 0 ); break; } } Loading lib_util/ivas_rtp_pi_data.c +1 −2 Original line number Diff line number Diff line Loading @@ -437,7 +437,7 @@ static ivas_error packDynamicSuppression( const IVAS_PIDATA_GENERIC *piData, uin return IVAS_ERROR( IVAS_ERR_RTP_INSUFFICIENT_OUTPUT_SIZE, "Insufficient space in DAS PI data buffer" ); } buffer[nBytes++] = ( IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION ); /* PF/PM populated during final packing */ buffer[nBytes++] = ( das->piDataType & MASK_5BIT ); /* PF/PM populated during final packing */ buffer[nBytes++] = 2u; buffer[nBytes++] = ( das->speech ? PI_AD_SPEECH_INDICATED : 0 ) | Loading @@ -460,7 +460,6 @@ static ivas_error unpackDynamicSuppression( const uint8_t *buffer, uint32_t numD } das->size = sizeof( IVAS_PIDATA_AUDIO_DESC ); das->piDataType = IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION; das->speech = ( buffer[0] & PI_AD_SPEECH_INDICATED ) != 0; das->music = ( buffer[0] & PI_AD_MUSIC_INDICATED ) != 0; das->ambiance = ( buffer[0] & PI_AD_AMBIANCE_INDICATED ) != 0; Loading lib_util/ivas_rtp_pi_data.h +11 −10 Original line number Diff line number Diff line Loading @@ -57,7 +57,7 @@ typedef enum IVAS_PI_ISM_DISTANCE_ATTENUATION, /* distance attenuation for each object */ IVAS_PI_ISM_DIRECTIVITY, /* directivity of each object */ IVAS_PI_DIEGETIC_TYPE, /* digetic audio indication */ IVAS_PI_RESERVED13, /* reserved */ IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION_INDICATION, /* audio suppression indication */ IVAS_PI_AUDIO_FOCUS_INDICATION, /* audio focus indication (direction in Quaternions and/or level) */ IVAS_PI_RESERVED15, /* reserved */ Loading @@ -65,7 +65,7 @@ typedef enum IVAS_PI_PLAYBACK_DEVICE_ORIENTATION, /* orientation of the playback device in quaternions */ IVAS_PI_HEAD_ORIENTATION, /* head orientation of the listener in Quaternions */ IVAS_PI_LISTENER_POSITION, /* position of the listener in 3D space */ IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION, /* receiver’s preference with respect to audio suppression */ IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION_REQUEST, /* receiver’s preference with respect to audio suppression */ IVAS_PI_AUDIO_FOCUS_REQUEST, /* direction of interest for the listener in Quaternions and/or audio focus level */ IVAS_PI_PI_LATENCY, /* round-trip latency for PI frames */ IVAS_PI_R_ISM_ID, /* id of an object for editing */ Loading Loading @@ -314,9 +314,9 @@ typedef enum IVAS_FLVL_FOCUS_LEVEL_LEVEL_10, /* Audio focus level 10 */ IVAS_FLVL_FOCUS_LEVEL_LEVEL_11, /* Audio focus level 11 */ IVAS_FLVL_FOCUS_LEVEL_LEVEL_12, /* Audio focus level 12 */ IVAS_FLVL_FOCUS_LEVEL_LEVEL_13, /* Audio focus level 13 */ IVAS_FLVL_DEFAULT_AUDIO_FOCUS, /* Default audio focus */ IVAS_FLVL_MAX_AUDIO_FOCUS, /* Apply max audio focus */ IVAS_FLVL_DEFAULT_AUDIO_FOCUS, /* Default audio focus */ IVAS_FLVL_NO_PREFERENCE, /* No preference / No indication */ } IVAS_FLVL; typedef struct Loading Loading @@ -344,7 +344,7 @@ typedef struct */ typedef enum { IVAS_SLI_NO_SUPPRESSION = 0, /* Apply no suppression */ IVAS_SLI_MIN_SUPPRESSION = 0, /* Apply min suppression */ IVAS_SLI_SUPPRESSION_LEVEL_1, /* Suppression level 1 */ IVAS_SLI_SUPPRESSION_LEVEL_2, /* Suppression level 2 */ IVAS_SLI_SUPPRESSION_LEVEL_3, /* Suppression level 3 */ Loading @@ -356,16 +356,16 @@ typedef enum IVAS_SLI_SUPPRESSION_LEVEL_9, /* Suppression level 9 */ IVAS_SLI_SUPPRESSION_LEVEL_10, /* Suppression level 10 */ IVAS_SLI_SUPPRESSION_LEVEL_11, /* Suppression level 11 */ IVAS_SLI_SUPPRESSION_LEVEL_12, /* Suppression level 12 */ IVAS_SLI_SUPPRESSION_LEVEL_13, /* Suppression level 13 */ IVAS_SLI_SUPPRESSION_LEVEL_14, /* Suppression level 14 */ IVAS_SLI_MAX_SUPPRESSION, /* Apply max suppression */ IVAS_SLI_NO_SUPPRESSION, /* Apply no suppression */ IVAS_SLI_DEFAULT_SUPPRESSION, /* Apply default suppression */ IVAS_SLI_NO_PREFERENCE, /* No preference / No indication */ } IVAS_SLI; typedef struct { size_t size; /* sizeof(IVAS_PIDATA_DYNAMIC_SUPPRESSION) */ uint32_t piDataType; /* IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION */ uint32_t piDataType; /* IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION_REQUEST or IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION_INDICATION */ bool speech; /* receiver's preference is voice/speech */ bool music; /* receiver's preference is music */ bool ambiance; /* receiver's preference is background ambiance */ Loading Loading @@ -452,12 +452,13 @@ typedef union IVAS_PIDATA_ISM_ATTENUATION ismAttenuation; IVAS_PIDATA_ISM_DIRECTIVITY ismDirectivity; IVAS_PIDATA_DIEGETIC digeticIndicator; IVAS_PIDATA_DYNAMIC_SUPPRESSION dynSuppressionIndication; IVAS_PIDATA_AUDIO_FOCUS focusIndication; IVAS_PIDATA_ORIENTATION playbackOrientation; IVAS_PIDATA_ORIENTATION headOrientation; IVAS_PIDATA_LISTENER_POSITION listnerPosition; IVAS_PIDATA_DYNAMIC_SUPPRESSION dynSuppression; IVAS_PIDATA_DYNAMIC_SUPPRESSION dynSuppressionRequest; IVAS_PIDATA_AUDIO_FOCUS focusRequest; IVAS_PIDATA_REVERSE_PI_LATENCY piLatency; IVAS_PIDATA_ISM_EDIT_ID ismEditId; Loading tests/rtp/ivasrtp.py +13 −13 Original line number Diff line number Diff line Loading @@ -177,13 +177,13 @@ class PIDATAS(str, Enum): ISM_DISTANCE_ATTENUATION = "ISM_DISTANCE_ATTENUATION" ISM_DIRECTIVITY = "ISM_DIRECTIVITY" DIEGETIC_TYPE = "DIEGETIC_TYPE" RESERVED13 = "RESERVED13" DYNAMIC_AUDIO_SUPPRESSION_INDICATION = "DYNAMIC_AUDIO_SUPPRESSION_INDICATION" AUDIO_FOCUS_INDICATION = "AUDIO_FOCUS_INDICATION" RESERVED15 = "RESERVED15" PLAYBACK_DEVICE_ORIENTATION = "PLAYBACK_DEVICE_ORIENTATION" HEAD_ORIENTATION = "HEAD_ORIENTATION" LISTENER_POSITION = "LISTENER_POSITION" DYNAMIC_AUDIO_SUPPRESSION = "DYNAMIC_AUDIO_SUPPRESSION" DYNAMIC_AUDIO_SUPPRESSION_REQUEST = "DYNAMIC_AUDIO_SUPPRESSION_REQUEST" AUDIO_FOCUS_REQUEST = "AUDIO_FOCUS_REQUEST" PI_LATENCY = "PI_LATENCY" R_ISM_ID = "R_ISM_ID" Loading @@ -199,7 +199,7 @@ class PIDATAS(str, Enum): class SUPPRESSION_LEVEL(int, Enum): SUPPRESSION_LEVEL_NONE = 0 SUPPRESSION_LEVEL_MIN = 0 SUPPRESSION_LEVEL_1 = 1 SUPPRESSION_LEVEL_2 = 2 SUPPRESSION_LEVEL_3 = 3 Loading @@ -211,10 +211,10 @@ class SUPPRESSION_LEVEL(int, Enum): SUPPRESSION_LEVEL_9 = 9 SUPPRESSION_LEVEL_10 = 10 SUPPRESSION_LEVEL_11 = 11 SUPPRESSION_LEVEL_12 = 12 SUPPRESSION_LEVEL_13 = 13 SUPPRESSION_LEVEL_14 = 14 SUPPRESSION_LEVEL_MAX = 15 SUPPRESSION_LEVEL_MAX = 12 SUPPRESSION_LEVEL_NONE = 13 SUPPRESSION_LEVEL_DEFAULT = 14 SUPPRESSION_LEVEL_NO_PREFERENCE = 15 class AUDIO_FOCUS_LEVEL(int, Enum): Loading @@ -231,7 +231,7 @@ class AUDIO_FOCUS_LEVEL(int, Enum): AUDIO_FOCUS_LEVEL_10 = 10 AUDIO_FOCUS_LEVEL_11 = 11 AUDIO_FOCUS_LEVEL_12 = 12 AUDIO_FOCUS_LEVEL_13 = 13 AUDIO_FOCUS_LEVEL_MAX = 13 AUDIO_FOCUS_LEVEL_DEFAULT = 14 AUDIO_FOCUS_LEVEL_NO_PREFERENCE = 15 Loading Loading @@ -938,13 +938,13 @@ PIDataUnpacker = [ unpackUnsupported, # ISM_DISTANCE_ATTENUATION unpackUnsupported, # ISM_DIRECTIVITY unpackDiegetic, # DIEGETIC_TYPE unpackUnsupported, # RESERVED13 unpackDAS, # DYNAMIC_AUDIO_SUPPRESSION_INDICATION unpackAudioFocus, # AUDIO_FOCUS_INDICATION unpackUnsupported, # RESERVED15 unpackOrientation, # PLAYBACK_DEVICE_ORIENTATION unpackOrientation, # HEAD_ORIENTATION unpackPosition, # LISTENER_POSITION unpackDAS, # DYNAMIC_AUDIO_SUPPRESSION unpackDAS, # DYNAMIC_AUDIO_SUPPRESSION_REQUEST unpackAudioFocus, # AUDIO_FOCUS_REQUEST unpackUnsupported, # PI_LATENCY unpackUnsupported, # R_ISM_ID Loading Loading @@ -973,13 +973,13 @@ PIDataPacker = [ packUnsupported, # ISM_DISTANCE_ATTENUATION packUnsupported, # ISM_DIRECTIVITY packDiegetic, # DIEGETIC_TYPE packUnsupported, # RESERVED13 packDAS, # DYNAMIC_AUDIO_SUPPRESSION_INDICATION packAudioFocus, # AUDIO_FOCUS_INDICATION packUnsupported, # RESERVED15 packOrientation, # PLAYBACK_DEVICE_ORIENTATION packOrientation, # HEAD_ORIENTATION packPosition, # LISTENER_POSITION packDAS, # DYNAMIC_AUDIO_SUPPRESSION packDAS, # DYNAMIC_AUDIO_SUPPRESSION_REQUEST packAudioFocus, # AUDIO_FOCUS_DIRECTION packUnsupported, # PI_LATENCY packUnsupported, # R_ISM_ID Loading Loading @@ -1487,7 +1487,7 @@ class IvasRtp: or piTypes == PIDATAS.R_ISM_POSITION ): data = POSITION(**dataDict) elif piTypes == PIDATAS.DYNAMIC_AUDIO_SUPPRESSION: elif "DYNAMIC_AUDIO_SUPPRESSION" in piTypes: data = DYNAMIC_AUDIO_SUPPRESSION(**dataDict) else: assert False, "Unhandled PI Data" Loading Loading
lib_util/ivas_rtp_file.c +87 −73 Original line number Diff line number Diff line Loading @@ -139,9 +139,9 @@ static ivas_error IvasRtpFile_Read( static const char *const PiDataNames[IVAS_PI_MAX_ID] = { "SCENE_ORIENTATION", "DEVICE_ORIENTATION_COMPENSATED", "DEVICE_ORIENTATION_UNCOMPENSATED", "ACOUSTIC_ENVIRONMENT", "AUDIO_DESCRIPTION", "ISM_NUM", "ISM_ID", "ISM_GAIN", "ISM_ORIENTATION", "ISM_POSITION", "ISM_DISTANCE_ATTENUATION", "ISM_DIRECTIVITY", "DIEGETIC_TYPE", "RESERVED13", "ISM_POSITION", "ISM_DISTANCE_ATTENUATION", "ISM_DIRECTIVITY", "DIEGETIC_TYPE", "DYNAMIC_AUDIO_SUPPRESSION_INDICATION", "AUDIO_FOCUS_INDICATION", "RESERVED15", "PLAYBACK_DEVICE_ORIENTATION", "HEAD_ORIENTATION", "LISTENER_POSITION", "DYNAMIC_AUDIO_SUPPRESSION", "AUDIO_FOCUS_REQUEST", "PI_LATENCY", "R_ISM_ID", "R_ISM_GAIN", "DYNAMIC_AUDIO_SUPPRESSION_REQUEST", "AUDIO_FOCUS_REQUEST", "PI_LATENCY", "R_ISM_ID", "R_ISM_GAIN", "R_ISM_ORIENTATION", "R_ISM_POSITION", "R_ISM_DIRECTION", "RESERVED27", "RESERVED28", "RESERVED29", "RESERVED30", "NO_DATA" }; Loading Loading @@ -273,9 +273,20 @@ void IVAS_RTP_LogPiData( fprintf( f_piDataOut, "\n\t\t}" ); } break; case IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION: case IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION_REQUEST: { const IVAS_PIDATA_DYNAMIC_SUPPRESSION *das = &cur->data.dynSuppression; const IVAS_PIDATA_DYNAMIC_SUPPRESSION *das = &cur->data.dynSuppressionRequest; fprintf( f_piDataOut, "{\n" ); fprintf( f_piDataOut, "\t\t\t\"preferSpeech\": %s,\n", das->speech ? "true" : "false" ); fprintf( f_piDataOut, "\t\t\t\"preferMusic\": %s,\n", das->music ? "true" : "false" ); fprintf( f_piDataOut, "\t\t\t\"preferAmbiance\": %s,\n", das->ambiance ? "true" : "false" ); fprintf( f_piDataOut, "\t\t\t\"level\": %d", das->sli ); fprintf( f_piDataOut, "\n\t\t}" ); } break; case IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION_INDICATION: { const IVAS_PIDATA_DYNAMIC_SUPPRESSION *das = &cur->data.dynSuppressionIndication; fprintf( f_piDataOut, "{\n" ); fprintf( f_piDataOut, "\t\t\t\"preferSpeech\": %s,\n", das->speech ? "true" : "false" ); fprintf( f_piDataOut, "\t\t\t\"preferMusic\": %s,\n", das->music ? "true" : "false" ); Loading @@ -284,7 +295,6 @@ void IVAS_RTP_LogPiData( fprintf( f_piDataOut, "\n\t\t}" ); } break; case IVAS_PI_RESERVED13: case IVAS_PI_AUDIO_FOCUS_REQUEST: { fprintf( f_piDataOut, "{" ); Loading Loading @@ -375,18 +385,6 @@ void IVAS_RTP_WriteExtPiData( fprintf( f_piDataOut, "%f,%f,%f,%f", cur->data.deviceUnCompensated.orientation.w, cur->data.deviceUnCompensated.orientation.x, cur->data.deviceUnCompensated.orientation.y, cur->data.deviceUnCompensated.orientation.z ); } break; #ifdef RTP_S4_251135_CR26253_0016_REV1 case IVAS_PI_PLAYBACK_DEVICE_ORIENTATION: { fprintf( f_piDataOut, "%f,%f,%f,%f", cur->data.playbackOrientation.orientation.w, cur->data.playbackOrientation.orientation.x, cur->data.playbackOrientation.orientation.y, cur->data.playbackOrientation.orientation.z ); } break; case IVAS_PI_HEAD_ORIENTATION: { fprintf( f_piDataOut, "%f,%f,%f,%f", cur->data.headOrientation.orientation.w, cur->data.headOrientation.orientation.x, cur->data.headOrientation.orientation.y, cur->data.headOrientation.orientation.z ); } break; #endif case IVAS_PI_ACOUSTIC_ENVIRONMENT: { fprintf( f_piDataOut, "%d", cur->data.acousticEnv.aeid ); Loading @@ -403,11 +401,6 @@ void IVAS_RTP_WriteExtPiData( } break; #ifdef RTP_S4_251135_CR26253_0016_REV1 case IVAS_PI_LISTENER_POSITION: { fprintf( f_piDataOut, "%f,%f,%f", cur->data.listnerPosition.position.x, cur->data.listnerPosition.position.y, cur->data.listnerPosition.position.z ); } break; case IVAS_PI_AUDIO_DESCRIPTION: { uint32_t nEntries = cur->data.audioDesc.nValidEntries; Loading @@ -420,57 +413,6 @@ void IVAS_RTP_WriteExtPiData( } } break; case IVAS_PI_DIEGETIC_TYPE: { const bool *isDiegetic = cur->data.digeticIndicator.isDiegetic; fprintf( f_piDataOut, "%d,%d,%d,%d,%d", isDiegetic[0], isDiegetic[1], isDiegetic[2], isDiegetic[3], isDiegetic[4] ); } break; case IVAS_PI_AUDIO_FOCUS_INDICATION: { if ( cur->data.focusIndication.availDirection ) { fprintf( f_piDataOut, "%f,%f,%f,%f", cur->data.focusIndication.direction.w, cur->data.focusIndication.direction.x, cur->data.focusIndication.direction.y, cur->data.focusIndication.direction.z ); if ( cur->data.focusIndication.availLevel ) { fprintf( f_piDataOut, "," ); } } if ( cur->data.focusIndication.availLevel ) { fprintf( f_piDataOut, "%d", cur->data.focusIndication.flvl ); } } break; case IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION: { const IVAS_PIDATA_DYNAMIC_SUPPRESSION *das = &cur->data.dynSuppression; fprintf( f_piDataOut, "%d,%d,%d,%d", das->speech, das->music, das->ambiance, das->sli ); } break; case IVAS_PI_RESERVED13: case IVAS_PI_AUDIO_FOCUS_REQUEST: { if ( cur->data.focusRequest.availDirection ) { fprintf( f_piDataOut, "%f,%f,%f,%f", cur->data.focusRequest.direction.w, cur->data.focusRequest.direction.x, cur->data.focusRequest.direction.y, cur->data.focusRequest.direction.z ); if ( cur->data.focusRequest.availLevel ) { fprintf( f_piDataOut, "," ); } } if ( cur->data.focusRequest.availLevel ) { fprintf( f_piDataOut, "%d", cur->data.focusRequest.flvl ); } } break; case IVAS_PI_RESERVED15: case IVAS_PI_RESERVED27: case IVAS_PI_RESERVED28: case IVAS_PI_RESERVED29: case IVAS_PI_RESERVED30: case IVAS_PI_ISM_NUM: { fprintf( f_piDataOut, "%d", cur->data.ismNum.numObjects ); Loading Loading @@ -548,6 +490,72 @@ void IVAS_RTP_WriteExtPiData( } } break; case IVAS_PI_DIEGETIC_TYPE: { const bool *isDiegetic = cur->data.digeticIndicator.isDiegetic; fprintf( f_piDataOut, "%d,%d,%d,%d,%d", isDiegetic[0], isDiegetic[1], isDiegetic[2], isDiegetic[3], isDiegetic[4] ); } break; case IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION_INDICATION: { const IVAS_PIDATA_DYNAMIC_SUPPRESSION *das = &cur->data.dynSuppressionIndication; fprintf( f_piDataOut, "%d,%d,%d,%d", das->speech, das->music, das->ambiance, das->sli ); } break; case IVAS_PI_AUDIO_FOCUS_INDICATION: { if ( cur->data.focusIndication.availDirection ) { fprintf( f_piDataOut, "%f,%f,%f,%f", cur->data.focusIndication.direction.w, cur->data.focusIndication.direction.x, cur->data.focusIndication.direction.y, cur->data.focusIndication.direction.z ); if ( cur->data.focusIndication.availLevel ) { fprintf( f_piDataOut, "," ); } } if ( cur->data.focusIndication.availLevel ) { fprintf( f_piDataOut, "%d", cur->data.focusIndication.flvl ); } } break; case IVAS_PI_PLAYBACK_DEVICE_ORIENTATION: { fprintf( f_piDataOut, "%f,%f,%f,%f", cur->data.playbackOrientation.orientation.w, cur->data.playbackOrientation.orientation.x, cur->data.playbackOrientation.orientation.y, cur->data.playbackOrientation.orientation.z ); } break; case IVAS_PI_HEAD_ORIENTATION: { fprintf( f_piDataOut, "%f,%f,%f,%f", cur->data.headOrientation.orientation.w, cur->data.headOrientation.orientation.x, cur->data.headOrientation.orientation.y, cur->data.headOrientation.orientation.z ); } break; case IVAS_PI_LISTENER_POSITION: { fprintf( f_piDataOut, "%f,%f,%f", cur->data.listnerPosition.position.x, cur->data.listnerPosition.position.y, cur->data.listnerPosition.position.z ); } break; case IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION_REQUEST: { const IVAS_PIDATA_DYNAMIC_SUPPRESSION *das = &cur->data.dynSuppressionRequest; fprintf( f_piDataOut, "%d,%d,%d,%d", das->speech, das->music, das->ambiance, das->sli ); } break; case IVAS_PI_AUDIO_FOCUS_REQUEST: { if ( cur->data.focusRequest.availDirection ) { fprintf( f_piDataOut, "%f,%f,%f,%f", cur->data.focusRequest.direction.w, cur->data.focusRequest.direction.x, cur->data.focusRequest.direction.y, cur->data.focusRequest.direction.z ); if ( cur->data.focusRequest.availLevel ) { fprintf( f_piDataOut, "," ); } } if ( cur->data.focusRequest.availLevel ) { fprintf( f_piDataOut, "%d", cur->data.focusRequest.flvl ); } } break; case IVAS_PI_PI_LATENCY: { fprintf( f_piDataOut, "%d", cur->data.piLatency.latency ); Loading Loading @@ -578,6 +586,12 @@ void IVAS_RTP_WriteExtPiData( fprintf( f_piDataOut, "%f,%f", cur->data.ismEditDirection.azimuth, cur->data.ismEditDirection.elevation ); } break; case IVAS_PI_RESERVED15: case IVAS_PI_RESERVED27: case IVAS_PI_RESERVED28: case IVAS_PI_RESERVED29: case IVAS_PI_RESERVED30: break; #endif /* RTP_S4_251135_CR26253_0016_REV1 */ } fprintf( f_piDataOut, "\n" ); Loading
lib_util/ivas_rtp_payload.c +1 −1 Original line number Diff line number Diff line Loading @@ -1388,7 +1388,7 @@ static uint32_t parseSubsequentEByte( const IVAS_DATA_BUFFER *payload, uint32_t break; #endif default: /* Reserved for future use - unhandled atm */ assert( 0 ); break; } } Loading
lib_util/ivas_rtp_pi_data.c +1 −2 Original line number Diff line number Diff line Loading @@ -437,7 +437,7 @@ static ivas_error packDynamicSuppression( const IVAS_PIDATA_GENERIC *piData, uin return IVAS_ERROR( IVAS_ERR_RTP_INSUFFICIENT_OUTPUT_SIZE, "Insufficient space in DAS PI data buffer" ); } buffer[nBytes++] = ( IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION ); /* PF/PM populated during final packing */ buffer[nBytes++] = ( das->piDataType & MASK_5BIT ); /* PF/PM populated during final packing */ buffer[nBytes++] = 2u; buffer[nBytes++] = ( das->speech ? PI_AD_SPEECH_INDICATED : 0 ) | Loading @@ -460,7 +460,6 @@ static ivas_error unpackDynamicSuppression( const uint8_t *buffer, uint32_t numD } das->size = sizeof( IVAS_PIDATA_AUDIO_DESC ); das->piDataType = IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION; das->speech = ( buffer[0] & PI_AD_SPEECH_INDICATED ) != 0; das->music = ( buffer[0] & PI_AD_MUSIC_INDICATED ) != 0; das->ambiance = ( buffer[0] & PI_AD_AMBIANCE_INDICATED ) != 0; Loading
lib_util/ivas_rtp_pi_data.h +11 −10 Original line number Diff line number Diff line Loading @@ -57,7 +57,7 @@ typedef enum IVAS_PI_ISM_DISTANCE_ATTENUATION, /* distance attenuation for each object */ IVAS_PI_ISM_DIRECTIVITY, /* directivity of each object */ IVAS_PI_DIEGETIC_TYPE, /* digetic audio indication */ IVAS_PI_RESERVED13, /* reserved */ IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION_INDICATION, /* audio suppression indication */ IVAS_PI_AUDIO_FOCUS_INDICATION, /* audio focus indication (direction in Quaternions and/or level) */ IVAS_PI_RESERVED15, /* reserved */ Loading @@ -65,7 +65,7 @@ typedef enum IVAS_PI_PLAYBACK_DEVICE_ORIENTATION, /* orientation of the playback device in quaternions */ IVAS_PI_HEAD_ORIENTATION, /* head orientation of the listener in Quaternions */ IVAS_PI_LISTENER_POSITION, /* position of the listener in 3D space */ IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION, /* receiver’s preference with respect to audio suppression */ IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION_REQUEST, /* receiver’s preference with respect to audio suppression */ IVAS_PI_AUDIO_FOCUS_REQUEST, /* direction of interest for the listener in Quaternions and/or audio focus level */ IVAS_PI_PI_LATENCY, /* round-trip latency for PI frames */ IVAS_PI_R_ISM_ID, /* id of an object for editing */ Loading Loading @@ -314,9 +314,9 @@ typedef enum IVAS_FLVL_FOCUS_LEVEL_LEVEL_10, /* Audio focus level 10 */ IVAS_FLVL_FOCUS_LEVEL_LEVEL_11, /* Audio focus level 11 */ IVAS_FLVL_FOCUS_LEVEL_LEVEL_12, /* Audio focus level 12 */ IVAS_FLVL_FOCUS_LEVEL_LEVEL_13, /* Audio focus level 13 */ IVAS_FLVL_DEFAULT_AUDIO_FOCUS, /* Default audio focus */ IVAS_FLVL_MAX_AUDIO_FOCUS, /* Apply max audio focus */ IVAS_FLVL_DEFAULT_AUDIO_FOCUS, /* Default audio focus */ IVAS_FLVL_NO_PREFERENCE, /* No preference / No indication */ } IVAS_FLVL; typedef struct Loading Loading @@ -344,7 +344,7 @@ typedef struct */ typedef enum { IVAS_SLI_NO_SUPPRESSION = 0, /* Apply no suppression */ IVAS_SLI_MIN_SUPPRESSION = 0, /* Apply min suppression */ IVAS_SLI_SUPPRESSION_LEVEL_1, /* Suppression level 1 */ IVAS_SLI_SUPPRESSION_LEVEL_2, /* Suppression level 2 */ IVAS_SLI_SUPPRESSION_LEVEL_3, /* Suppression level 3 */ Loading @@ -356,16 +356,16 @@ typedef enum IVAS_SLI_SUPPRESSION_LEVEL_9, /* Suppression level 9 */ IVAS_SLI_SUPPRESSION_LEVEL_10, /* Suppression level 10 */ IVAS_SLI_SUPPRESSION_LEVEL_11, /* Suppression level 11 */ IVAS_SLI_SUPPRESSION_LEVEL_12, /* Suppression level 12 */ IVAS_SLI_SUPPRESSION_LEVEL_13, /* Suppression level 13 */ IVAS_SLI_SUPPRESSION_LEVEL_14, /* Suppression level 14 */ IVAS_SLI_MAX_SUPPRESSION, /* Apply max suppression */ IVAS_SLI_NO_SUPPRESSION, /* Apply no suppression */ IVAS_SLI_DEFAULT_SUPPRESSION, /* Apply default suppression */ IVAS_SLI_NO_PREFERENCE, /* No preference / No indication */ } IVAS_SLI; typedef struct { size_t size; /* sizeof(IVAS_PIDATA_DYNAMIC_SUPPRESSION) */ uint32_t piDataType; /* IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION */ uint32_t piDataType; /* IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION_REQUEST or IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION_INDICATION */ bool speech; /* receiver's preference is voice/speech */ bool music; /* receiver's preference is music */ bool ambiance; /* receiver's preference is background ambiance */ Loading Loading @@ -452,12 +452,13 @@ typedef union IVAS_PIDATA_ISM_ATTENUATION ismAttenuation; IVAS_PIDATA_ISM_DIRECTIVITY ismDirectivity; IVAS_PIDATA_DIEGETIC digeticIndicator; IVAS_PIDATA_DYNAMIC_SUPPRESSION dynSuppressionIndication; IVAS_PIDATA_AUDIO_FOCUS focusIndication; IVAS_PIDATA_ORIENTATION playbackOrientation; IVAS_PIDATA_ORIENTATION headOrientation; IVAS_PIDATA_LISTENER_POSITION listnerPosition; IVAS_PIDATA_DYNAMIC_SUPPRESSION dynSuppression; IVAS_PIDATA_DYNAMIC_SUPPRESSION dynSuppressionRequest; IVAS_PIDATA_AUDIO_FOCUS focusRequest; IVAS_PIDATA_REVERSE_PI_LATENCY piLatency; IVAS_PIDATA_ISM_EDIT_ID ismEditId; Loading
tests/rtp/ivasrtp.py +13 −13 Original line number Diff line number Diff line Loading @@ -177,13 +177,13 @@ class PIDATAS(str, Enum): ISM_DISTANCE_ATTENUATION = "ISM_DISTANCE_ATTENUATION" ISM_DIRECTIVITY = "ISM_DIRECTIVITY" DIEGETIC_TYPE = "DIEGETIC_TYPE" RESERVED13 = "RESERVED13" DYNAMIC_AUDIO_SUPPRESSION_INDICATION = "DYNAMIC_AUDIO_SUPPRESSION_INDICATION" AUDIO_FOCUS_INDICATION = "AUDIO_FOCUS_INDICATION" RESERVED15 = "RESERVED15" PLAYBACK_DEVICE_ORIENTATION = "PLAYBACK_DEVICE_ORIENTATION" HEAD_ORIENTATION = "HEAD_ORIENTATION" LISTENER_POSITION = "LISTENER_POSITION" DYNAMIC_AUDIO_SUPPRESSION = "DYNAMIC_AUDIO_SUPPRESSION" DYNAMIC_AUDIO_SUPPRESSION_REQUEST = "DYNAMIC_AUDIO_SUPPRESSION_REQUEST" AUDIO_FOCUS_REQUEST = "AUDIO_FOCUS_REQUEST" PI_LATENCY = "PI_LATENCY" R_ISM_ID = "R_ISM_ID" Loading @@ -199,7 +199,7 @@ class PIDATAS(str, Enum): class SUPPRESSION_LEVEL(int, Enum): SUPPRESSION_LEVEL_NONE = 0 SUPPRESSION_LEVEL_MIN = 0 SUPPRESSION_LEVEL_1 = 1 SUPPRESSION_LEVEL_2 = 2 SUPPRESSION_LEVEL_3 = 3 Loading @@ -211,10 +211,10 @@ class SUPPRESSION_LEVEL(int, Enum): SUPPRESSION_LEVEL_9 = 9 SUPPRESSION_LEVEL_10 = 10 SUPPRESSION_LEVEL_11 = 11 SUPPRESSION_LEVEL_12 = 12 SUPPRESSION_LEVEL_13 = 13 SUPPRESSION_LEVEL_14 = 14 SUPPRESSION_LEVEL_MAX = 15 SUPPRESSION_LEVEL_MAX = 12 SUPPRESSION_LEVEL_NONE = 13 SUPPRESSION_LEVEL_DEFAULT = 14 SUPPRESSION_LEVEL_NO_PREFERENCE = 15 class AUDIO_FOCUS_LEVEL(int, Enum): Loading @@ -231,7 +231,7 @@ class AUDIO_FOCUS_LEVEL(int, Enum): AUDIO_FOCUS_LEVEL_10 = 10 AUDIO_FOCUS_LEVEL_11 = 11 AUDIO_FOCUS_LEVEL_12 = 12 AUDIO_FOCUS_LEVEL_13 = 13 AUDIO_FOCUS_LEVEL_MAX = 13 AUDIO_FOCUS_LEVEL_DEFAULT = 14 AUDIO_FOCUS_LEVEL_NO_PREFERENCE = 15 Loading Loading @@ -938,13 +938,13 @@ PIDataUnpacker = [ unpackUnsupported, # ISM_DISTANCE_ATTENUATION unpackUnsupported, # ISM_DIRECTIVITY unpackDiegetic, # DIEGETIC_TYPE unpackUnsupported, # RESERVED13 unpackDAS, # DYNAMIC_AUDIO_SUPPRESSION_INDICATION unpackAudioFocus, # AUDIO_FOCUS_INDICATION unpackUnsupported, # RESERVED15 unpackOrientation, # PLAYBACK_DEVICE_ORIENTATION unpackOrientation, # HEAD_ORIENTATION unpackPosition, # LISTENER_POSITION unpackDAS, # DYNAMIC_AUDIO_SUPPRESSION unpackDAS, # DYNAMIC_AUDIO_SUPPRESSION_REQUEST unpackAudioFocus, # AUDIO_FOCUS_REQUEST unpackUnsupported, # PI_LATENCY unpackUnsupported, # R_ISM_ID Loading Loading @@ -973,13 +973,13 @@ PIDataPacker = [ packUnsupported, # ISM_DISTANCE_ATTENUATION packUnsupported, # ISM_DIRECTIVITY packDiegetic, # DIEGETIC_TYPE packUnsupported, # RESERVED13 packDAS, # DYNAMIC_AUDIO_SUPPRESSION_INDICATION packAudioFocus, # AUDIO_FOCUS_INDICATION packUnsupported, # RESERVED15 packOrientation, # PLAYBACK_DEVICE_ORIENTATION packOrientation, # HEAD_ORIENTATION packPosition, # LISTENER_POSITION packDAS, # DYNAMIC_AUDIO_SUPPRESSION packDAS, # DYNAMIC_AUDIO_SUPPRESSION_REQUEST packAudioFocus, # AUDIO_FOCUS_DIRECTION packUnsupported, # PI_LATENCY packUnsupported, # R_ISM_ID Loading Loading @@ -1487,7 +1487,7 @@ class IvasRtp: or piTypes == PIDATAS.R_ISM_POSITION ): data = POSITION(**dataDict) elif piTypes == PIDATAS.DYNAMIC_AUDIO_SUPPRESSION: elif "DYNAMIC_AUDIO_SUPPRESSION" in piTypes: data = DYNAMIC_AUDIO_SUPPRESSION(**dataDict) else: assert False, "Unhandled PI Data" Loading