mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-08-24 10:14:13 -05:00
frontend, obs-filters: Add missing file support for filters
This commit is contained in:
@@ -1157,15 +1157,28 @@ void OBSBasic::Load(SceneCollection &collection)
|
||||
LoadData(data, collection);
|
||||
}
|
||||
|
||||
static inline void AddMissingFiles(void *data, obs_source_t *source)
|
||||
namespace {
|
||||
void addMissingFilterFiles(obs_source_t *, obs_source_t *filter, void *data)
|
||||
{
|
||||
obs_missing_files_t *f = (obs_missing_files_t *)data;
|
||||
obs_missing_files_t *sf = obs_source_get_missing_files(source);
|
||||
obs_missing_files_t *missing_files = static_cast<obs_missing_files_t *>(data);
|
||||
obs_missing_files_t *filter_missing_files = obs_source_get_missing_files(filter);
|
||||
|
||||
obs_missing_files_append(f, sf);
|
||||
obs_missing_files_destroy(sf);
|
||||
obs_missing_files_append(missing_files, filter_missing_files);
|
||||
obs_missing_files_destroy(filter_missing_files);
|
||||
}
|
||||
|
||||
void addMissingFiles(void *data, obs_source_t *source)
|
||||
{
|
||||
obs_missing_files_t *missing_files = static_cast<obs_missing_files_t *>(data);
|
||||
obs_missing_files_t *source_missing_files = obs_source_get_missing_files(source);
|
||||
|
||||
obs_missing_files_append(missing_files, source_missing_files);
|
||||
obs_missing_files_destroy(source_missing_files);
|
||||
|
||||
obs_source_enum_filters(source, addMissingFilterFiles, data);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
void OBSBasic::LoadData(obs_data_t *data, SceneCollection &collection)
|
||||
{
|
||||
ClearSceneData();
|
||||
@@ -1317,12 +1330,12 @@ void OBSBasic::LoadData(obs_data_t *data, SceneCollection &collection)
|
||||
updateRemigrationMenuItem(collection.getCoordinateMode(), ui->actionRemigrateSceneCollection);
|
||||
|
||||
obs_missing_files_t *files = obs_missing_files_create();
|
||||
obs_load_sources(sources, AddMissingFiles, files);
|
||||
obs_load_sources(sources, addMissingFiles, files);
|
||||
|
||||
if (resetVideo)
|
||||
ResetVideo();
|
||||
if (transitionsData)
|
||||
LoadTransitions(transitionsData, AddMissingFiles, files);
|
||||
LoadTransitions(transitionsData, addMissingFiles, files);
|
||||
if (sceneOrder)
|
||||
LoadSceneListOrder(sceneOrder);
|
||||
|
||||
@@ -1651,7 +1664,7 @@ void OBSBasic::on_actionShowMissingFiles_triggered()
|
||||
obs_missing_files_t *files = obs_missing_files_create();
|
||||
|
||||
auto cb_sources = [](void *data, obs_source_t *source) {
|
||||
AddMissingFiles(data, source);
|
||||
addMissingFiles(data, source);
|
||||
return true;
|
||||
};
|
||||
|
||||
|
||||
@@ -465,6 +465,34 @@ static enum gs_color_space color_grade_filter_get_color_space(void *data, size_t
|
||||
return source_space;
|
||||
}
|
||||
|
||||
static void missing_file_callback(void *src, const char *new_path, void *data)
|
||||
{
|
||||
struct lut_filter_data *filter = src;
|
||||
|
||||
obs_source_t *source = filter->context;
|
||||
obs_data_t *settings = obs_source_get_settings(source);
|
||||
obs_data_set_string(settings, SETTING_IMAGE_PATH, new_path);
|
||||
obs_source_update(source, settings);
|
||||
obs_data_release(settings);
|
||||
|
||||
UNUSED_PARAMETER(data);
|
||||
}
|
||||
|
||||
static obs_missing_files_t *color_grade_filter_missing_files(void *data)
|
||||
{
|
||||
struct lut_filter_data *filter = data;
|
||||
obs_missing_files_t *files = obs_missing_files_create();
|
||||
|
||||
if (filter->file && strcmp(filter->file, "") != 0 && !os_file_exists(filter->file)) {
|
||||
obs_missing_file_t *file = obs_missing_file_create(filter->file, missing_file_callback,
|
||||
OBS_MISSING_FILE_SOURCE, filter->context, NULL);
|
||||
|
||||
obs_missing_files_add_file(files, file);
|
||||
}
|
||||
|
||||
return files;
|
||||
}
|
||||
|
||||
struct obs_source_info color_grade_filter = {
|
||||
.id = "clut_filter",
|
||||
.type = OBS_SOURCE_TYPE_FILTER,
|
||||
@@ -477,4 +505,5 @@ struct obs_source_info color_grade_filter = {
|
||||
.get_properties = color_grade_filter_properties,
|
||||
.video_render = color_grade_filter_render,
|
||||
.video_get_color_space = color_grade_filter_get_color_space,
|
||||
.missing_files = color_grade_filter_missing_files,
|
||||
};
|
||||
|
||||
@@ -343,6 +343,34 @@ static enum gs_color_space mask_filter_get_color_space(void *data, size_t count,
|
||||
return source_space;
|
||||
}
|
||||
|
||||
static void missing_file_callback(void *src, const char *new_path, void *data)
|
||||
{
|
||||
struct mask_filter_data *filter = src;
|
||||
|
||||
obs_source_t *source = filter->context;
|
||||
obs_data_t *settings = obs_source_get_settings(source);
|
||||
obs_data_set_string(settings, SETTING_IMAGE_PATH, new_path);
|
||||
obs_source_update(source, settings);
|
||||
obs_data_release(settings);
|
||||
|
||||
UNUSED_PARAMETER(data);
|
||||
}
|
||||
|
||||
static obs_missing_files_t *mask_filter_missing_files(void *data)
|
||||
{
|
||||
struct mask_filter_data *filter = data;
|
||||
obs_missing_files_t *files = obs_missing_files_create();
|
||||
|
||||
if (filter->image_file && strcmp(filter->image_file, "") != 0 && !os_file_exists(filter->image_file)) {
|
||||
obs_missing_file_t *file = obs_missing_file_create(filter->image_file, missing_file_callback,
|
||||
OBS_MISSING_FILE_SOURCE, filter->context, NULL);
|
||||
|
||||
obs_missing_files_add_file(files, file);
|
||||
}
|
||||
|
||||
return files;
|
||||
}
|
||||
|
||||
struct obs_source_info mask_filter = {
|
||||
.id = "mask_filter",
|
||||
.type = OBS_SOURCE_TYPE_FILTER,
|
||||
@@ -355,6 +383,7 @@ struct obs_source_info mask_filter = {
|
||||
.get_properties = mask_filter_properties_v1,
|
||||
.video_tick = mask_filter_tick,
|
||||
.video_render = mask_filter_render,
|
||||
.missing_files = mask_filter_missing_files,
|
||||
};
|
||||
|
||||
struct obs_source_info mask_filter_v2 = {
|
||||
@@ -371,4 +400,5 @@ struct obs_source_info mask_filter_v2 = {
|
||||
.video_tick = mask_filter_tick,
|
||||
.video_render = mask_filter_render,
|
||||
.video_get_color_space = mask_filter_get_color_space,
|
||||
.missing_files = mask_filter_missing_files,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user