Skip to content

Commit 3d288f6

Browse files
committed
Fix background color
1 parent 511d0d8 commit 3d288f6

File tree

1 file changed

+58
-8
lines changed

1 file changed

+58
-8
lines changed

source-record.c

Lines changed: 58 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
#define OUTPUT_MODE_STREAMING_OR_RECORDING 4
1919
#define OUTPUT_MODE_VIRTUAL_CAMERA 5
2020

21+
#define BACKGROUND_CHANNEL 0
22+
#define SOURCE_CHANNEL 1
23+
2124
struct source_record_filter_context {
2225
obs_source_t *source;
2326
video_t *video_output;
@@ -364,7 +367,7 @@ static void remove_filter(void *data, calldata_t *calldata)
364367
signal_handler_disconnect(sh, "stop", remove_filter, filter);
365368
obs_source_t *source = obs_filter_get_parent(filter->source);
366369
if (!source && filter->view) {
367-
source = obs_view_get_source(filter->view, 0);
370+
source = obs_view_get_source(filter->view, SOURCE_CHANNEL);
368371
obs_source_release(source);
369372
}
370373
obs_source_filter_remove(source, filter->source);
@@ -832,12 +835,31 @@ static void source_record_filter_update(void *data, obs_data_t *settings)
832835
}
833836

834837
if (parent && filter->view && (record || replay_buffer)) {
835-
obs_source_t *view_source = obs_view_get_source(filter->view, 0);
838+
obs_source_t *view_source = obs_view_get_source(filter->view, SOURCE_CHANNEL);
836839
if (view_source != parent)
837-
obs_view_set_source(filter->view, 0, parent);
840+
obs_view_set_source(filter->view, SOURCE_CHANNEL, parent);
838841
obs_source_release(view_source);
839842
}
840843

844+
if (parent && filter->view) {
845+
obs_source_t *background_source = obs_view_get_source(filter->view, BACKGROUND_CHANNEL);
846+
if (!background_source) {
847+
background_source = obs_source_create_private("color_source", "Source Record Background", NULL);
848+
obs_view_set_source(filter->view, BACKGROUND_CHANNEL, background_source);
849+
}
850+
obs_data_t *css = obs_source_get_settings(background_source);
851+
if (obs_data_get_int(css, "color") != obs_data_get_int(settings, "backgroundColor") ||
852+
obs_data_get_int(css, "width") != obs_source_get_width(parent) ||
853+
obs_data_get_int(css, "height") != obs_source_get_height(parent)) {
854+
obs_data_set_int(css, "color", obs_data_get_int(settings, "backgroundColor"));
855+
obs_data_set_int(css, "width", obs_source_get_width(parent));
856+
obs_data_set_int(css, "height", obs_source_get_height(parent));
857+
obs_source_update(background_source, css);
858+
}
859+
obs_data_release(css);
860+
obs_source_release(background_source);
861+
}
862+
841863
if (record != filter->record) {
842864
if (record) {
843865
if (obs_source_enabled(filter->source) && filter->video_output)
@@ -917,9 +939,9 @@ static void source_record_filter_update(void *data, obs_data_t *settings)
917939
}
918940

919941
if (parent && filter->view && stream) {
920-
obs_source_t *view_source = obs_view_get_source(filter->view, 0);
942+
obs_source_t *view_source = obs_view_get_source(filter->view, SOURCE_CHANNEL);
921943
if (view_source != parent)
922-
obs_view_set_source(filter->view, 0, parent);
944+
obs_view_set_source(filter->view, SOURCE_CHANNEL, parent);
923945
obs_source_release(view_source);
924946
}
925947

@@ -1119,7 +1141,8 @@ static void source_record_delayed_destroy(void *data)
11191141
obs_service_release(context->service);
11201142

11211143
if (context->video_output && context->view) {
1122-
obs_view_set_source(context->view, 0, NULL);
1144+
obs_view_set_source(context->view, BACKGROUND_CHANNEL, NULL);
1145+
obs_view_set_source(context->view, SOURCE_CHANNEL, NULL);
11231146
obs_view_remove(context->view);
11241147
context->video_output = NULL;
11251148
}
@@ -1369,11 +1392,29 @@ static void source_record_filter_tick(void *data, float seconds)
13691392
obs_data_t *s = obs_source_get_settings(context->source);
13701393
update_encoder(context, s);
13711394
if (context->record || context->stream || context->replayBuffer) {
1372-
obs_source_t *view_source = obs_view_get_source(context->view, 0);
1395+
obs_source_t *view_source = obs_view_get_source(context->view, SOURCE_CHANNEL);
13731396
if (view_source != parent)
1374-
obs_view_set_source(context->view, 0, parent);
1397+
obs_view_set_source(context->view, SOURCE_CHANNEL, parent);
13751398
obs_source_release(view_source);
13761399
}
1400+
1401+
obs_source_t *background_source = obs_view_get_source(context->view, BACKGROUND_CHANNEL);
1402+
if (!background_source) {
1403+
background_source = obs_source_create_private("color_source", "Source Record Background", NULL);
1404+
obs_view_set_source(context->view, BACKGROUND_CHANNEL, background_source);
1405+
}
1406+
obs_data_t *css = obs_source_get_settings(background_source);
1407+
if (obs_data_get_int(css, "color") != obs_data_get_int(s, "backgroundColor") ||
1408+
obs_data_get_int(css, "width") != obs_source_get_width(parent) ||
1409+
obs_data_get_int(css, "height") != obs_source_get_height(parent)) {
1410+
obs_data_set_int(css, "color", obs_data_get_int(s, "backgroundColor"));
1411+
obs_data_set_int(css, "width", obs_source_get_width(parent));
1412+
obs_data_set_int(css, "height", obs_source_get_height(parent));
1413+
obs_source_update(background_source, css);
1414+
}
1415+
obs_data_release(css);
1416+
obs_source_release(background_source);
1417+
13771418
if (context->record)
13781419
start_file_output(context, s);
13791420
if (context->stream)
@@ -1766,6 +1807,10 @@ static void source_record_filter_filter_remove(void *data, obs_source_t *parent)
17661807
run_queued(force_stop_output_task, so);
17671808
context->replayOutput = NULL;
17681809
}
1810+
if (context->view) {
1811+
obs_view_set_source(context->view, BACKGROUND_CHANNEL, NULL);
1812+
obs_view_set_source(context->view, SOURCE_CHANNEL, NULL);
1813+
}
17691814
obs_frontend_remove_event_callback(frontend_event, context);
17701815
}
17711816

@@ -2495,3 +2540,8 @@ void obs_module_unload(void)
24952540
{
24962541
da_free(source_record_filters);
24972542
}
2543+
2544+
const char *obs_module_name(void)
2545+
{
2546+
return obs_module_text("SourceRecord");
2547+
}

0 commit comments

Comments
 (0)