Skip to main content

XR_EXT_eye_gaze_interaction

note

Pico's OpenXR runtime supports XR_EXT_eye_gaze_interaction. Please, refer to official Khronos documentation for information. This article covers Pico's private functions related to eye- and face-tracking.

Requires com.picovr.permission.EYE_TRACKING Android permission for eye tracking.

Requires com.picovr.permission.FACE_TRACKING Android permission for face tracking.

Requires android.permission.RECORD_AUDIO Android permission for lip syncing.

Functions

xrSetTrackingModePICO

XrResult xrSetTrackingModePICO(
XrSession session,
XrTrackingModeFlagsPICO flags);

xrSetTrackingStatusPICO

XrResult xrSetTrackingStatusPICO(
XrSession session,
XrTrackingModeFlagsPICO mode,
XrTrackingStateCodePICO code);

I think it is for mocking testing. Just don't use it.

xrGetTrackingModePICO

XrResult xrGetTrackingModePICO(
XrSession session,
XrTrackingModeFlagsPICO* flags);

xrStartFoveationPICO

XrResult xrStartFoveationPICO(
XrSession session);

xrStopFoveationPICO

XrResult xrStopFoveationPICO(
XrSession session);

xrGetEyeTrackingDataPICO

XrResult xrGetEyeTrackingDataPICO(
XrSession session,
XrTime time,
XrEyeTrackingDataPICO* data);

xrGetFaceTrackingDataPICO

XrResult xrGetFaceTrackingDataPICO(
XrSession session,
XrTime time,
XrFaceTrackingDataTypePICO type,
XrFaceTrackingDataPICO* data);

xrGetPupilDistancePICO

XrResult xrGetPupilDistancePICO(
XrSession session,
float* distance);

xrStartEyeTrackingPICO

XrResult xrStartEyeTrackingPICO(
XrSession session);

xrStopEyeTrackingPICO

XrResult xrStopEyeTrackingPICO(
XrSession session,
XrTrackingModeFlagsPICO mode);

xrGetEyeOpennessPICO

XrResult xrGetEyeOpennessPICO(
XrSession session,
float* leftEyeOpenness,
float* rightEyeOpenness);

Requires <meta-data android:name="pvr.app.et_tob_advance" android:value="true"/> in AndroidManifest.xml.

xrGetEyePupilInfoPICO

XrResult xrGetEyePupilInfoPICO(
XrSession session,
XrEyePupilInfoPICO* info);

Requires <meta-data android:name="pvr.app.et_tob_advance" android:value="true"/> in AndroidManifest.xml.

xrGetPerEyePosePICO

XrResult xrGetPerEyePosePICO(
XrSession session,
XrTime time,
XrEyePosePICO* leftEyePose,
XrEyePosePICO* rightEyePose);

Requires <meta-data android:name="pvr.app.et_tob_advance" android:value="true"/> in AndroidManifest.xml.

xrGetBlinkPICO

XrResult xrGetBlinkPICO(
XrSession session,
XrTime time,
bool* isLeftBlink,
bool* isRightBlink);

Requires <meta-data android:name="pvr.app.et_tob_advance" android:value="true"/> in AndroidManifest.xml.

Types

XrEyePupilInfoPICO

typedef struct XrEyePupilInfoPICO {
float leftEyePupilDiameter;
float rightEyePupilDiameter;
float leftEyePupilPosition[2];
float rightEyePupilPosition[2];
} XrEyePupilInfoPICO;

XrEyePoseFlagsPICO

typedef XrFlags32 XrEyePoseFlagsPICO;

static const XrEyePoseFlagsPICO XR_EYE_POSE_GAZE_POSITION_VALID_PICO = 0x00000080;
static const XrEyePoseFlagsPICO XR_EYE_POSE_GAZE_DIRECTION_VALID_PICO = 0x00000100;

XrEyePosePICO

typedef struct XrEyePosePICO {
XrVector3f gazePosition;
XrVector3f gazeDirection;
XrEyePoseFlagsPICO flags;
} XrEyePosePICO;

XrEyePoseStatusPICO

typedef enum XrEyePoseStatusPICO {
XR_ET_GAZE_POINT_VALID_PICO = (1 << 0),
XR_ET_GAZE_VECTOR_VALID_PICO = (1 << 1),
XR_ET_EYE_OPENNESS_VALID_PICO = (1 << 2),
XR_ET_EYE_PUPIL_DILATION_VALID_PICO = (1 << 3),
XR_ET_EYE_POSITION_GUIDE_VALID_PICO = (1 << 4),
XR_ET_EYE_PUPIL_POSITION_VALID_PICO = (1 << 5),
XR_ET_EYE_CONVERGENCE_DISTANCE_VALID_PICO = (1 << 6),
XR_ET_EYE_GAZE_POINT_VALID_PICO = (1 << 7),
XR_ET_EYE_GAZE_VECTOR_VALID_PICO = (1 << 8),
XR_ET_PUPIL_DISTANCE_VALID_PICO = (1 << 9),
XR_ET_CONVERGENCE_DISTANCE_VALID_PICO = (1 << 10),
XR_ET_PUPIL_DIAMETER_VALID_PICO = (1 << 11),
} XrEyePoseStatusPICO;

XrEyeTrackingDataPICO

typedef struct XrEyeTrackingDataPICO {
XrTime time;
XrEyePoseStatusPICO leftEyePoseStatus;
XrEyePoseStatusPICO rightEyePoseStatus;
XrEyePoseStatusPICO combinedEyePoseStatus;
float leftEyeGazePoint[3];
float rightEyeGazePoint[3];
float combinedEyeGazePoint[3];
float leftEyeGazeVector[3];
float rightEyeGazeVector[3];
float combinedEyeGazeVector[3];
float leftEyeOpenness;
float rightEyeOpenness;
float leftEyePupilDilation;
float rightEyePupilDilation;
float leftEyePositionGuide[3];
float rightEyePositionGuide[3];
float foveatedGazeDirection[3];
int32_t foveatedGazeTrackingState;
} XrEyeTrackingDataPICO;

XrFaceTrackingDataTypePICO

typedef enum XrFaceTrackingDataTypePICO {
XR_GET_FACE_DATA_DEFAULT_PICO = 0,
XR_GET_FACE_DATA_PICO = 3,
XR_GET_LIP_DATA_PICO = 4,
XR_GET_FACELIP_DATA_PICO = 5,
} XrFaceTrackingDataTypePICO;

XrFaceTrackingDataPICO

typedef struct XrFaceTrackingDataPICO {
XrTime time;
float blendShapeWeight[72];
float isVideoInputValid[10];
float laughingProbability;
float emotionProbability[10];
float reserved[128];
} XrFaceTrackingDataPICO;

XrBlendShapeIndexPICO

typedef enum XrBlendShapeIndexPICO {
XR_BS_EYELOOKDOWN_L_PICO = 0,
XR_BS_NOSESNEER_L_PICO = 1,
XR_BS_EYELOOKIN_L_PICO = 2,
XR_BS_BROWINNERUP_PICO = 3,
XR_BS_BROWDOWN_R_PICO = 4,
XR_BS_MOUTHCLOSE_PICO = 5,
XR_BS_MOUTHLOWERDOWN_R_PICO = 6,
XR_BS_JAWOPEN_PICO = 7,
XR_BS_MOUTHUPPERUP_R_PICO = 8,
XR_BS_MOUTHSHRUGUPPER_PICO = 9,
XR_BS_MOUTHFUNNEL_PICO = 10,
XR_BS_EYELOOKIN_R_PICO = 11,
XR_BS_EYELOOKDOWN_R_PICO = 12,
XR_BS_NOSESNEER_R_PICO = 13,
XR_BS_MOUTHROLLUPPER_PICO = 14,
XR_BS_JAWRIGHT_PICO = 15,
XR_BS_BROWDOWN_L_PICO = 16,
XR_BS_MOUTHSHRUGLOWER_PICO = 17,
XR_BS_MOUTHROLLLOWER_PICO = 18,
XR_BS_MOUTHSMILE_L_PICO = 19,
XR_BS_MOUTHPRESS_L_PICO = 20,
XR_BS_MOUTHSMILE_R_PICO = 21,
XR_BS_MOUTHPRESS_R_PICO = 22,
XR_BS_MOUTHDIMPLE_R_PICO = 23,
XR_BS_MOUTHLEFT_PICO = 24,
XR_BS_JAWFORWARD_PICO = 25,
XR_BS_EYESQUINT_L_PICO = 26,
XR_BS_MOUTHFROWN_L_PICO = 27,
XR_BS_EYEBLINK_L_PICO = 28,
XR_BS_CHEEKSQUINT_L_PICO = 29,
XR_BS_BROWOUTERUP_L_PICO = 30,
XR_BS_EYELOOKUP_L_PICO = 31,
XR_BS_JAWLEFT_PICO = 32,
XR_BS_MOUTHSTRETCH_L_PICO = 33,
XR_BS_MOUTHPUCKER_PICO = 34,
XR_BS_EYELOOKUP_R_PICO = 35,
XR_BS_BROWOUTERUP_R_PICO = 36,
XR_BS_CHEEKSQUINT_R_PICO = 37,
XR_BS_EYEBLINK_R_PICO = 38,
XR_BS_MOUTHUPPERUP_L_PICO = 39,
XR_BS_MOUTHFROWN_R_PICO = 40,
XR_BS_EYESQUINT_R_PICO = 41,
XR_BS_MOUTHSTRETCH_R_PICO = 42,
XR_BS_CHEEKPUFF_PICO = 43,
XR_BS_EYELOOKOUT_L_PICO = 44,
XR_BS_EYELOOKOUT_R_PICO = 45,
XR_BS_EYEWIDE_R_PICO = 46,
XR_BS_EYEWIDE_L_PICO = 47,
XR_BS_MOUTHRIGHT_PICO = 48,
XR_BS_MOUTHDIMPLE_L_PICO = 49,
XR_BS_MOUTHLOWERDOWN_L_PICO = 50,
XR_BS_TONGUEOUT_PICO = 51,
XR_VISEME_PP_PICO = 52,
XR_VISEME_CH_PICO = 53,
XR_VISEME_O_PICO = 54,
XR_VISEME_OU_PICO = 55,
XR_VISEME_I_BACK_PICO = 56,
XR_VISEME_U_PICO = 57,
XR_VISEME_RR_PICO = 58,
XR_VISEME_XX_PICO = 59,
XR_VISEME_AA_PICO = 60,
XR_VISEME_I_FRONT_PICO = 61,
XR_VISEME_FF_PICO = 62,
XR_VISEME_UW_PICO = 63,
XR_VISEME_TH_PICO = 64,
XR_VISEME_KK_PICO = 65,
XR_VISEME_SS_PICO = 66,
XR_VISEME_E_PICO = 67,
XR_VISEME_DD_PICO = 68,
XR_VISEME_EI_PICO = 69,
XR_VISEME_NN_PICO = 70,
XR_VISEME_SIL_PICO = 71,
XR_BLEND_SHAPE_COUNT_PICO = 72,
} XrBlendShapeIndexPICO;