diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index 564798063..f9f8ac2fd 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -714,6 +714,12 @@ static void scene_load(void *data, obs_data_t *settings) if (obs_data_has_user_value(settings, "id_counter")) scene->id_counter = obs_data_get_int(settings, "id_counter"); + if (obs_data_get_bool(settings, "custom_size")) { + scene->cx = (uint32_t)obs_data_get_int(settings, "cx"); + scene->cy = (uint32_t)obs_data_get_int(settings, "cy"); + scene->custom_size = true; + } + obs_data_array_release(items); } @@ -775,6 +781,11 @@ static void scene_save(void *data, obs_data_t *settings) } obs_data_set_int(settings, "id_counter", scene->id_counter); + obs_data_set_bool(settings, "custom_size", scene->custom_size); + if (scene->custom_size) { + obs_data_set_int(settings, "cx", scene->cx); + obs_data_set_int(settings, "cy", scene->cy); + } full_unlock(scene); @@ -784,14 +795,14 @@ static void scene_save(void *data, obs_data_t *settings) static uint32_t scene_getwidth(void *data) { - UNUSED_PARAMETER(data); - return obs->video.base_width; + obs_scene_t *scene = data; + return scene->custom_size ? scene->cx : obs->video.base_width; } static uint32_t scene_getheight(void *data) { - UNUSED_PARAMETER(data); - return obs->video.base_height; + obs_scene_t *scene = data; + return scene->custom_size ? scene->cy : obs->video.base_height; } static void apply_scene_item_audio_actions(struct obs_scene_item *item, diff --git a/libobs/obs-scene.h b/libobs/obs-scene.h index c3bd220ae..a7a0221cb 100644 --- a/libobs/obs-scene.h +++ b/libobs/obs-scene.h @@ -83,6 +83,10 @@ struct obs_scene_item { struct obs_scene { struct obs_source *source; + bool custom_size; + uint32_t cx; + uint32_t cy; + int64_t id_counter; pthread_mutex_t video_mutex;