[vlc-devel] [PATCH 09/18] input: use vlc_viewpoint_to/from_euler

Alexandre Janniaux ajanni at videolabs.io
Wed Mar 31 09:25:41 UTC 2021


From: Alexandre Janniaux <alexandre.janniaux at gmail.com>

---
 src/input/input.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/src/input/input.c b/src/input/input.c
index ea64473a0b..69552bc3e5 100644
--- a/src/input/input.c
+++ b/src/input/input.c
@@ -1709,30 +1709,34 @@ static void ControlNav( input_thread_t *p_input, int i_type )
         return; /* The demux handled the navigation control */
 
     /* Handle Up/Down/Left/Right if the demux can't navigate */
-    vlc_viewpoint_t vp = {0};
+    bool viewpoint_updated = 1;
+    float yaw = 0.f, pitch = 0.f, roll = 0.f;
+    vlc_viewpoint_to_euler(&priv->viewpoint, &yaw, &pitch, &roll);
+
     int vol_direction = 0;
     int seek_direction = 0;
     switch( i_type )
     {
         case INPUT_CONTROL_NAV_UP:
             vol_direction = 1;
-            vp.pitch = -1.f;
+            pitch -= 1.f;
             break;
         case INPUT_CONTROL_NAV_DOWN:
             vol_direction = -1;
-            vp.pitch = 1.f;
+            pitch += 1.f;
             break;
         case INPUT_CONTROL_NAV_LEFT:
             seek_direction = -1;
-            vp.yaw = -1.f;
+            yaw -= 1.f;
             break;
         case INPUT_CONTROL_NAV_RIGHT:
             seek_direction = 1;
-            vp.yaw = 1.f;
+            yaw += 1.f;
             break;
         case INPUT_CONTROL_NAV_ACTIVATE:
         case INPUT_CONTROL_NAV_POPUP:
         case INPUT_CONTROL_NAV_MENU:
+            viewpoint_updated = false;
             return;
         default:
             vlc_assert_unreachable();
@@ -1752,13 +1756,10 @@ static void ControlNav( input_thread_t *p_input, int i_type )
     }
     free( pp_vout );
 
-    if( b_viewpoint_ch )
+    if( b_viewpoint_ch && viewpoint_updated )
     {
         priv->viewpoint_changed = true;
-        priv->viewpoint.yaw   += vp.yaw;
-        priv->viewpoint.pitch += vp.pitch;
-        priv->viewpoint.roll  += vp.roll;
-        priv->viewpoint.fov   += vp.fov;
+        vlc_viewpoint_from_euler( &priv->viewpoint, yaw, pitch, roll );
         ViewpointApply( p_input );
         return;
     }
-- 
2.31.0



More information about the vlc-devel mailing list