From b0104fcee0d016b4c00cbd0e81df5061dd9759fd Mon Sep 17 00:00:00 2001 From: jp9000 Date: Tue, 29 Dec 2015 15:25:45 -0800 Subject: [PATCH] (API Change) libobs: Remove source_type param from functions (Note: test and UI are also modified by this commit) API Changed (removed "enum obs_source_type type" parameter): ------------------------- obs_source_get_display_name obs_source_create obs_get_source_output_flags obs_get_source_defaults obs_get_source_properties Removes the "type" parameter from these functions. The "type" parameter really doesn't serve much of a purpose being a parameter in any of these cases, the type is just to indicate what it's used for. --- libobs/obs-internal.h | 4 +- libobs/obs-module.c | 6 ++- libobs/obs-scene.c | 5 +-- libobs/obs-source.c | 61 ++++++++---------------------- libobs/obs.c | 12 +++--- libobs/obs.h | 17 +++------ obs/window-basic-filters.cpp | 13 +++---- obs/window-basic-main.cpp | 10 ++--- obs/window-basic-settings.cpp | 6 +-- obs/window-basic-source-select.cpp | 6 +-- test/osx/test.mm | 4 +- test/win/test.cpp | 9 ++--- 12 files changed, 55 insertions(+), 98 deletions(-) diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index 45b2d0e25..4ae6b17b3 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -340,6 +340,7 @@ struct obs_core { struct obs_module *first_module; DARRAY(struct obs_module_path) module_paths; + DARRAY(struct obs_source_info) source_types; DARRAY(struct obs_source_info) input_types; DARRAY(struct obs_source_info) filter_types; DARRAY(struct obs_source_info) transition_types; @@ -597,8 +598,7 @@ struct obs_source { uint64_t push_to_talk_stop_time; }; -extern const struct obs_source_info *find_source(struct darray *list, - const char *id); +extern const struct obs_source_info *get_source_info(const char *id); extern bool obs_source_init_context(struct obs_source *source, obs_data_t *settings, const char *name, obs_data_t *hotkey_data); diff --git a/libobs/obs-module.c b/libobs/obs-module.c index 5a2973f06..3728e0760 100644 --- a/libobs/obs-module.c +++ b/libobs/obs-module.c @@ -540,7 +540,7 @@ void obs_register_source_s(const struct obs_source_info *info, size_t size) goto error; } - if (find_source(array, info->id)) { + if (get_source_info(info->id)) { blog(LOG_WARNING, "Source d '%s' already exists! " "Duplicate library?", info->id); goto error; @@ -601,7 +601,9 @@ void obs_register_source_s(const struct obs_source_info *info, size_t size) data.output_flags |= OBS_SOURCE_ASYNC; } - darray_push_back(sizeof(struct obs_source_info), array, &data); + if (array) + darray_push_back(sizeof(struct obs_source_info), array, &data); + da_push_back(obs->source_types, &data); return; error: diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index 7b45f5e34..66f5e0bf0 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -711,9 +711,8 @@ const struct obs_source_info scene_info = obs_scene_t *obs_scene_create(const char *name) { - struct obs_source *source = - obs_source_create(OBS_SOURCE_TYPE_INPUT, "scene", name, NULL, - NULL); + struct obs_source *source = obs_source_create("scene", name, NULL, + NULL); return source->context.data; } diff --git a/libobs/obs-source.c b/libobs/obs-source.c index ef97836ac..0e9ef36db 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -34,13 +34,10 @@ static inline bool data_valid(const struct obs_source *source, const char *f) return obs_source_valid(source, f) && source->context.data; } -const struct obs_source_info *find_source(struct darray *list, const char *id) +const struct obs_source_info *get_source_info(const char *id) { - size_t i; - struct obs_source_info *array = list->array; - - for (i = 0; i < list->num; i++) { - struct obs_source_info *info = array+i; + for (size_t i = 0; i < obs->source_types.num; i++) { + struct obs_source_info *info = &obs->source_types.array[i]; if (strcmp(info->id, id) == 0) return info; } @@ -48,28 +45,6 @@ const struct obs_source_info *find_source(struct darray *list, const char *id) return NULL; } -static const struct obs_source_info *get_source_info(enum obs_source_type type, - const char *id) -{ - struct darray *list = NULL; - - switch (type) { - case OBS_SOURCE_TYPE_INPUT: - list = &obs->input_types.da; - break; - - case OBS_SOURCE_TYPE_FILTER: - list = &obs->filter_types.da; - break; - - case OBS_SOURCE_TYPE_TRANSITION: - list = &obs->transition_types.da; - break; - } - - return find_source(list, id); -} - static const char *source_signals[] = { "void destroy(ptr source)", "void remove(ptr source)", @@ -109,10 +84,9 @@ bool obs_source_init_context(struct obs_source *source, source_signals); } -const char *obs_source_get_display_name(enum obs_source_type type, - const char *id) +const char *obs_source_get_display_name(const char *id) { - const struct obs_source_info *info = get_source_info(type, id); + const struct obs_source_info *info = get_source_info(id); return (info != NULL) ? info->get_name(info->type_data) : NULL; } @@ -306,17 +280,16 @@ static inline void obs_source_dosignal(struct obs_source *source, calldata_free(&data); } -obs_source_t *obs_source_create(enum obs_source_type type, const char *id, - const char *name, obs_data_t *settings, obs_data_t *hotkey_data) +obs_source_t *obs_source_create(const char *id, const char *name, + obs_data_t *settings, obs_data_t *hotkey_data) { struct obs_source *source = bzalloc(sizeof(struct obs_source)); - const struct obs_source_info *info = get_source_info(type, id); + const struct obs_source_info *info = get_source_info(id); if (!info) { blog(LOG_ERROR, "Source ID '%s' not found", id); source->info.id = bstrdup(id); - source->info.type = type; source->owns_info_id = true; } else { source->info = *info; @@ -562,23 +535,21 @@ static inline obs_data_t *get_defaults(const struct obs_source_info *info) return settings; } -obs_data_t *obs_source_settings(enum obs_source_type type, const char *id) +obs_data_t *obs_source_settings(const char *id) { - const struct obs_source_info *info = get_source_info(type, id); + const struct obs_source_info *info = get_source_info(id); return (info) ? get_defaults(info) : NULL; } -obs_data_t *obs_get_source_defaults(enum obs_source_type type, - const char *id) +obs_data_t *obs_get_source_defaults(const char *id) { - const struct obs_source_info *info = get_source_info(type, id); + const struct obs_source_info *info = get_source_info(id); return info ? get_defaults(info) : NULL; } -obs_properties_t *obs_get_source_properties(enum obs_source_type type, - const char *id) +obs_properties_t *obs_get_source_properties(const char *id) { - const struct obs_source_info *info = get_source_info(type, id); + const struct obs_source_info *info = get_source_info(id); if (info && info->get_properties) { obs_data_t *defaults = get_defaults(info); obs_properties_t *properties; @@ -612,9 +583,9 @@ uint32_t obs_source_get_output_flags(const obs_source_t *source) source->info.output_flags : 0; } -uint32_t obs_get_source_output_flags(enum obs_source_type type, const char *id) +uint32_t obs_get_source_output_flags(const char *id) { - const struct obs_source_info *info = get_source_info(type, id); + const struct obs_source_info *info = get_source_info(id); return info ? info->output_flags : 0; } diff --git a/libobs/obs.c b/libobs/obs.c index 7d5d1024c..e5904ead0 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -770,6 +770,7 @@ void obs_shutdown(void) da_free(list); \ } while (false) + FREE_REGISTERED_TYPES(obs_source_info, obs->source_types); FREE_REGISTERED_TYPES(obs_source_info, obs->input_types); FREE_REGISTERED_TYPES(obs_source_info, obs->filter_types); FREE_REGISTERED_TYPES(obs_source_info, obs->transition_types); @@ -1386,8 +1387,7 @@ float obs_get_master_volume(void) return obs ? obs->audio.user_volume : 0.0f; } -static obs_source_t *obs_load_source_type(obs_data_t *source_data, - enum obs_source_type type) +static obs_source_t *obs_load_source_type(obs_data_t *source_data) { obs_data_array_t *filters = obs_data_get_array(source_data, "filters"); obs_source_t *source; @@ -1400,7 +1400,7 @@ static obs_source_t *obs_load_source_type(obs_data_t *source_data, uint32_t flags; uint32_t mixers; - source = obs_source_create(type, id, name, settings, hotkeys); + source = obs_source_create(id, name, settings, hotkeys); obs_data_release(hotkeys); @@ -1450,7 +1450,7 @@ static obs_source_t *obs_load_source_type(obs_data_t *source_data, obs_data_array_item(filters, i); obs_source_t *filter = obs_load_source_type( - filter_data, OBS_SOURCE_TYPE_FILTER); + filter_data); if (filter) { obs_source_filter_add(source, filter); obs_source_release(filter); @@ -1469,7 +1469,7 @@ static obs_source_t *obs_load_source_type(obs_data_t *source_data, obs_source_t *obs_load_source(obs_data_t *source_data) { - return obs_load_source_type(source_data, OBS_SOURCE_TYPE_INPUT); + return obs_load_source_type(source_data); } void obs_load_sources(obs_data_array_t *array) @@ -1589,7 +1589,7 @@ obs_data_array_t *obs_save_sources_filtered(obs_save_source_filter_cb cb, source = data->first_source; while (source) { - if ((source->info.type == OBS_SOURCE_TYPE_INPUT) != 0 && + if ((source->info.type != OBS_SOURCE_TYPE_FILTER) != 0 && cb(data_, source)) { obs_data_t *source_data = obs_save_source(source); diff --git a/libobs/obs.h b/libobs/obs.h index bfc206a37..4488890ce 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -634,8 +634,7 @@ EXPORT void obs_display_set_background_color(obs_display_t *display, /* Sources */ /** Returns the translated display name of a source */ -EXPORT const char *obs_source_get_display_name(enum obs_source_type type, - const char *id); +EXPORT const char *obs_source_get_display_name(const char *id); /** * Creates a source of the specified type with the specified settings. @@ -643,9 +642,8 @@ EXPORT const char *obs_source_get_display_name(enum obs_source_type type, * The "source" context is used for anything related to presenting * or modifying video/audio. Use obs_source_release to release it. */ -EXPORT obs_source_t *obs_source_create(enum obs_source_type type, - const char *id, const char *name, obs_data_t *settings, - obs_data_t *hotkey_data); +EXPORT obs_source_t *obs_source_create(const char *id, const char *name, + obs_data_t *settings, obs_data_t *hotkey_data); /** * Adds/releases a reference to a source. When the last reference is @@ -674,16 +672,13 @@ EXPORT bool obs_source_removed(const obs_source_t *source); EXPORT uint32_t obs_source_get_output_flags(const obs_source_t *source); /** Returns capability flags of a source type */ -EXPORT uint32_t obs_get_source_output_flags(enum obs_source_type type, - const char *id); +EXPORT uint32_t obs_get_source_output_flags(const char *id); /** Gets the default settings for a source type */ -EXPORT obs_data_t *obs_get_source_defaults(enum obs_source_type type, - const char *id); +EXPORT obs_data_t *obs_get_source_defaults(const char *id); /** Returns the property list, if any. Free with obs_properties_destroy */ -EXPORT obs_properties_t *obs_get_source_properties(enum obs_source_type type, - const char *id); +EXPORT obs_properties_t *obs_get_source_properties(const char *id); /** * Returns the properties list for a specific existing source. Free with diff --git a/obs/window-basic-filters.cpp b/obs/window-basic-filters.cpp index ca0a64dc5..d58f968af 100644 --- a/obs/window-basic-filters.cpp +++ b/obs/window-basic-filters.cpp @@ -308,10 +308,8 @@ QMenu *OBSBasicFilters::CreateAddFilterPopupMenu(bool async) QMenu *popup = new QMenu(QTStr("Add"), this); while (obs_enum_filter_types(idx++, &type)) { - const char *name = obs_source_get_display_name( - OBS_SOURCE_TYPE_FILTER, type); - uint32_t filterFlags = obs_get_source_output_flags( - OBS_SOURCE_TYPE_FILTER, type); + const char *name = obs_source_get_display_name(type); + uint32_t filterFlags = obs_get_source_output_flags(type); if (!filter_compatible(async, sourceFlags, filterFlags)) continue; @@ -337,8 +335,7 @@ void OBSBasicFilters::AddNewFilter(const char *id) { if (id && *id) { obs_source_t *existing_filter; - string name = obs_source_get_display_name( - OBS_SOURCE_TYPE_FILTER, id); + string name = obs_source_get_display_name(id); bool success = NameDialog::AskForName(this, QTStr("Basic.Filters.AddFilter.Title"), @@ -366,8 +363,8 @@ void OBSBasicFilters::AddNewFilter(const char *id) return; } - obs_source_t *filter = obs_source_create(OBS_SOURCE_TYPE_FILTER, - id, name.c_str(), nullptr, nullptr); + obs_source_t *filter = obs_source_create(id, name.c_str(), + nullptr, nullptr); if (filter) { obs_source_filter_add(source, filter); obs_source_release(filter); diff --git a/obs/window-basic-main.cpp b/obs/window-basic-main.cpp index fdb3aa911..839d63913 100644 --- a/obs/window-basic-main.cpp +++ b/obs/window-basic-main.cpp @@ -366,8 +366,7 @@ static void LoadAudioDevice(const char *name, int channel, obs_data_t *parent) static inline bool HasAudioDevices(const char *source_id) { const char *output_id = source_id; - obs_properties_t *props = obs_get_source_properties( - OBS_SOURCE_TYPE_INPUT, output_id); + obs_properties_t *props = obs_get_source_properties(output_id); size_t count = 0; if (!props) @@ -2220,8 +2219,8 @@ void OBSBasic::ResetAudioDevice(const char *sourceId, const char *deviceId, if (!same && strcmp(deviceId, "disabled") != 0) { obs_data_t *settings = obs_data_create(); obs_data_set_string(settings, "device_id", deviceId); - source = obs_source_create(OBS_SOURCE_TYPE_INPUT, - sourceId, deviceDesc, settings, nullptr); + source = obs_source_create(sourceId, deviceDesc, settings, + nullptr); obs_data_release(settings); obs_set_output_source(channel, source); @@ -2718,8 +2717,7 @@ QMenu *OBSBasic::CreateAddSourcePopupMenu() QMenu *popup = new QMenu(QTStr("Add"), this); while (obs_enum_input_types(idx++, &type)) { - const char *name = obs_source_get_display_name( - OBS_SOURCE_TYPE_INPUT, type); + const char *name = obs_source_get_display_name(type); if (strcmp(type, "scene") == 0) continue; diff --git a/obs/window-basic-settings.cpp b/obs/window-basic-settings.cpp index d26e1a729..6e23b1ead 100644 --- a/obs/window-basic-settings.cpp +++ b/obs/window-basic-settings.cpp @@ -1464,10 +1464,8 @@ void OBSBasicSettings::LoadAudioDevices() const char *input_id = App()->InputAudioSource(); const char *output_id = App()->OutputAudioSource(); - obs_properties_t *input_props = obs_get_source_properties( - OBS_SOURCE_TYPE_INPUT, input_id); - obs_properties_t *output_props = obs_get_source_properties( - OBS_SOURCE_TYPE_INPUT, output_id); + obs_properties_t *input_props = obs_get_source_properties(input_id); + obs_properties_t *output_props = obs_get_source_properties(output_id); if (input_props) { obs_property_t *inputs = obs_properties_get(input_props, diff --git a/obs/window-basic-source-select.cpp b/obs/window-basic-source-select.cpp index 24014b59c..3944dfa1d 100644 --- a/obs/window-basic-source-select.cpp +++ b/obs/window-basic-source-select.cpp @@ -129,8 +129,7 @@ bool AddNew(QWidget *parent, const char *id, const char *name, QTStr("NameExists.Text")); } else { - source = obs_source_create(OBS_SOURCE_TYPE_INPUT, - id, name, NULL, nullptr); + source = obs_source_create(id, name, NULL, nullptr); if (source) { AddSourceData data; @@ -191,8 +190,7 @@ OBSBasicSourceSelect::OBSBasicSourceSelect(OBSBasic *parent, const char *id_) ui->sourceList->setAttribute(Qt::WA_MacShowFocusRect, false); - QString placeHolderText{QT_UTF8(obs_source_get_display_name( - OBS_SOURCE_TYPE_INPUT, id))}; + QString placeHolderText{QT_UTF8(obs_source_get_display_name(id))}; QString text{placeHolderText}; int i = 1; diff --git a/test/osx/test.mm b/test/osx/test.mm index 9ce748b9c..9a9381a9f 100644 --- a/test/osx/test.mm +++ b/test/osx/test.mm @@ -79,8 +79,8 @@ static SceneContext SetupScene() /* ------------------------------------------------------ */ /* create source */ - SourceContext source{obs_source_create(OBS_SOURCE_TYPE_INPUT, - "random", "a test source", nullptr, nullptr)}; + SourceContext source{obs_source_create("random", "a test source", + nullptr, nullptr)}; if (!source) throw "Couldn't create random test source"; diff --git a/test/win/test.cpp b/test/win/test.cpp index 8b23378a7..c0e60caf4 100644 --- a/test/win/test.cpp +++ b/test/win/test.cpp @@ -180,16 +180,15 @@ int WINAPI WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR cmdLine, /* ------------------------------------------------------ */ /* create source */ - SourceContext source = obs_source_create(OBS_SOURCE_TYPE_INPUT, - "random", "some randon source", NULL, nullptr); + SourceContext source = obs_source_create("random", + "some randon source", NULL, nullptr); if (!source) throw "Couldn't create random test source"; /* ------------------------------------------------------ */ /* create filter */ - SourceContext filter = obs_source_create(OBS_SOURCE_TYPE_FILTER, - "test_filter", "a nice green filter", NULL, - nullptr); + SourceContext filter = obs_source_create("test_filter", + "a nice green filter", NULL, nullptr); if (!filter) throw "Couldn't create test filter"; obs_source_filter_add(source, filter);