Skip to content

Commit 539762d

Browse files
Sync aux mix fps with main canvas
1 parent 81e69c1 commit 539762d

1 file changed

Lines changed: 24 additions & 12 deletions

File tree

libobs/obs.c

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
619641
static 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

Comments
 (0)