@@ -2,13 +2,13 @@ use crate::{
22 bitrate:: BitrateManager ,
33 buttons:: BUTTON_PATH_FROM_ID ,
44 face_tracking:: FaceTrackingSink ,
5- haptics,
5+ haptics, openvr_props , phase_sync ,
66 sockets:: WelcomeSocket ,
77 statistics:: StatisticsManager ,
88 tracking:: { self , TrackingManager } ,
99 FfiButtonValue , FfiFov , FfiViewsConfig , VideoPacket , BITRATE_MANAGER , CONTROL_CHANNEL_SENDER ,
10- DECODER_CONFIG , DISCONNECT_CLIENT_NOTIFIER , HAPTICS_SENDER , RESTART_NOTIFIER ,
11- SERVER_DATA_MANAGER , STATISTICS_MANAGER , VIDEO_RECORDING_FILE , VIDEO_SENDER ,
10+ DECODER_CONFIG , DISCONNECT_CLIENT_NOTIFIER , HAPTICS_SENDER , PHASE_SYNC_MANAGER ,
11+ RESTART_NOTIFIER , SERVER_DATA_MANAGER , STATISTICS_MANAGER , VIDEO_RECORDING_FILE , VIDEO_SENDER ,
1212} ;
1313use alvr_audio:: AudioDevice ;
1414use alvr_common:: {
@@ -24,7 +24,10 @@ use alvr_packets::{
2424 ButtonValue , ClientConnectionResult , ClientControlPacket , ClientListAction , ClientStatistics ,
2525 ServerControlPacket , StreamConfigPacket , Tracking , AUDIO , HAPTICS , STATISTICS , TRACKING , VIDEO ,
2626} ;
27- use alvr_session:: { CodecType , ControllersEmulationMode , FrameSize , OpenvrConfig } ;
27+ use alvr_session:: {
28+ CodecType , ControllersEmulationMode , FrameSize , OpenvrConfig , OpenvrPropValue ,
29+ OpenvrPropertyKey ,
30+ } ;
2831use alvr_sockets:: {
2932 spawn_cancelable, ControlSocketReceiver , ControlSocketSender , PeerType , ProtoControlSocket ,
3033 StreamSocketBuilder , KEEPALIVE_INTERVAL ,
@@ -637,8 +640,8 @@ async fn connection_pipeline(
637640 crate :: SetOpenvrProperty (
638641 * alvr_common:: HEAD_ID ,
639642 crate :: openvr_props:: to_ffi_openvr_prop (
640- alvr_session :: OpenvrPropertyKey :: AudioDefaultPlaybackDeviceId ,
641- alvr_session :: OpenvrPropValue :: String ( id) ,
643+ OpenvrPropertyKey :: AudioDefaultPlaybackDeviceId ,
644+ OpenvrPropValue :: String ( id) ,
642645 ) ,
643646 )
644647 }
@@ -661,8 +664,8 @@ async fn connection_pipeline(
661664 crate :: SetOpenvrProperty (
662665 * alvr_common:: HEAD_ID ,
663666 crate :: openvr_props:: to_ffi_openvr_prop (
664- alvr_session :: OpenvrPropertyKey :: AudioDefaultPlaybackDeviceId ,
665- alvr_session :: OpenvrPropValue :: String ( id) ,
667+ OpenvrPropertyKey :: AudioDefaultPlaybackDeviceId ,
668+ OpenvrPropValue :: String ( id) ,
666669 ) ,
667670 )
668671 }
@@ -686,8 +689,8 @@ async fn connection_pipeline(
686689 crate :: SetOpenvrProperty (
687690 * alvr_common:: HEAD_ID ,
688691 crate :: openvr_props:: to_ffi_openvr_prop (
689- alvr_session :: OpenvrPropertyKey :: AudioDefaultRecordingDeviceId ,
690- alvr_session :: OpenvrPropValue :: String ( id) ,
692+ OpenvrPropertyKey :: AudioDefaultRecordingDeviceId ,
693+ OpenvrPropValue :: String ( id) ,
691694 ) ,
692695 )
693696 }
@@ -917,6 +920,7 @@ async fn connection_pipeline(
917920 if let Some ( stats) = & mut * STATISTICS_MANAGER . lock ( ) {
918921 let timestamp = client_stats. target_timestamp ;
919922 let decoder_latency = client_stats. video_decode ;
923+ let predicted_frame_interval = client_stats. predicted_frame_interval ;
920924 let network_latency = stats. report_statistics ( client_stats) ;
921925
922926 BITRATE_MANAGER . lock ( ) . report_frame_latencies (
@@ -925,6 +929,17 @@ async fn connection_pipeline(
925929 network_latency,
926930 decoder_latency,
927931 ) ;
932+
933+ let mut phase_sync_lock = PHASE_SYNC_MANAGER . lock ( ) ;
934+ phase_sync_lock. report_predicted_frame_interval ( predicted_frame_interval) ;
935+
936+ openvr_props:: set_prop (
937+ * HEAD_ID ,
938+ OpenvrPropertyKey :: DisplayFrequency ,
939+ OpenvrPropValue :: Float (
940+ 1.0 / phase_sync_lock. frame_interval_average ( ) . as_secs_f32 ( ) ,
941+ ) ,
942+ ) ;
928943 }
929944 }
930945 }
0 commit comments