The open source OpenXR runtime
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

d/android: support all cardboard vertical alignment modes

Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2614>

+34 -7
+3
doc/changes/big/mr.2560.md
··· 1 + --- 2 + - mr.2614 3 + --- 1 4 ### Added 2 5 - New UI button to the Android About page for scanning cardboard calibration QR codes and saving them to device 3 6
+14 -3
src/xrt/auxiliary/util/u_distortion.c
··· 17 17 18 18 #include <assert.h> 19 19 20 + static inline float 21 + vertical_offset_meters(const struct u_cardboard_distortion_arguments *args) 22 + { 23 + switch (args->vertical_alignment) { 24 + case U_CARDBOARD_VERTICAL_ALIGNMENT_TOP: 25 + return args->screen.h_meters - args->tray_to_lens_distance_meters - 0.003f; 26 + case U_CARDBOARD_VERTICAL_ALIGNMENT_BOTTOM: return args->tray_to_lens_distance_meters - 0.003f; 27 + case U_CARDBOARD_VERTICAL_ALIGNMENT_CENTER: 28 + default: return args->screen.h_meters * 0.5f; 29 + } 30 + } 31 + 20 32 void 21 33 u_distortion_cardboard_calculate(const struct u_cardboard_distortion_arguments *args, 22 34 struct xrt_hmd_parts *parts, ··· 78 90 args->screen_to_lens_distance_meters; 79 91 } 80 92 81 - // Cardboard vertical alignment bottom 82 - values->screen.offset.y = 83 - (args->tray_to_lens_distance_meters - 0.003f) / args->screen_to_lens_distance_meters; 93 + // Cardboard vertical alignment 94 + values->screen.offset.y = vertical_offset_meters(args) / args->screen_to_lens_distance_meters; 84 95 85 96 // Tanangle to texture coordinates 86 97 values->texture.size.x = tanf(-args->fov.angle_left) + tanf(args->fov.angle_right);
+15
src/xrt/auxiliary/util/u_distortion.h
··· 24 24 * @ingroup aux_util 25 25 */ 26 26 27 + enum u_cardboard_vertical_alignment 28 + { 29 + //! device rests against a fixed bottom tray 30 + U_CARDBOARD_VERTICAL_ALIGNMENT_BOTTOM = 0, 31 + 32 + //! device screen assumed to be centered w.r.t. lenses 33 + U_CARDBOARD_VERTICAL_ALIGNMENT_CENTER = 1, 34 + 35 + //! device rests against a fixed top tray 36 + U_CARDBOARD_VERTICAL_ALIGNMENT_TOP = 2, 37 + }; 38 + 27 39 /*! 28 40 * These are the values that you need to supply to the distortion code to setup 29 41 * a @ref u_cardboard_distortion properly. ··· 56 68 57 69 //! Fov values that the cardboard configuration has given us. 58 70 struct xrt_fov fov; 71 + 72 + //! The vertical screen alignment 73 + enum u_cardboard_vertical_alignment vertical_alignment; 59 74 }; 60 75 61 76 /*!
+2 -4
src/xrt/drivers/android/android_sensors.c
··· 120 120 } 121 121 122 122 if (params.has_vertical_alignment) { 123 - if (params.vertical_alignment != cardboard_DeviceParams_VerticalAlignmentType_BOTTOM) { 124 - ANDROID_ERROR(d, "Only vertical alignment bottom supported"); 125 - return false; 126 - } 123 + args->vertical_alignment = (enum u_cardboard_vertical_alignment)params.vertical_alignment; 127 124 } 128 125 129 126 if (params.has_inter_lens_distance) { ··· 421 418 .angle_up = angle, 422 419 .angle_down = -angle, 423 420 }, 421 + .vertical_alignment = U_CARDBOARD_VERTICAL_ALIGNMENT_BOTTOM, 424 422 }; 425 423 struct u_cardboard_distortion_arguments args = cardboard_v1_distortion_args; 426 424 if (!load_cardboard_distortion(d, &metrics, &args)) {