Skip to content

Commit 64ec585

Browse files
committed
Set source on view later
1 parent 92d4325 commit 64ec585

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

source-record.c

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -784,7 +784,8 @@ static void update_encoder(struct source_record_filter_context *filter, obs_data
784784
static void source_record_filter_update(void *data, obs_data_t *settings)
785785
{
786786
struct source_record_filter_context *filter = data;
787-
if (obs_obj_is_private(obs_filter_get_parent(filter->source))) {
787+
obs_source_t *parent = obs_filter_get_parent(filter->source);
788+
if (obs_obj_is_private(parent)) {
788789
filter->closing = true;
789790
return;
790791
}
@@ -830,6 +831,13 @@ static void source_record_filter_update(void *data, obs_data_t *settings)
830831
record = obs_frontend_virtualcam_active() && filter->last_frontend_event != OBS_FRONTEND_EVENT_VIRTUALCAM_STOPPED;
831832
}
832833

834+
if (parent && filter->view && (record || replay_buffer)) {
835+
obs_source_t *view_source = obs_view_get_source(filter->view, 0);
836+
if (view_source != parent)
837+
obs_view_set_source(filter->view, 0, parent);
838+
obs_source_release(view_source);
839+
}
840+
833841
if (record != filter->record) {
834842
if (record) {
835843
if (obs_source_enabled(filter->source) && filter->video_output)
@@ -905,6 +913,13 @@ static void source_record_filter_update(void *data, obs_data_t *settings)
905913
stream = obs_frontend_virtualcam_active() && filter->last_frontend_event != OBS_FRONTEND_EVENT_VIRTUALCAM_STOPPED;
906914
}
907915

916+
if (parent && filter->view && stream) {
917+
obs_source_t *view_source = obs_view_get_source(filter->view, 0);
918+
if (view_source != parent)
919+
obs_view_set_source(filter->view, 0, parent);
920+
obs_source_release(view_source);
921+
}
922+
908923
if (stream != filter->stream) {
909924
if (stream) {
910925
if (obs_source_enabled(filter->source) && filter->video_output)
@@ -1307,8 +1322,6 @@ static void source_record_filter_tick(void *data, float seconds)
13071322
if (restart)
13081323
obs_view_remove(context->view);
13091324

1310-
obs_view_set_source(context->view, 0, parent);
1311-
13121325
context->video_output = obs_view_add2(context->view, &ovi);
13131326
if (context->video_output) {
13141327
context->width = width;
@@ -1350,6 +1363,12 @@ static void source_record_filter_tick(void *data, float seconds)
13501363
return;
13511364
obs_data_t *s = obs_source_get_settings(context->source);
13521365
update_encoder(context, s);
1366+
if (context->record || context->stream || context->replayBuffer) {
1367+
obs_source_t *view_source = obs_view_get_source(context->view, 0);
1368+
if (view_source != parent)
1369+
obs_view_set_source(context->view, 0, parent);
1370+
obs_source_release(view_source);
1371+
}
13531372
if (context->record)
13541373
start_file_output(context, s);
13551374
if (context->stream)

0 commit comments

Comments
 (0)