@@ -43,6 +43,7 @@ struct source_record_filter_context {
4343 int audio_track ;
4444 obs_weak_source_t * audio_source ;
4545 bool closing ;
46+ bool exiting ;
4647 long long replay_buffer_duration ;
4748 struct vec4 backgroundColor ;
4849 bool remove_after_record ;
@@ -294,7 +295,10 @@ void release_output_stopped(void *data, calldata_t *cd)
294295 struct stop_output * so = data ;
295296 run_queued ((obs_task_t )obs_output_release , so -> output );
296297 if (so -> context -> encoder || so -> context -> audioEncoder [0 ])
297- run_queued (release_encoders , so -> context );
298+ if (so -> context -> exiting )
299+ release_encoders (so -> context );
300+ else
301+ run_queued (release_encoders , so -> context );
298302 bfree (data );
299303}
300304
@@ -1019,8 +1023,11 @@ static void frontend_event(enum obs_frontend_event event, void *data)
10191023 context -> last_frontend_event = (int )event ;
10201024
10211025 obs_queue_task (OBS_TASK_GRAPHICS , update_task , data , false);
1022- } else if (event == OBS_FRONTEND_EVENT_EXIT || event == OBS_FRONTEND_EVENT_SCENE_COLLECTION_CLEANUP ||
1023- event == OBS_FRONTEND_EVENT_SCRIPTING_SHUTDOWN ) {
1026+ } else if (event == OBS_FRONTEND_EVENT_EXIT || event == OBS_FRONTEND_EVENT_SCRIPTING_SHUTDOWN ) {
1027+ context -> closing = true;
1028+ context -> exiting = true;
1029+ obs_source_update (context -> source , NULL );
1030+ } else if (event == OBS_FRONTEND_EVENT_SCENE_COLLECTION_CLEANUP ) {
10241031 context -> closing = true;
10251032 obs_source_update (context -> source , NULL );
10261033 }
0 commit comments