Browse Source

(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.
jp9000 9 years ago
parent
commit
b0104fcee0

+ 2 - 2
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);

+ 4 - 2
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:

+ 2 - 3
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;
 }
 

+ 16 - 45
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;
 }
 

+ 6 - 6
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);
 

+ 6 - 11
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

+ 5 - 8
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);

+ 4 - 6
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;

+ 2 - 4
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,

+ 2 - 4
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;

+ 2 - 2
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";
 

+ 4 - 5
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);