diff --git a/UI/win-update/win-update.cpp b/UI/win-update/win-update.cpp index 846364b18c36c427bb54b056cd02fffe9d551b04..34d2157b049e6adf7d05e91a6c3890ccf7d9cde1 100644 --- a/UI/win-update/win-update.cpp +++ b/UI/win-update/win-update.cpp @@ -586,7 +586,7 @@ try { auto ActiveOrGameCaptureLocked = [this] () { - if (video_output_active(obs_get_video())) { + if (obs_video_active()) { if (manualUpdate) info(QTStr("Updater.Running.Title"), QTStr("Updater.Running.Text")); diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 5fe7b9189b3f9fc891081f114c3009f76a9860cc..27c9ab73763cc9dbf1dc320ffc691d55041c6bb6 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -1373,7 +1373,7 @@ void OBSBasicSettings::LoadVideoSettings() { loading = true; - if (video_output_active(obs_get_video())) { + if (obs_video_active()) { ui->videoPage->setEnabled(false); ui->videoMsg->setText( QTStr("Basic.Settings.Video.CurrentlyActive")); @@ -1850,7 +1850,7 @@ void OBSBasicSettings::LoadOutputSettings() LoadAdvOutputFFmpegSettings(); LoadAdvOutputAudioSettings(); - if (video_output_active(obs_get_video())) { + if (obs_video_active()) { ui->outputMode->setEnabled(false); ui->outputModeLabel->setEnabled(false); ui->simpleRecordingGroupBox->setEnabled(false); @@ -2228,7 +2228,7 @@ void OBSBasicSettings::LoadAdvancedSettings() if (!SetComboByValue(ui->bindToIP, bindIP)) SetInvalidValue(ui->bindToIP, bindIP, bindIP); - if (video_output_active(obs_get_video())) { + if (obs_video_active()) { ui->advancedVideoContainer->setEnabled(false); } diff --git a/libobs/obs.c b/libobs/obs.c index 1e71a7da94c2900372231386202982affbc6eae7..10016e7f1dd0bb1b998a54551775e7ee4d34ed85 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -1014,7 +1014,7 @@ int obs_reset_video(struct obs_video_info *ovi) if (!obs) return OBS_VIDEO_FAIL; /* don't allow changing of video settings if active. */ - if (obs->video.video && video_output_active(obs->video.video)) + if (obs->video.video && obs_video_active()) return OBS_VIDEO_CURRENTLY_ACTIVE; if (!size_valid(ovi->output_width, ovi->output_height) || @@ -2258,3 +2258,12 @@ obs_data_t *obs_get_private_data(void) obs_data_addref(private_data); return private_data; } + +bool obs_video_active(void) +{ + struct obs_core_video *video = &obs->video; + if (!obs) + return false; + + return os_atomic_load_long(&video->raw_active) > 0; +} diff --git a/libobs/obs.h b/libobs/obs.h index 58e6e5cfe8ca38c8ac6bb4f38571f384a0d3b8b9..0bfe28e68b9d5f882da5842559d1c2a8028efc4b 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -535,6 +535,9 @@ EXPORT audio_t *obs_get_audio(void); /** Gets the main video output handler for this OBS context */ EXPORT video_t *obs_get_video(void); +/** Returns true if video is active, false otherwise */ +EXPORT bool obs_video_active(void); + /** Sets the primary output source for a channel. */ EXPORT void obs_set_output_source(uint32_t channel, obs_source_t *source);