@@ -616,25 +616,37 @@ static inline void set_video_matrix(struct obs_core_video_mix *video, struct vid
616616 memcpy (video -> color_matrix , & mat , sizeof (float ) * 16 );
617617}
618618
619+ static void sync_mix_fps_with_main_canvas (struct obs_core_video_mix * video )
620+ {
621+ /* Main view graphics thread drives frame pacing for all views. Keep the
622+ * mix snapshot and the public canvas handle aligned for callers that
623+ * still read fps_num/fps_den from obs_video_info. */
624+ pthread_mutex_lock (& obs -> video .mixes_mutex );
625+
626+ if (obs -> video .mixes .num && obs -> data .main_canvas -> mix ) {
627+ const struct obs_video_info * main_ovi = & obs -> data .main_canvas -> mix -> ovi ;
628+
629+ video -> ovi .fps_num = main_ovi -> fps_num ;
630+ video -> ovi .fps_den = main_ovi -> fps_den ;
631+
632+ if (video -> canvas_ovi ) {
633+ video -> canvas_ovi -> fps_num = main_ovi -> fps_num ;
634+ video -> canvas_ovi -> fps_den = main_ovi -> fps_den ;
635+ }
636+ }
637+
638+ pthread_mutex_unlock (& obs -> video .mixes_mutex );
639+ }
640+
619641static int obs_init_video_mix (struct obs_video_info * ovi , struct obs_core_video_mix * video )
620642{
621643 struct video_output_info vi ;
622644
623645 pthread_mutex_init_value (& video -> gpu_encoder_mutex );
624646
625- make_video_info (& vi , ovi );
626647 video -> ovi = * ovi ;
627-
628- /* main view graphics thread drives all frame output,
629- * so share FPS settings for aux views */
630- pthread_mutex_lock (& obs -> video .mixes_mutex );
631- size_t num = obs -> video .mixes .num ;
632- if (num && obs -> data .main_canvas -> mix ) {
633- struct obs_video_info main_ovi = obs -> data .main_canvas -> mix -> ovi ;
634- video -> ovi .fps_num = main_ovi .fps_num ;
635- video -> ovi .fps_den = main_ovi .fps_den ;
636- }
637- pthread_mutex_unlock (& obs -> video .mixes_mutex );
648+ sync_mix_fps_with_main_canvas (video );
649+ make_video_info (& vi , & video -> ovi );
638650
639651 video -> gpu_conversion = ovi -> gpu_conversion ;
640652 video -> gpu_was_active = false;
0 commit comments