@@ -27,11 +27,11 @@ EventHandler::EventHandler()
27
27
28
28
signal_handler_t *coreSignalHandler = obs_get_signal_handler ();
29
29
if (coreSignalHandler) {
30
- signal_handler_connect (coreSignalHandler, " source_create" , SourceCreatedMultiHandler, this );
31
- signal_handler_connect (coreSignalHandler, " source_destroy" , SourceDestroyedMultiHandler, this );
32
- signal_handler_connect (coreSignalHandler, " source_remove" , SourceRemovedMultiHandler, this );
33
- signal_handler_connect (coreSignalHandler, " source_rename" , SourceRenamedMultiHandler, this );
34
- signal_handler_connect (coreSignalHandler, " source_update" , SourceUpdatedMultiHandler, this );
30
+ coreSignals. emplace_back (coreSignalHandler, " source_create" , SourceCreatedMultiHandler, this );
31
+ coreSignals. emplace_back (coreSignalHandler, " source_destroy" , SourceDestroyedMultiHandler, this );
32
+ coreSignals. emplace_back (coreSignalHandler, " source_remove" , SourceRemovedMultiHandler, this );
33
+ coreSignals. emplace_back (coreSignalHandler, " source_rename" , SourceRenamedMultiHandler, this );
34
+ coreSignals. emplace_back (coreSignalHandler, " source_update" , SourceUpdatedMultiHandler, this );
35
35
} else {
36
36
blog (LOG_ERROR, " [EventHandler::EventHandler] Unable to get libobs signal handler!" );
37
37
}
@@ -45,16 +45,7 @@ EventHandler::~EventHandler()
45
45
46
46
obs_frontend_remove_event_callback (OnFrontendEvent, this );
47
47
48
- signal_handler_t *coreSignalHandler = obs_get_signal_handler ();
49
- if (coreSignalHandler) {
50
- signal_handler_disconnect (coreSignalHandler, " source_create" , SourceCreatedMultiHandler, this );
51
- signal_handler_disconnect (coreSignalHandler, " source_destroy" , SourceDestroyedMultiHandler, this );
52
- signal_handler_disconnect (coreSignalHandler, " source_remove" , SourceRemovedMultiHandler, this );
53
- signal_handler_disconnect (coreSignalHandler, " source_rename" , SourceRenamedMultiHandler, this );
54
- signal_handler_disconnect (coreSignalHandler, " source_update" , SourceUpdatedMultiHandler, this );
55
- } else {
56
- blog (LOG_ERROR, " [EventHandler::~EventHandler] Unable to get libobs signal handler!" );
57
- }
48
+ coreSignals.clear ();
58
49
59
50
// Revoke callbacks of all inputs and scenes, in case some still have our callbacks attached
60
51
auto enumInputs = [](void *param, obs_source_t *source) {
@@ -378,12 +369,21 @@ void EventHandler::OnFrontendEvent(enum obs_frontend_event event, void *private_
378
369
break ;
379
370
case OBS_FRONTEND_EVENT_RECORDING_STARTED:
380
371
eventHandler->HandleRecordStateChanged (OBS_WEBSOCKET_OUTPUT_STARTED);
372
+ {
373
+ OBSOutputAutoRelease recordOutput = obs_frontend_get_recording_output ();
374
+ if (recordOutput) {
375
+ signal_handler_t *sh = obs_output_get_signal_handler (recordOutput);
376
+ eventHandler->recordFileChangedSignal .Connect (sh, " file_changed" , HandleRecordFileChanged,
377
+ private_data);
378
+ }
379
+ }
381
380
break ;
382
381
case OBS_FRONTEND_EVENT_RECORDING_STOPPING:
383
382
eventHandler->HandleRecordStateChanged (OBS_WEBSOCKET_OUTPUT_STOPPING);
384
383
break ;
385
384
case OBS_FRONTEND_EVENT_RECORDING_STOPPED:
386
385
eventHandler->HandleRecordStateChanged (OBS_WEBSOCKET_OUTPUT_STOPPED);
386
+ eventHandler->recordFileChangedSignal .Disconnect ();
387
387
break ;
388
388
case OBS_FRONTEND_EVENT_RECORDING_PAUSED:
389
389
eventHandler->HandleRecordStateChanged (OBS_WEBSOCKET_OUTPUT_PAUSED);
0 commit comments