@@ -2,13 +2,13 @@ use crate::{
2
2
bitrate:: BitrateManager ,
3
3
buttons:: BUTTON_PATH_FROM_ID ,
4
4
face_tracking:: FaceTrackingSink ,
5
- haptics,
5
+ haptics, openvr_props , phase_sync ,
6
6
sockets:: WelcomeSocket ,
7
7
statistics:: StatisticsManager ,
8
8
tracking:: { self , TrackingManager } ,
9
9
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 ,
12
12
} ;
13
13
use alvr_audio:: AudioDevice ;
14
14
use alvr_common:: {
@@ -24,7 +24,10 @@ use alvr_packets::{
24
24
ButtonValue , ClientConnectionResult , ClientControlPacket , ClientListAction , ClientStatistics ,
25
25
ServerControlPacket , StreamConfigPacket , Tracking , AUDIO , HAPTICS , STATISTICS , TRACKING , VIDEO ,
26
26
} ;
27
- use alvr_session:: { CodecType , ControllersEmulationMode , FrameSize , OpenvrConfig } ;
27
+ use alvr_session:: {
28
+ CodecType , ControllersEmulationMode , FrameSize , OpenvrConfig , OpenvrPropValue ,
29
+ OpenvrPropertyKey ,
30
+ } ;
28
31
use alvr_sockets:: {
29
32
spawn_cancelable, ControlSocketReceiver , ControlSocketSender , PeerType , ProtoControlSocket ,
30
33
StreamSocketBuilder , KEEPALIVE_INTERVAL ,
@@ -636,8 +639,8 @@ async fn connection_pipeline(
636
639
crate :: SetOpenvrProperty (
637
640
* alvr_common:: HEAD_ID ,
638
641
crate :: openvr_props:: to_ffi_openvr_prop (
639
- alvr_session :: OpenvrPropertyKey :: AudioDefaultPlaybackDeviceId ,
640
- alvr_session :: OpenvrPropValue :: String ( id) ,
642
+ OpenvrPropertyKey :: AudioDefaultPlaybackDeviceId ,
643
+ OpenvrPropValue :: String ( id) ,
641
644
) ,
642
645
)
643
646
}
@@ -660,8 +663,8 @@ async fn connection_pipeline(
660
663
crate :: SetOpenvrProperty (
661
664
* alvr_common:: HEAD_ID ,
662
665
crate :: openvr_props:: to_ffi_openvr_prop (
663
- alvr_session :: OpenvrPropertyKey :: AudioDefaultPlaybackDeviceId ,
664
- alvr_session :: OpenvrPropValue :: String ( id) ,
666
+ OpenvrPropertyKey :: AudioDefaultPlaybackDeviceId ,
667
+ OpenvrPropValue :: String ( id) ,
665
668
) ,
666
669
)
667
670
}
@@ -685,8 +688,8 @@ async fn connection_pipeline(
685
688
crate :: SetOpenvrProperty (
686
689
* alvr_common:: HEAD_ID ,
687
690
crate :: openvr_props:: to_ffi_openvr_prop (
688
- alvr_session :: OpenvrPropertyKey :: AudioDefaultRecordingDeviceId ,
689
- alvr_session :: OpenvrPropValue :: String ( id) ,
691
+ OpenvrPropertyKey :: AudioDefaultRecordingDeviceId ,
692
+ OpenvrPropValue :: String ( id) ,
690
693
) ,
691
694
)
692
695
}
@@ -916,6 +919,7 @@ async fn connection_pipeline(
916
919
if let Some ( stats) = & mut * STATISTICS_MANAGER . lock ( ) {
917
920
let timestamp = client_stats. target_timestamp ;
918
921
let decoder_latency = client_stats. video_decode ;
922
+ let predicted_frame_interval = client_stats. predicted_frame_interval ;
919
923
let network_latency = stats. report_statistics ( client_stats) ;
920
924
921
925
BITRATE_MANAGER . lock ( ) . report_frame_latencies (
@@ -924,6 +928,17 @@ async fn connection_pipeline(
924
928
network_latency,
925
929
decoder_latency,
926
930
) ;
931
+
932
+ let mut phase_sync_lock = PHASE_SYNC_MANAGER . lock ( ) ;
933
+ phase_sync_lock. report_predicted_frame_interval ( predicted_frame_interval) ;
934
+
935
+ openvr_props:: set_prop (
936
+ * HEAD_ID ,
937
+ OpenvrPropertyKey :: DisplayFrequency ,
938
+ OpenvrPropValue :: Float (
939
+ 1.0 / phase_sync_lock. frame_interval_average ( ) . as_secs_f32 ( ) ,
940
+ ) ,
941
+ ) ;
927
942
}
928
943
}
929
944
}
0 commit comments