**Name String**

`XR_ANDROID_face_tracking`

**Extension Type**

Instance extension

**Registered Extension Number**

459

**Revision**

3

**Extension and Version Dependencies**

[OpenXR 1.0](https://registry.khronos.org/OpenXR/specs/1.0/html/xrspec.html#versions-1.0)

**Last Modified Date**

2025-06-04

**IP Status**

No known IP claims.

**Contributors**

Spencer Quin, Google

Jared Finder, Google

Levana Chen, Google

## Overview

This extension enables applications to get weights of blend shapes and render facial expressions in XR experiences.

This extension is intended to provide the information needed to create realistic avatars and expressive representations of users in virtual space. The application**can**check facial calibration activation before getting weights of blend shapes.

## Face Tracker

A face tracker is a sensing device that tracks facial expression through user-facing image streams and camera calibration. The main purpose of this extension is to map user facial expressions to their avatars in a virtual scene.

Face tracking data is sensitive personal information and is closely linked to personal privacy and integrity. It is strongly recommended that applications storing or transferring face tracking data always ask the user for active and specific acceptance to do so.
| **Caution:**   
|
| **Permissions** Android applications**must** have the android.permission.FACE_TRACKING permission listed in their manifest. The android.permission.FACE_TRACKING permission is considered a dangerous permission. The application**must** request the permission at runtime to use these functions:
|
| - [xrCreateFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrCreateFaceTrackerANDROID)
| - [xrDestroyFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrDestroyFaceTrackerANDROID)
| - [xrGetFaceStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrGetFaceStateANDROID)
| - [xrGetFaceCalibrationStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrGetFaceCalibrationStateANDROID)
|
| (protection level: dangerous)

- Applications will receive`XR_ERROR_PERMISSION_INSUFFICIENT`when creating an active face tracker until the application has been allowed access to the face tracker.
- When getting face states by using[xrGetFaceStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrGetFaceStateANDROID),[XrFaceStateANDROID::isValid](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceStateANDROID)won't return`XR_TRUE`unless the application access has been allowed

## Inspect system capability

The[XrSystemFaceTrackingPropertiesANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrSystemFaceTrackingPropertiesANDROID)structure is defined as:  

    typedef struct XrSystemFaceTrackingPropertiesANDROID {
        XrStructureType    type;
        void*              next;
        XrBool32           supportsFaceTracking;
    } XrSystemFaceTrackingPropertiesANDROID;

### Member Descriptions

- `type`is the[XrStructureType](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrStructureType)of this structure.
- `next`is`NULL`or a pointer to the next structure in a structure chain.
- `supportsFaceTracking`is an[XrBool32](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrBool32)indicating if the current system supports face tracking.

An application**can** inspect whether the system is capable of face tracking by extending the[XrSystemProperties](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrSystemProperties)with[XrSystemFaceTrackingPropertiesANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrSystemFaceTrackingPropertiesANDROID)structure when calling[xrGetSystemProperties](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#xrGetSystemProperties).

If and only if a runtime returns`XR_FALSE`for`supportsFaceTracking`, the runtime**must** return`XR_ERROR_FEATURE_UNSUPPORTED`from[xrCreateFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrCreateFaceTrackerANDROID).

## Create a face tracker handle

    XR_DEFINE_HANDLE(XrFaceTrackerANDROID)

The[XrFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackerANDROID)handle represents a face tracker for face tracking.

This handle**can**be used to access face tracking data using other functions in this extension.

The[xrCreateFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrCreateFaceTrackerANDROID)function is defined as:  

    XrResult xrCreateFaceTrackerANDROID(
        XrSession                                   session,
        const XrFaceTrackerCreateInfoANDROID*       createInfo,
        XrFaceTrackerANDROID*                       faceTracker);

### Parameter Descriptions

- `session`is an[XrSession](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrSession)handle in which the face tracker will be active.
- `createInfo`is the[XrFaceTrackerCreateInfoANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackerCreateInfoANDROID)used to specify the face tracker.
- `faceTracker`is the returned[XrFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackerANDROID)handle.

An application**can** create an[XrFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackerANDROID)handle using[xrCreateFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrCreateFaceTrackerANDROID)function.

If the system does not support face tracking,[xrCreateFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrCreateFaceTrackerANDROID)will return`XR_ERROR_FEATURE_UNSUPPORTED`.

### Valid Usage (Implicit)

- The[`XR_ANDROID_face_tracking`](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XR_ANDROID_face_tracking)extension**must** be enabled prior to calling[xrCreateFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrCreateFaceTrackerANDROID)
- `session`**must** be a valid[XrSession](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrSession)handle
- `createInfo`**must** be a pointer to a valid[XrFaceTrackerCreateInfoANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackerCreateInfoANDROID)structure
- `faceTracker`**must** be a pointer to an[XrFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackerANDROID)handle

### Return Codes

[**Success**](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#fundamentals-successcodes)

- `XR_SUCCESS`
- `XR_SESSION_LOSS_PENDING`

[**Failure**](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#fundamentals-errorcodes)

- `XR_ERROR_FUNCTION_UNSUPPORTED`
- `XR_ERROR_VALIDATION_FAILURE`
- `XR_ERROR_RUNTIME_FAILURE`
- `XR_ERROR_HANDLE_INVALID`
- `XR_ERROR_INSTANCE_LOST`
- `XR_ERROR_SESSION_LOST`
- `XR_ERROR_OUT_OF_MEMORY`
- `XR_ERROR_LIMIT_REACHED`

The[XrFaceTrackerCreateInfoANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackerCreateInfoANDROID)structure is described as follows:  

    typedef struct XrFaceTrackerCreateInfoANDROID {
        XrStructureType    type;
        void*              next;
    } XrFaceTrackerCreateInfoANDROID;

### Member Descriptions

- `type`is the[XrStructureType](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrStructureType)of this structure.
- `next`is`NULL`or a pointer to the next structure in a structure chain. No such structures are defined in core OpenXR or this extension.

The[XrFaceTrackerCreateInfoANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackerCreateInfoANDROID)structure describes the information to create an[XrFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackerANDROID)handle.

### Valid Usage (Implicit)

- The[`XR_ANDROID_face_tracking`](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XR_ANDROID_face_tracking)extension**must** be enabled prior to using[XrFaceTrackerCreateInfoANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackerCreateInfoANDROID)
- `type`**must** be`XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID`
- `next`**must** be`NULL`or a valid pointer to the[next structure in a structure chain](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#fundamentals-valid-usage-for-structure-pointer-chains)

The[xrDestroyFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrDestroyFaceTrackerANDROID)function is defined as:  

    XrResult xrDestroyFaceTrackerANDROID(
        XrFaceTrackerANDROID                        faceTracker);

### Parameter Descriptions

- `faceTracker`is an[XrFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackerANDROID)previously created by[xrCreateFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrCreateFaceTrackerANDROID).

The[xrDestroyFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrDestroyFaceTrackerANDROID)function releases the`faceTracker`and the underlying resources when the face tracking experience is over.

### Valid Usage (Implicit)

- The[`XR_ANDROID_face_tracking`](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XR_ANDROID_face_tracking)extension**must** be enabled prior to calling[xrDestroyFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrDestroyFaceTrackerANDROID)
- `faceTracker`**must** be a valid[XrFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackerANDROID)handle

### Thread Safety

- Access to`faceTracker`, and any child handles,**must**be externally synchronized

### Return Codes

[**Success**](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#fundamentals-successcodes)

- `XR_SUCCESS`

[**Failure**](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#fundamentals-errorcodes)

- `XR_ERROR_FUNCTION_UNSUPPORTED`
- `XR_ERROR_HANDLE_INVALID`

## Check face calibration

The`xrGetFaceCalibrationStateANDROID`function is defined as:  

    XrResult xrGetFaceCalibrationStateANDROID(
        XrFaceTrackerANDROID                        faceTracker,
        XrBool32*                                   faceIsCalibratedOutput);

### Parameter Descriptions

- `faceTracker`is an[XrFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackerANDROID)previously created by[xrCreateFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrCreateFaceTrackerANDROID).
- `faceIsCalibratedOutput`indicates if the face tracker has been calibrated or not.

An application**can** check face calibration state using[xrGetFaceCalibrationStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrGetFaceCalibrationStateANDROID)function.

When the tracking service is still under initialization, the runtime**may** return`XR_ERROR_SERVICE_NOT_READY_ANDROID`from[xrGetFaceCalibrationStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrGetFaceCalibrationStateANDROID)to indicate that the application**can**retry later.

If the system does not support face calibration,[xrGetFaceCalibrationStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrGetFaceCalibrationStateANDROID)will return`XR_ERROR_FEATURE_UNSUPPORTED`. Otherwise,`faceIsCalibratedOutput`may be set to`XR_TRUE`to reflect the face calibration state.

### Valid Usage (Implicit)

- The[`XR_ANDROID_face_tracking`](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XR_ANDROID_face_tracking)extension**must** be enabled prior to calling[xrGetFaceCalibrationStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrGetFaceCalibrationStateANDROID)
- `faceTracker`**must** be a valid[XrFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackerANDROID)handle
- `faceIsCalibratedOutput`**must** be a pointer to an[`XrBool32`](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrBool32)value

Return Codes

[**Success**](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#fundamentals-successcodes)

- `XR_SUCCESS`
- `XR_SESSION_LOSS_PENDING`

[**Failure**](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#fundamentals-errorcodes)

- `XR_ERROR_FUNCTION_UNSUPPORTED`
- `XR_ERROR_VALIDATION_FAILURE`
- `XR_ERROR_RUNTIME_FAILURE`
- `XR_ERROR_HANDLE_INVALID`
- `XR_ERROR_INSTANCE_LOST`
- `XR_ERROR_SESSION_LOST`
- `XR_ERROR_OUT_OF_MEMORY`
- `XR_ERROR_LIMIT_REACHED`
- `XR_ERROR_SERVICE_NOT_READY_ANDROID`

## Get facial expressions

The[xrGetFaceStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrGetFaceStateANDROID)function returns blend shapes of facial expressions at a given time.  

    XrResult xrGetFaceStateANDROID(
        XrFaceTrackerANDROID                        faceTracker,
        const XrFaceStateGetInfoANDROID*            getInfo,
        XrFaceStateANDROID*                         faceStateOutput);

### Parameter Descriptions

- `faceTracker`is an[XrFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackerANDROID)previously created by[xrCreateFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrCreateFaceTrackerANDROID).
- `getInfo`is a pointer to[XrFaceStateGetInfoANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceStateGetInfoANDROID)describing information to obtain face expressions.
- `faceStateOutput`is a pointer to[XrFaceStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceStateANDROID)receiving the returned face tracking state and facial expressions.

### Valid Usage (Implicit)

- The[`XR_ANDROID_face_tracking`](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XR_ANDROID_face_tracking)extension**must** be enabled prior to calling[xrGetFaceStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrGetFaceStateANDROID)
- `faceTracker`**must** be a valid[XrFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackerANDROID)handle
- `getInfo`**must** be a pointer to a valid[XrFaceStateGetInfoANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceStateGetInfoANDROID)structure
- `faceStateOutput`**must** be a pointer to an[XrFaceStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceStateANDROID)structure

### Return Codes

[**Success**](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#fundamentals-successcodes)

- `XR_SUCCESS`
- `XR_SESSION_LOSS_PENDING`

[**Failure**](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#fundamentals-errorcodes)

- `XR_ERROR_FUNCTION_UNSUPPORTED`
- `XR_ERROR_VALIDATION_FAILURE`
- `XR_ERROR_RUNTIME_FAILURE`
- `XR_ERROR_HANDLE_INVALID`
- `XR_ERROR_INSTANCE_LOST`
- `XR_ERROR_SESSION_LOST`
- `XR_ERROR_OUT_OF_MEMORY`
- `XR_ERROR_LIMIT_REACHED`
- `XR_ERROR_TIME_INVALID`

The[XrFaceStateGetInfoANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceStateGetInfoANDROID)structure describes the information to obtain facial expressions.  

    typedef struct XrFaceStateGetInfoANDROID {
        XrStructureType    type;
        void*              next;
        XrTime             time;
    } XrFaceStateGetInfoANDROID;

### Member Descriptions

- `type`is the[XrStructureType](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrStructureType)of this structure.
- `next`is`NULL`or a pointer to the next structure in a structure chain. No such structures are defined in core OpenXR or this extension.
- `time`is an[`XrTime`](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrTime)at which the facial expressions are requested.

Applications**should**request a time equal to the predicted display time for the rendered frame.

### Valid Usage (Implicit)

- The[`XR_ANDROID_face_tracking`](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XR_ANDROID_face_tracking)extension**must** be enabled prior to using[XrFaceStateGetInfoANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceStateGetInfoANDROID)
- `type`**must** be`XR_TYPE_FACE_STATE_GET_INFO_ANDROID`
- `next`**must** be`NULL`or a valid pointer to the[next structure in a structure chain](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#fundamentals-valid-usage-for-structure-pointer-chains)

[XrFaceStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceStateANDROID)structure returns the face tracking state and facial expressions.  

    typedef struct XrFaceStateANDROID {
        XrStructureType               type;
        void*                         next;
        uint32_t                      parametersCapacityInput;
        uint32_t                      parametersCountOutput;
        float*                        parameters;
        XrFaceTrackingStateANDROID    faceTrackingState;
        XrTime                        sampleTime;
        XrBool32                      isValid;
        uint32_t                      regionConfidencesCapacityInput;
        uint32_t                      regionConfidencesCountOutput;
        float*                        regionConfidences;
    } XrFaceStateANDROID;

### Member Descriptions

- `type`is the[XrStructureType](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrStructureType)of this structure.
- `next`is`NULL`or a pointer to the next structure in a structure chain. No such structures are defined in core OpenXR or this extension.
- `parametersCapacityInput`is a`uint32_t`describing the capacity of the`parameters`array, or 0 to indicate a request to retrieve the required capacity.
- `parametersCountOutput`is a`uint32_t`describing the number of`parameters`, or the required capacity in the case that`parametersCapacityInput`is insufficient.
- `parameters`is a pointer to an application-allocated array of`float`that will be filled with weights of facial expression blend shapes.
- `faceTrackingState`is the`XrFaceTrackingStateANDROID`of validity status of face tracking.
- `sampleTime`is an[`XrTime`](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrTime)time at which the returned expressions are tracked or extrapolated to. It equals the time at which the expression weights were requested if the extrapolation at the time was successful.
- `isValid`indicates if the data is valid even if it is not from the current frame.
- `regionConfidencesCapacityInput`is a`uint32_t`describing the capacity of the`regionConfidences`array, or 0 to indicate a request to retrieve the required capacity.
- `regionConfidencesCountOutput`is a`uint32_t`describing the number of`regionConfidences`, or the required capacity in the case that`regionConfidencesCapacityInput`is insufficient.
- `regionConfidences`is a pointer to an application-allocated array of`float`that will be filled with confidence values for each facial region.
- See the[Buffer Size Parameters](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#fundamentals-buffer-size-parameters)section for a detailed description of retrieving the required`parameters`and`regionConfidences`size.

The application**can** set`parametersCapacityInput`to`XR_FACE_PARAMETER_COUNT_ANDROID`to get facial expressions which are indexed by[XrFaceParameterIndicesANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceParameterIndicesANDROID).

The returned`parameters`represent the weights of blend shapes of current facial expressions.

The`parameters`array updates will be ordered so that the application**can** index elements using the corresponding facial expression enum (e.g.[XrFaceParameterIndicesANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceParameterIndicesANDROID)).

### Valid Usage (Implicit)

- The[`XR_ANDROID_face_tracking`](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XR_ANDROID_face_tracking)extension**must** be enabled prior to using[XrFaceStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceStateANDROID)
- `type`**must** be`XR_TYPE_FACE_STATE_ANDROID`
- `next`**must** be`NULL`or a valid pointer to the[next structure in a structure chain](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#fundamentals-valid-usage-for-structure-pointer-chains)
- If`parametersCapacityInput`is not`0, parameters`**must** be a pointer to an array of`parametersCapacityInput float`values
- If`regionConfidencesCapacityInput`is not`0, regionConfidences`**must** be a pointer to an array of`regionConfidencesCapacityInput float`values
- `faceTrackingState`**must** be a valid[XrFaceTrackingStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackingStateANDROID)value

The[XrFaceTrackingStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackingStateANDROID)enumeration identifies the different states of the face tracker.  

    typedef enum XrFaceTrackingStateANDROID {
        XR_FACE_TRACKING_STATE_PAUSED_ANDROID = 0,
        XR_FACE_TRACKING_STATE_STOPPED_ANDROID = 1,
        XR_FACE_TRACKING_STATE_TRACKING_ANDROID = 2
    } XrFaceTrackingStateANDROID;

The enums have the following meanings:

|-------------------------------------------|--------------------------------------------------------------------------|
| **Enum**                                  | **Description**                                                          |
| `XR_FACE_TRACKING_STATE_PAUSED_ANDROID`   | Indicates that face tracking is paused but may be resumed in the future. |
| `XR_FACE_TRACKING_STATE_STOPPED_ANDROID`  | Tracking has stopped but the client still has an active face tracker.    |
| `XR_FACE_TRACKING_STATE_TRACKING_ANDROID` | The face is tracked and its pose is current.                             |

## Confidence Regions

The`XR_ANDROID_face_tracking`extension also provides confidence values for three facial regions: left eye, right eye, and lower face. These values, ranging from 0 (no confidence) to 1 (highest confidence), indicate the accuracy of the face tracking for each region.

You can use these confidence values to progressively disable blendshapes or apply visual filters (like blurring) to the corresponding face region. For a basic on/off control, we recommend using a threshold of 0.3 to fully deactivate blendshapes in the corresponding face region.

The "lower face" area represents everything under the eyes, including the mouth, chin, cheek, and nose. The eye region includes the eyes and brow area.

The following table describes the blendshapes associated with each confidence region:

|   Confidence Region   |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               Blendshapes                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
|-----------------------| |
| Lower Face            | \`XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_CHIN_RAISER_B_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_CHIN_RAISER_T_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_DIMPLER_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_DIMPLER_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_JAW_DROP_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_LEFT_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_RIGHT_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_JAW_THRUST_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LB_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LT_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RB_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RT_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_PUCKER_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_PUCKER_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_SUCK_LB_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_SUCK_LT_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_SUCK_RB_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_SUCK_RT_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LIPS_TOWARD_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_MOUTH_LEFT_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_MOUTH_RIGHT_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_TONGUE_OUT_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_TONGUE_LEFT_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_TONGUE_RIGHT_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_TONGUE_UP_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_TONGUE_DOWN_ANDROID\` |
| Left/Right Upper Face | \`XR_FACE_PARAMETER_INDICES_BROW_LOWERER_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_BROW_LOWERER_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_EYES_CLOSED_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_EYES_CLOSED_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_R_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_L_ANDROID\`, \`XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_R_ANDROID\`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |

## Conventions of blend shapes

This extension defines 68 blend shapes through`XR_FACE_PARAMETER_COUNT_ANDROID`, for the reduced G-Nome format. Each parameter in this enum is an index into a blend shape array whose values are type of`float`and the runtime normalizes to 1 - 0.  

    typedef enum XrFaceParameterIndicesANDROID {
        XR_FACE_PARAMETER_INDICES_BROW_LOWERER_L_ANDROID = 0,
        XR_FACE_PARAMETER_INDICES_BROW_LOWERER_R_ANDROID = 1,
        XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_L_ANDROID = 2,
        XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_R_ANDROID = 3,
        XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_L_ANDROID = 4,
        XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_R_ANDROID = 5,
        XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_L_ANDROID = 6,
        XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_R_ANDROID = 7,
        XR_FACE_PARAMETER_INDICES_CHIN_RAISER_B_ANDROID = 8,
        XR_FACE_PARAMETER_INDICES_CHIN_RAISER_T_ANDROID = 9,
        XR_FACE_PARAMETER_INDICES_DIMPLER_L_ANDROID = 10,
        XR_FACE_PARAMETER_INDICES_DIMPLER_R_ANDROID = 11,
        XR_FACE_PARAMETER_INDICES_EYES_CLOSED_L_ANDROID = 12,
        XR_FACE_PARAMETER_INDICES_EYES_CLOSED_R_ANDROID = 13,
        XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_L_ANDROID = 14,
        XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_R_ANDROID = 15,
        XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_L_ANDROID = 16,
        XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_R_ANDROID = 17,
        XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_L_ANDROID = 18,
        XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_R_ANDROID = 19,
        XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_L_ANDROID = 20,
        XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_R_ANDROID = 21,
        XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_L_ANDROID = 22,
        XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_R_ANDROID = 23,
        XR_FACE_PARAMETER_INDICES_JAW_DROP_ANDROID = 24,
        XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_LEFT_ANDROID = 25,
        XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_RIGHT_ANDROID = 26,
        XR_FACE_PARAMETER_INDICES_JAW_THRUST_ANDROID = 27,
        XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_L_ANDROID = 28,
        XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_R_ANDROID = 29,
        XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_L_ANDROID = 30,
        XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_R_ANDROID = 31,
        XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_L_ANDROID = 32,
        XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_R_ANDROID = 33,
        XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LB_ANDROID = 34,
        XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LT_ANDROID = 35,
        XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RB_ANDROID = 36,
        XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RT_ANDROID = 37,
        XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_L_ANDROID = 38,
        XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_R_ANDROID = 39,
        XR_FACE_PARAMETER_INDICES_LIP_PUCKER_L_ANDROID = 40,
        XR_FACE_PARAMETER_INDICES_LIP_PUCKER_R_ANDROID = 41,
        XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_L_ANDROID = 42,
        XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_R_ANDROID = 43,
        XR_FACE_PARAMETER_INDICES_LIP_SUCK_LB_ANDROID = 44,
        XR_FACE_PARAMETER_INDICES_LIP_SUCK_LT_ANDROID = 45,
        XR_FACE_PARAMETER_INDICES_LIP_SUCK_RB_ANDROID = 46,
        XR_FACE_PARAMETER_INDICES_LIP_SUCK_RT_ANDROID = 47,
        XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_L_ANDROID = 48,
        XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_R_ANDROID = 49,
        XR_FACE_PARAMETER_INDICES_LIPS_TOWARD_ANDROID = 50,
        XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_L_ANDROID = 51,
        XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_R_ANDROID = 52,
        XR_FACE_PARAMETER_INDICES_MOUTH_LEFT_ANDROID = 53,
        XR_FACE_PARAMETER_INDICES_MOUTH_RIGHT_ANDROID = 54,
        XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_L_ANDROID = 55,
        XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_R_ANDROID = 56,
        XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_L_ANDROID = 57,
        XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_R_ANDROID = 58,
        XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_L_ANDROID = 59,
        XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_R_ANDROID = 60,
        XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_L_ANDROID = 61,
        XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_R_ANDROID = 62,
        XR_FACE_PARAMETER_INDICES_TONGUE_OUT_ANDROID = 63,
        XR_FACE_PARAMETER_INDICES_TONGUE_LEFT_ANDROID = 64,
        XR_FACE_PARAMETER_INDICES_TONGUE_RIGHT_ANDROID = 65,
        XR_FACE_PARAMETER_INDICES_TONGUE_UP_ANDROID = 66,
        XR_FACE_PARAMETER_INDICES_TONGUE_DOWN_ANDROID = 67
    } XrFaceParameterIndicesANDROID;

| **Note:** In this table, a shortened form of the`XrFaceParameterIndicesANDROID`names for ease of reading.`BROW_LOWERER_R`, for example, maps to`XR_FACE_PARAMETER_INDICES_BROW_LOWERER_L_ANDROID`.

| Index |          Name          |                                                                                                                                             Reference Image                                                                                                                                             ||
|-------|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|
| 0     | BROW_LOWERER_L         | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)BROW_LOWERER_L = 0.0         | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/browLowererL_front.png)BROW_LOWERER_L = 1.0                |
| 1     | BROW_LOWERER_R         | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)BROW_LOWERER_R = 0.0         | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/browLowererR_front.png)BROW_LOWERER_R = 1.0                |
| 2     | CHEEK_PUFF_L           | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)CHEEK_PUFF_L = 0.0           | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/cheekPuffL_front.png)CHEEK_PUFF_L = 1.0                    |
| 3     | CHEEK_PUFF_R           | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)CHEEK_PUFF_R = 0.0           | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/cheekPuffR_front.png)CHEEK_PUFF_R = 1.0                    |
| 4     | CHEEK_RAISER_L         | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)CHEEK_RAISER_L = 0.0         | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/cheekRaiserL_front.png)CHEEK_RAISER_L = 1.0                |
| 5     | CHEEK_RAISER_R         | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)CHEEK_RAISER_R = 0.0         | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/cheekRaiserR_front.png)CHEEK_RAISER_R = 1.0                |
| 6     | CHEEK_SUCK_L           | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)CHEEK_SUCK_L = 0.0           | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/cheekSuckL_front.png)CHEEK_SUCK_L = 1.0                    |
| 7     | CHEEK_SUCK_R           | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)CHEEK_SUCK_R = 0.0           | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/cheekSuckR_front.png)CHEEK_SUCK_R = 1.0                    |
| 8     | CHIN_RAISER_B          | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)CHIN_RAISER_B = 0.0          | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/chinRaiserB_front.png)CHIN_RAISER_B = 1.0                  |
| 9     | CHIN_RAISER_T          | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)CHIN_RAISER_T = 0.0          | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/chinRaiserT_front.png)CHIN_RAISER_T = 1.0                  |
| 10    | DIMPLER_L              | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)DIMPLER_L = 0.0              | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/dimplerL_front.png)DIMPLER_L = 1.0                         |
| 11    | DIMPLER_R              | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)DIMPLER_R = 0.0              | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/dimplerR_front.png)DIMPLER_R = 1.0                         |
| 12    | EYES_CLOSED_L          | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)EYES_CLOSED_L = 0.0          | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/eyesClosedL_front.png)EYES_CLOSED_L = 1.0                  |
| 13    | EYES_CLOSED_R          | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)EYES_CLOSED_R = 0.0          | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/eyesClosedR_front.png)EYES_CLOSED_R = 1.0                  |
| 14    | EYES_LOOK_DOWN_L       | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)EYES_LOOK_DOWN_L = 0.0       | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/eyesLookDownL_front.png)EYES_LOOK_DOWN_L = 1.0             |
| 15    | EYES_LOOK_DOWN_R       | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)EYES_LOOK_DOWN_R = 0.0       | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/eyesLookDownR_front.png)EYES_LOOK_DOWN_R = 1.0             |
| 16    | EYES_LOOK_LEFT_L       | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)EYES_LOOK_LEFT_L = 0.0       | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/eyesLookLeftL_front.png)EYES_LOOK_LEFT_L = 1.0             |
| 17    | EYES_LOOK_LEFT_R       | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)EYES_LOOK_LEFT_R = 0.0       | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/eyesLookLeftR_front.png)EYES_LOOK_LEFT_R = 1.0             |
| 18    | EYES_LOOK_RIGHT_L      | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)EYES_LOOK_RIGHT_L = 0.0      | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/eyesLookRightL_front.png)EYES_LOOK_RIGHT_L = 1.0           |
| 19    | EYES_LOOK_RIGHT_R      | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)EYES_LOOK_RIGHT_R = 0.0      | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/eyesLookRightR_front.png)EYES_LOOK_RIGHT_R = 1.0           |
| 20    | EYES_LOOK_UP_L         | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)EYES_LOOK_UP_L = 0.0         | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/eyesLookUpL_front.png)EYES_LOOK_UP_L = 1.0                 |
| 21    | EYES_LOOK_UP_R         | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)EYES_LOOK_UP_R = 0.0         | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/eyesLookUpR_front.png)EYES_LOOK_UP_R = 1.0                 |
| 22    | INNER_BROW_RAISER_L    | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)INNER_BROW_RAISER_L = 0.0    | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/innerBrowRaiserL_front.png)INNER_BROW_RAISER_L = 1.0       |
| 23    | INNER_BROW_RAISER_R    | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)INNER_BROW_RAISER_R = 0.0    | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/innerBrowRaiserR_front.png)INNER_BROW_RAISER_R = 1.0       |
| 24    | JAW_DROP               | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)JAW_DROP = 0.0               | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/jawDrop_front.png)JAW_DROP = 1.0                           |
| 25    | JAW_SIDEWAYS_LEFT      | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)JAW_SIDEWAYS_LEFT = 0.0      | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/jawSidewaysLeft_front.png)JAW_SIDEWAYS_LEFT = 1.0          |
| 26    | JAW_SIDEWAYS_RIGHT     | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)JAW_SIDEWAYS_RIGHT = 0.0     | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/jawSidewaysRight_front.png)JAW_SIDEWAYS_RIGHT = 1.0        |
| 27    | JAW_THRUST             | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_threeQuarters.png)JAW_THRUST = 0.0     | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/jawThrust_threeQuarters.png)JAW_THRUST = 1.0               |
| 28    | LID_TIGHTENER_L        | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LID_TIGHTENER_L = 0.0        | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lidTightenerL_front.png)LID_TIGHTENER_L = 1.0              |
| 29    | LID_TIGHTENER_R        | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LID_TIGHTENER_R = 0.0        | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lidTightenerR_front.png)LID_TIGHTENER_R = 1.0              |
| 30    | LIP_CORNER_DEPRESSOR_L | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_CORNER_DEPRESSOR_L = 0.0 | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipCornerDepressorL_front.png)LIP_CORNER_DEPRESSOR_L = 1.0 |
| 31    | LIP_CORNER_DEPRESSOR_R | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_CORNER_DEPRESSOR_R = 0.0 | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipCornerDepressorR_front.png)LIP_CORNER_DEPRESSOR_R = 1.0 |
| 32    | LIP_CORNER_PULLER_L    | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_CORNER_PULLER_L = 0.0    | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipCornerPullerL_front.png)LIP_CORNER_PULLER_L = 1.0       |
| 33    | LIP_CORNER_PULLER_R    | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_CORNER_PULLER_R = 0.0    | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipCornerPullerR_front.png)LIP_CORNER_PULLER_R = 1.0       |
| 34    | LIP_FUNNELER_LB        | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_FUNNELER_LB = 0.0        | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipFunnelerLB_front.png)LIP_FUNNELER_LB = 1.0              |
| 35    | LIP_FUNNELER_LT        | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_FUNNELER_LT = 0.0        | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipFunnelerLT_front.png)LIP_FUNNELER_LT = 1.0              |
| 36    | LIP_FUNNELER_RB        | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_FUNNELER_RB = 0.0        | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipFunnelerRB_front.png)LIP_FUNNELER_RB = 1.0              |
| 37    | LIP_FUNNELER_RT        | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_FUNNELER_RT = 0.0        | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipFunnelerRT_front.png)LIP_FUNNELER_RT = 1.0              |
| 38    | LIP_PRESSOR_L          | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_PRESSOR_L = 0.0          | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipPressorL_front.png)LIP_PRESSOR_L = 1.0                  |
| 39    | LIP_PRESSOR_R          | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_PRESSOR_R = 0.0          | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipPressorR_front.png)LIP_PRESSOR_R = 1.0                  |
| 40    | LIP_PUCKER_L           | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_PUCKER_L = 0.0           | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipPuckerL_front.png)LIP_PUCKER_L = 1.0                    |
| 41    | LIP_PUCKER_R           | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_PUCKER_R = 0.0           | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipPuckerR_front.png)LIP_PUCKER_R = 1.0                    |
| 42    | LIP_STRETCHER_L        | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_STRETCHER_L = 0.0        | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipStretcherL_front.png)LIP_STRETCHER_L = 1.0              |
| 43    | LIP_STRETCHER_R        | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_STRETCHER_R = 0.0        | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipStretcherR_front.png)LIP_STRETCHER_R = 1.0              |
| 44    | LIP_SUCK_LB            | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_SUCK_LB = 0.0            | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipSuckLB_front.png)LIP_SUCK_LB = 1.0                      |
| 45    | LIP_SUCK_LT            | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_SUCK_LT = 0.0            | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipSuckLT_front.png)LIP_SUCK_LT = 1.0                      |
| 46    | LIP_SUCK_RB            | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_SUCK_RB = 0.0            | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipSuckRB_front.png)LIP_SUCK_RB = 1.0                      |
| 47    | LIP_SUCK_RT            | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_SUCK_RT = 0.0            | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipSuckRT_front.png)LIP_SUCK_RT = 1.0                      |
| 48    | LIP_TIGHTENER_L        | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_TIGHTENER_L = 0.0        | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipTightenerL_front.png)LIP_TIGHTENER_L = 1.0              |
| 49    | LIP_TIGHTENER_R        | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIP_TIGHTENER_R = 0.0        | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipTightenerR_front.png)LIP_TIGHTENER_R = 1.0              |
| 50    | LIPS_TOWARD            | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LIPS_TOWARD = 0.0            | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lipsToward_front.png)JAW_DROP = 1.0 and LIPS_TOWARD = 1.0  |
| 51    | LOWER_LIP_DEPRESSOR_L  | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LOWER_LIP_DEPRESSOR_L = 0.0  | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lowerLipDepressorL_front.png)LOWER_LIP_DEPRESSOR_L = 1.0   |
| 52    | LOWER_LIP_DEPRESSOR_R  | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)LOWER_LIP_DEPRESSOR_R = 0.0  | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/lowerLipDepressorR_front.png)LOWER_LIP_DEPRESSOR_R = 1.0   |
| 53    | MOUTH_LEFT             | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)MOUTH_LEFT = 0.0             | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/mouthLeft_front.png)MOUTH_LEFT = 1.0                       |
| 54    | MOUTH_RIGHT            | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)MOUTH_RIGHT = 0.0            | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/mouthRight_front.png)MOUTH_RIGHT = 1.0                     |
| 55    | NOSE_WRINKLER_L        | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)NOSE_WRINKLER_L = 0.0        | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/noseWrinklerL_front.png)NOSE_WRINKLER_L = 1.0              |
| 56    | NOSE_WRINKLER_R        | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)NOSE_WRINKLER_R = 0.0        | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/noseWrinklerR_front.png)NOSE_WRINKLER_R = 1.0              |
| 57    | OUTER_BROW_RAISER_L    | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)OUTER_BROW_RAISER_L = 0.0    | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/outerBrowRaiserL_front.png)OUTER_BROW_RAISER_L = 1.0       |
| 58    | OUTER_BROW_RAISER_R    | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)OUTER_BROW_RAISER_R = 0.0    | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/outerBrowRaiserR_front.png)OUTER_BROW_RAISER_R = 1.0       |
| 59    | UPPER_LID_RAISER_L     | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)UPPER_LID_RAISER_L = 0.0     | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/upperLidRaiserL_front.png)UPPER_LID_RAISER_L = 1.0         |
| 60    | UPPER_LID_RAISER_R     | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)UPPER_LID_RAISER_R = 0.0     | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/upperLidRaiserR_front.png)UPPER_LID_RAISER_R = 1.0         |
| 61    | UPPER_LIP_RAISER_L     | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)UPPER_LIP_RAISER_L = 0.0     | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/upperLipRaiserL_front.png)UPPER_LIP_RAISER_L = 1.0         |
| 62    | UPPER_LIP_RAISER_R     | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)UPPER_LIP_RAISER_R = 0.0     | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/upperLipRaiserR_front.png)UPPER_LIP_RAISER_R = 1.0         |
| 63    | TONGUE_OUT             | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)TONGUE_OUT = 0.0             | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/tongueOut.png)TONGUE_OUT = 1.0                             |
| 64    | TONGUE_LEFT            | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)TONGUE_LEFT = 0.0            | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/tongueLeft.png)TONGUE_LEFT = 1.0                           |
| 65    | TONGUE_RIGHT           | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)TONGUE_RIGHT = 0.0           | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/tongueRight.png)TONGUE_RIGHT = 1.0                         |
| 66    | TONGUE_UP              | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)TONGUE_UP = 0.0              | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/tongueUp.png)TONGUE_UP = 1.0                               |
| 67    | TONGUE_DOWN            | ![Neutral face reference image](https://developer.android.com/static/images/develop/xr/openxr/neutral_front.png)TONGUE_DOWN = 0.0            | ![face tracking reference image](https://developer.android.com/static/images/develop/xr/openxr/tongueDown.png)TONGUE_DOWN = 1.0                           |

## Example code for face tracking

The following example code demonstrates how to get all weights for facial expression blend shapes.  

    XrInstance instance; // previously initialized
    XrSystemId systemId; // previously initialized
    XrSession session; // previously initialized, e.g. created at app startup.

    // The function pointers are previously initialized using xrGetInstanceProcAddr.
    PFN_xrCreateFaceTrackerANDROID xrCreateFaceTrackerANDROID; // previously initialized
    PFN_xrDestroyFaceTrackerANDROID xrDestroyFaceTrackerANDROID; // previously initialized
    PFN_xrGetFaceStateANDROID xrGetFaceStateANDROID; // previously initialized
    PFN_xrGetFaceCalibrationStateANDROID xrGetFaceCalibrationStateANDROID; // previously initialized

    // Inspect system capability
    XrSystemProperties properties{XR_TYPE_SYSTEM_PROPERTIES};
    XrSystemFaceTrackingPropertiesANDROID faceTrackingProperties{XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID};
    properties.next = &faceTrackingProperties;
    CHK_XR(xrGetSystemProperties(instance, systemId, &properties));
    if (!faceTrackingProperties.supportsFaceTracking) {
      // face tracking is not supported.
      return;
    }

    XrFaceTrackerANDROID faceTracker;
    XrFaceTrackerCreateInfoANDROID
            createInfo{.type = XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID,
                        .next = nullptr};
    CHK_XR(xrCreateFaceTrackerANDROID(session, &createInfo, &faceTracker));

    // If the system supports face calibration:
    XrBool32 isCalibrated;
    CHK_XR(xrGetFaceCalibrationStateANDROID(faceTracker, &isCalibrated));
    if (!isCalibrated) {
        // Redirect the user to system calibration setting.
    }

    XrFaceStateANDROID faceState;
    float faceExpressionParameters[XR_FACE_PARAMETER_COUNT_ANDROID];
    faceState.type = XR_TYPE_FACE_STATE_ANDROID;
    faceState.next = nullptr;
    faceState.parametersCapacityInput = XR_FACE_PARAMETER_COUNT_ANDROID;
    faceState.parameters = faceExpressionParameters;
    float regionConfidences[XR_FACE_REGION_CONFIDENCE_COUNT_ANDROID];
    faceState.regionConfidencesCapacityInput = XR_FACE_REGION_CONFIDENCE_COUNT_ANDROID;
    faceState.regionConfidences = regionConfidences;

    while (1) {
        // ...
        // For every frame in the frame loop
        // ...
        XrFrameState frameState; // previously returned from xrWaitFrame

        XrFaceStateGetInfoANDROID faceGetInfo{
                .type = XR_TYPE_FACE_STATE_GET_INFO_ANDROID,
                .next = nullptr,
                .time = frameState.predictedDisplayTime,
        };

        CHK_XR(xrGetFaceStateANDROID(faceTracker, &faceGetInfo, &faceState));
        if (faceState.isValid) {
            for (uint32_t i = 0; i < XR_FACE_PARAMETER_COUNT_ANDROID; ++i) {
                // parameters[i] contains a weight of specific blend shape
            }
            for (uint32_t i = 0; i < XR_FACE_REGION_CONFIDENCE_COUNT_ANDROID; ++i) {
                // regionConfidences[i] contains a confidence value of a specific region
            }
        }
    }

    // after usage
    CHK_XR(xrDestroyFaceTrackerANDROID(faceTracker));

**New Object Types**

- [XrFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackerANDROID)

**New Enum Constants**

- `XR_FACE_PARAMETER_COUNT_ANDROID`

[XrObjectType](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrObjectType)enumeration is extended with:

- `XR_OBJECT_TYPE_FACE_TRACKER_ANDROID`

[XrStructureType](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrStructureType)enumeration is extended with:

- `XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID`
- `XR_TYPE_FACE_STATE_GET_INFO_ANDROID`
- `XR_TYPE_FACE_STATE_ANDROID`
- `XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID`

**New Enums**

- [XrFaceParameterIndicesANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceParameterIndicesANDROID)
- [XrFaceTrackingStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackingStateANDROID)

**New Structures**

- [XrFaceTrackerCreateInfoANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceTrackerCreateInfoANDROID)
- [XrFaceStateGetInfoANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceStateGetInfoANDROID)
- [XrFaceStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrFaceStateANDROID)
- [XrSystemFaceTrackingPropertiesANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#XrSystemFaceTrackingPropertiesANDROID)

**New Functions**

- [xrCreateFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrCreateFaceTrackerANDROID)
- [xrDestroyFaceTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrDestroyFaceTrackerANDROID)
- [xrGetFaceStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrGetFaceStateANDROID)
- [xrGetFaceCalibrationStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_face_tracking#xrGetFaceCalibrationStateANDROID)

**Issues**

**Version History**

- Revision 1, 2024-09-05 (Levana Chen)
  - Initial extension description
- Revision 2, 2025-04-01 (Kenny Vercaemer)
  - Added face confidence regions
- Revision 3, 2025-06-04 (Levana Chen)
  - Added new error code.

*** ** * ** ***

OpenXR™ and the OpenXR logo are trademarks owned by The Khronos Group Inc. and are registered as a trademark in China, the European Union, Japan and the United Kingdom.