@@ -784,7 +784,8 @@ static void update_encoder(struct source_record_filter_context *filter, obs_data
784784static 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