diff --git a/CMakeLists.txt b/CMakeLists.txt index 769b12259..b01019e09 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -368,6 +368,7 @@ mark_as_advanced(XRT_MODULE_COMPOSITOR_MAIN XRT_MODULE_COMPOSITOR_NULL XRT_FEATU option(XRT_FEATURE_OPENXR_ACTIVE_ACTION_SET_PRIORITY "Enable XR_EXT_active_action_set_priority" ON) option(XRT_FEATURE_OPENXR_BODY_TRACKING_FB "Enable XR_FB_body_tracking" OFF) option(XRT_FEATURE_OPENXR_DISPLAY_REFRESH_RATE "Enable XR_FB_display_refresh_rate" ON) +option(XRT_FEATURE_OPENXR_FACE_TRACKING_ANDROID "Enable XR_ANDROID_face_tracking" OFF) option(XRT_FEATURE_OPENXR_FACE_TRACKING2_FB "Enable XR_FB_face_tracking2" OFF) option(XRT_FEATURE_OPENXR_FACIAL_TRACKING_HTC "Enable XR_HTC_facial_tracking" OFF) option(XRT_FEATURE_OPENXR_FORCE_FEEDBACK_CURL "Enable XR_MNDX_force_feedback_curl" ON) diff --git a/scripts/generate_oxr_ext_support.py b/scripts/generate_oxr_ext_support.py index 0ee671db5..666c21d90 100755 --- a/scripts/generate_oxr_ext_support.py +++ b/scripts/generate_oxr_ext_support.py @@ -76,6 +76,7 @@ EXTENSIONS = ( ['XR_EXT_samsung_odyssey_controller', 'XRT_FEATURE_OPENXR_INTERACTION_WINMR'], ['XR_EXT_user_presence', 'XRT_FEATURE_OPENXR_USER_PRESENCE'], # Vendor extensions, sorted alphabetically. + ['XR_ANDROID_face_tracking', 'XRT_FEATURE_OPENXR_FACE_TRACKING_ANDROID'], ['XR_BD_controller_interaction', 'XRT_FEATURE_OPENXR_INTERACTION_BYTEDANCE'], ['XR_FB_body_tracking', 'XRT_FEATURE_OPENXR_BODY_TRACKING_FB'], ['XR_FB_composition_layer_alpha_blend', 'XRT_FEATURE_OPENXR_LAYER_FB_ALPHA_BLEND'], diff --git a/scripts/mapping.imp b/scripts/mapping.imp index 98a038c89..767ec5602 100644 --- a/scripts/mapping.imp +++ b/scripts/mapping.imp @@ -40,6 +40,7 @@ { symbol: ["XRT_FEATURE_OPENXR_BODY_TRACKING_FULL_BODY_META", "public", "\"xrt/xrt_config_build.h\"", "public"] }, { symbol: ["XRT_FEATURE_OPENXR_DEBUG_UTILS", "public", "\"xrt/xrt_config_build.h\"", "public"] }, { symbol: ["XRT_FEATURE_OPENXR_DISPLAY_REFRESH_RATE", "public", "\"xrt/xrt_config_build.h\"", "public"] }, +{ symbol: ["XRT_FEATURE_OPENXR_FACE_TRACKING_ANDROID", "public", "\"xrt/xrt_config_build.h\"", "public"] }, { symbol: ["XRT_FEATURE_OPENXR_FACE_TRACKING2_FB", "public", "\"xrt/xrt_config_build.h\"", "public"] }, { symbol: ["XRT_FEATURE_OPENXR_FACIAL_TRACKING_HTC", "public", "\"xrt/xrt_config_build.h\"", "public"] }, { symbol: ["XRT_FEATURE_OPENXR_FORCE_FEEDBACK_CURL", "public", "\"xrt/xrt_config_build.h\"", "public"] }, diff --git a/src/xrt/compositor/multi/comp_multi_system.c b/src/xrt/compositor/multi/comp_multi_system.c index 199025a13..c11858113 100644 --- a/src/xrt/compositor/multi/comp_multi_system.c +++ b/src/xrt/compositor/multi/comp_multi_system.c @@ -423,6 +423,7 @@ update_session_state_locked(struct multi_system_compositor *msc) .fb_face_tracking2_enabled = false, .meta_body_tracking_full_body_enabled = false, .meta_body_tracking_calibration_enabled = false, + .android_face_tracking_enabled = false, }; switch (msc->sessions.state) { diff --git a/src/xrt/include/xrt/xrt_compositor.h b/src/xrt/include/xrt/xrt_compositor.h index 6a7daf17f..eba8cf20f 100644 --- a/src/xrt/include/xrt/xrt_compositor.h +++ b/src/xrt/include/xrt/xrt_compositor.h @@ -966,6 +966,7 @@ struct xrt_begin_session_info bool fb_face_tracking2_enabled; bool meta_body_tracking_full_body_enabled; bool meta_body_tracking_calibration_enabled; + bool android_face_tracking_enabled; }; /*! diff --git a/src/xrt/include/xrt/xrt_config_build.h.cmake_in b/src/xrt/include/xrt/xrt_config_build.h.cmake_in index c640d2c8f..40a4ea6ff 100644 --- a/src/xrt/include/xrt/xrt_config_build.h.cmake_in +++ b/src/xrt/include/xrt/xrt_config_build.h.cmake_in @@ -37,6 +37,7 @@ #cmakedefine XRT_FEATURE_OPENXR_BODY_TRACKING_FULL_BODY_META #cmakedefine XRT_FEATURE_OPENXR_DEBUG_UTILS #cmakedefine XRT_FEATURE_OPENXR_DISPLAY_REFRESH_RATE +#cmakedefine XRT_FEATURE_OPENXR_FACE_TRACKING_ANDROID #cmakedefine XRT_FEATURE_OPENXR_FACE_TRACKING2_FB #cmakedefine XRT_FEATURE_OPENXR_FACIAL_TRACKING_HTC #cmakedefine XRT_FEATURE_OPENXR_FORCE_FEEDBACK_CURL diff --git a/src/xrt/include/xrt/xrt_instance.h b/src/xrt/include/xrt/xrt_instance.h index 8a2d1dcaa..9034bfd1e 100644 --- a/src/xrt/include/xrt/xrt_instance.h +++ b/src/xrt/include/xrt/xrt_instance.h @@ -82,6 +82,7 @@ struct xrt_application_info bool fb_face_tracking2_enabled; bool meta_body_tracking_full_body_enabled; bool meta_body_tracking_calibration_enabled; + bool android_face_tracking_enabled; }; /*! diff --git a/src/xrt/ipc/server/ipc_server_handler.c b/src/xrt/ipc/server/ipc_server_handler.c index 52f4eaa31..4e83fa123 100644 --- a/src/xrt/ipc/server/ipc_server_handler.c +++ b/src/xrt/ipc/server/ipc_server_handler.c @@ -388,6 +388,7 @@ ipc_handle_instance_describe_client(volatile struct ipc_client_state *ics, EXT(meta_body_tracking_full_body_enabled); EXT(meta_body_tracking_calibration_enabled); EXT(fb_face_tracking2_enabled); + EXT(android_face_tracking_enabled); #undef EXT #undef PTT @@ -505,6 +506,7 @@ ipc_handle_session_begin(volatile struct ipc_client_state *ics) .fb_face_tracking2_enabled = ics->client_state.info.fb_face_tracking2_enabled, .meta_body_tracking_full_body_enabled = ics->client_state.info.meta_body_tracking_full_body_enabled, .meta_body_tracking_calibration_enabled = ics->client_state.info.meta_body_tracking_calibration_enabled, + .android_face_tracking_enabled = ics->client_state.info.android_face_tracking_enabled, }; return xrt_comp_begin_session(ics->xc, &begin_session_info); diff --git a/src/xrt/state_trackers/oxr/oxr_extension_support.h b/src/xrt/state_trackers/oxr/oxr_extension_support.h index ee92caa77..4d7799fd4 100644 --- a/src/xrt/state_trackers/oxr/oxr_extension_support.h +++ b/src/xrt/state_trackers/oxr/oxr_extension_support.h @@ -474,6 +474,17 @@ #endif +/* + * XR_ANDROID_face_tracking + */ +#if defined(XR_ANDROID_face_tracking) && defined(XRT_FEATURE_OPENXR_FACE_TRACKING_ANDROID) +#define OXR_HAVE_ANDROID_face_tracking +#define OXR_EXTENSION_SUPPORT_ANDROID_face_tracking(_) _(ANDROID_face_tracking, ANDROID_FACE_TRACKING) +#else +#define OXR_EXTENSION_SUPPORT_ANDROID_face_tracking(_) +#endif + + /* * XR_BD_controller_interaction */ @@ -936,6 +947,7 @@ OXR_EXTENSION_SUPPORT_EXT_plane_detection(_) \ OXR_EXTENSION_SUPPORT_EXT_samsung_odyssey_controller(_) \ OXR_EXTENSION_SUPPORT_EXT_user_presence(_) \ + OXR_EXTENSION_SUPPORT_ANDROID_face_tracking(_) \ OXR_EXTENSION_SUPPORT_BD_controller_interaction(_) \ OXR_EXTENSION_SUPPORT_FB_body_tracking(_) \ OXR_EXTENSION_SUPPORT_FB_composition_layer_alpha_blend(_) \ diff --git a/src/xrt/state_trackers/oxr/oxr_instance.c b/src/xrt/state_trackers/oxr/oxr_instance.c index 944fcae90..e98072ea3 100644 --- a/src/xrt/state_trackers/oxr/oxr_instance.c +++ b/src/xrt/state_trackers/oxr/oxr_instance.c @@ -340,6 +340,9 @@ oxr_instance_create(struct oxr_logger *log, #endif #ifdef OXR_HAVE_META_body_tracking_calibration .meta_body_tracking_calibration_enabled = extensions->META_body_tracking_calibration, +#endif +#ifdef OXR_HAVE_ANDROID_face_tracking + .android_face_tracking_enabled = extensions->ANDROID_face_tracking, #endif }; snprintf(i_info.app_info.application_name, sizeof(i_info.app_info.application_name), "%s", diff --git a/src/xrt/state_trackers/oxr/oxr_session.c b/src/xrt/state_trackers/oxr/oxr_session.c index ab728c88b..dda3a5af3 100644 --- a/src/xrt/state_trackers/oxr/oxr_session.c +++ b/src/xrt/state_trackers/oxr/oxr_session.c @@ -316,6 +316,9 @@ oxr_session_begin(struct oxr_logger *log, struct oxr_session *sess, const XrSess #endif #ifdef OXR_HAVE_META_body_tracking_calibration .meta_body_tracking_calibration_enabled = extensions->META_body_tracking_calibration, +#endif +#ifdef OXR_HAVE_ANDROID_face_tracking + .android_face_tracking_enabled = extensions->ANDROID_face_tracking, #endif };