mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-09-19 20:32:15 +02:00
add names to sources, use 'id' for the internal source identifier names rather than 'name'
This commit is contained in:
parent
0781670ba2
commit
95a7da2d4c
@ -19,49 +19,49 @@
|
||||
#include "obs-data.h"
|
||||
|
||||
bool get_output_info(void *module, const char *module_name,
|
||||
const char *output_name, struct output_info *info)
|
||||
const char *output_id, struct output_info *info)
|
||||
{
|
||||
info->getname = load_module_subfunc(module, module_name,
|
||||
output_name, "getname", true);
|
||||
output_id, "getname", true);
|
||||
info->create = load_module_subfunc(module, module_name,
|
||||
output_name, "create", true);
|
||||
output_id, "create", true);
|
||||
info->destroy = load_module_subfunc(module, module_name,
|
||||
output_name, "destroy", true);
|
||||
output_id, "destroy", true);
|
||||
info->start = load_module_subfunc(module, module_name,
|
||||
output_name, "start", true);
|
||||
output_id, "start", true);
|
||||
info->stop = load_module_subfunc(module, module_name,
|
||||
output_name, "stop", true);
|
||||
output_id, "stop", true);
|
||||
|
||||
if (!info->getname || !info->create || !info->destroy ||
|
||||
!info->start || !info->stop)
|
||||
return false;
|
||||
|
||||
info->config = load_module_subfunc(module, module_name,
|
||||
output_name, "config", false);
|
||||
output_id, "config", false);
|
||||
info->pause = load_module_subfunc(module, module_name,
|
||||
output_name, "pause", false);
|
||||
output_id, "pause", false);
|
||||
|
||||
info->name = output_name;
|
||||
info->id = output_id;
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline const struct output_info *find_output(const char *type)
|
||||
static inline const struct output_info *find_output(const char *id)
|
||||
{
|
||||
size_t i;
|
||||
for (i = 0; i < obs->output_types.num; i++)
|
||||
if (strcmp(obs->output_types.array[i].name, type) == 0)
|
||||
if (strcmp(obs->output_types.array[i].id, id) == 0)
|
||||
return obs->output_types.array+i;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
obs_output_t obs_output_create(const char *type, const char *settings)
|
||||
obs_output_t obs_output_create(const char *id, const char *settings)
|
||||
{
|
||||
const struct output_info *info = find_output(type);
|
||||
const struct output_info *info = find_output(id);
|
||||
struct obs_output *output;
|
||||
|
||||
if (!info) {
|
||||
blog(LOG_WARNING, "Output type '%s' not found", type);
|
||||
blog(LOG_WARNING, "Output '%s' not found", id);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -98,7 +98,7 @@
|
||||
struct obs_output;
|
||||
|
||||
struct output_info {
|
||||
const char *name;
|
||||
const char *id;
|
||||
|
||||
const char *(*getname)(const char *locale);
|
||||
|
||||
|
@ -87,7 +87,7 @@ static uint32_t scene_getsize(void *data)
|
||||
|
||||
static const struct source_info scene_info =
|
||||
{
|
||||
.name = "scene",
|
||||
.id = "scene",
|
||||
.getname = scene_getname,
|
||||
.create = scene_create,
|
||||
.destroy = scene_destroy,
|
||||
|
@ -20,6 +20,8 @@
|
||||
struct service_data;
|
||||
|
||||
struct service_info {
|
||||
char *id;
|
||||
|
||||
const char *(*getname)(const char *locale);
|
||||
|
||||
void *(*create)(const char *settings, struct service_data *service);
|
||||
|
@ -26,59 +26,59 @@
|
||||
static void obs_source_destroy(obs_source_t source);
|
||||
|
||||
bool get_source_info(void *module, const char *module_name,
|
||||
const char *source_name, struct source_info *info)
|
||||
const char *source_id, struct source_info *info)
|
||||
{
|
||||
info->getname = load_module_subfunc(module, module_name,
|
||||
source_name, "getname", true);
|
||||
source_id, "getname", true);
|
||||
info->create = load_module_subfunc(module, module_name,
|
||||
source_name,"create", true);
|
||||
source_id,"create", true);
|
||||
info->destroy = load_module_subfunc(module, module_name,
|
||||
source_name, "destroy", true);
|
||||
source_id, "destroy", true);
|
||||
info->get_output_flags = load_module_subfunc(module, module_name,
|
||||
source_name, "get_output_flags", true);
|
||||
source_id, "get_output_flags", true);
|
||||
|
||||
if (!info->getname || !info->create || !info->destroy ||
|
||||
!info->get_output_flags)
|
||||
return false;
|
||||
|
||||
info->config = load_module_subfunc(module, module_name,
|
||||
source_name, "config", false);
|
||||
source_id, "config", false);
|
||||
info->activate = load_module_subfunc(module, module_name,
|
||||
source_name, "activate", false);
|
||||
source_id, "activate", false);
|
||||
info->deactivate = load_module_subfunc(module, module_name,
|
||||
source_name, "deactivate", false);
|
||||
source_id, "deactivate", false);
|
||||
info->video_tick = load_module_subfunc(module, module_name,
|
||||
source_name, "video_tick", false);
|
||||
source_id, "video_tick", false);
|
||||
info->video_render = load_module_subfunc(module, module_name,
|
||||
source_name, "video_render", false);
|
||||
source_id, "video_render", false);
|
||||
info->getwidth = load_module_subfunc(module, module_name,
|
||||
source_name, "getwidth", false);
|
||||
source_id, "getwidth", false);
|
||||
info->getheight = load_module_subfunc(module, module_name,
|
||||
source_name, "getheight", false);
|
||||
source_id, "getheight", false);
|
||||
|
||||
info->getparam = load_module_subfunc(module, module_name,
|
||||
source_name, "getparam", false);
|
||||
source_id, "getparam", false);
|
||||
info->setparam = load_module_subfunc(module, module_name,
|
||||
source_name, "setparam", false);
|
||||
source_id, "setparam", false);
|
||||
|
||||
info->filter_video = load_module_subfunc(module, module_name,
|
||||
source_name, "filter_video", false);
|
||||
source_id, "filter_video", false);
|
||||
info->filter_audio = load_module_subfunc(module, module_name,
|
||||
source_name, "filter_audio", false);
|
||||
source_id, "filter_audio", false);
|
||||
|
||||
info->name = source_name;
|
||||
info->id = source_id;
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline const struct source_info *find_source(struct darray *list,
|
||||
const char *name)
|
||||
const char *id)
|
||||
{
|
||||
size_t i;
|
||||
struct source_info *array = list->array;
|
||||
|
||||
for (i = 0; i < list->num; i++) {
|
||||
struct source_info *info = array+i;
|
||||
if (strcmp(info->name, name) == 0)
|
||||
if (strcmp(info->id, id) == 0)
|
||||
return info;
|
||||
}
|
||||
|
||||
@ -117,8 +117,8 @@ bool obs_source_init(struct obs_source *source, const char *settings,
|
||||
return true;
|
||||
}
|
||||
|
||||
obs_source_t obs_source_create(enum obs_source_type type, const char *name,
|
||||
const char *settings)
|
||||
obs_source_t obs_source_create(enum obs_source_type type, const char *id,
|
||||
const char *name, const char *settings)
|
||||
{
|
||||
const struct source_info *info = NULL;
|
||||
struct darray *list = NULL;
|
||||
@ -134,15 +134,16 @@ obs_source_t obs_source_create(enum obs_source_type type, const char *name,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
info = find_source(list, name);
|
||||
info = find_source(list, id);
|
||||
if (!info) {
|
||||
blog(LOG_WARNING, "Source type '%s' not found", name);
|
||||
blog(LOG_WARNING, "Source '%s' not found", id);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
source = bmalloc(sizeof(struct obs_source));
|
||||
memset(source, 0, sizeof(struct obs_source));
|
||||
|
||||
source->name = bstrdup(name);
|
||||
source->data = info->create(settings, source);
|
||||
if (!source->data)
|
||||
goto fail;
|
||||
|
@ -153,7 +153,7 @@
|
||||
struct obs_source;
|
||||
|
||||
struct source_info {
|
||||
const char *name;
|
||||
const char *id;
|
||||
|
||||
/* ----------------------------------------------------------------- */
|
||||
/* required implementations */
|
||||
@ -204,7 +204,7 @@ struct obs_source {
|
||||
volatile int refs;
|
||||
|
||||
/* source-specific data */
|
||||
char *name;
|
||||
char *name; /* user-defined name */
|
||||
struct dstr settings;
|
||||
void *data;
|
||||
struct source_info callbacks;
|
||||
|
16
libobs/obs.c
16
libobs/obs.c
@ -374,35 +374,35 @@ bool obs_get_audio_info(struct audio_info *ai)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool obs_enum_input_types(size_t idx, const char **name)
|
||||
bool obs_enum_input_types(size_t idx, const char **id)
|
||||
{
|
||||
if (idx >= obs->input_types.num)
|
||||
return false;
|
||||
*name = obs->input_types.array[idx].name;
|
||||
*id = obs->input_types.array[idx].id;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool obs_enum_filter_types(size_t idx, const char **name)
|
||||
bool obs_enum_filter_types(size_t idx, const char **id)
|
||||
{
|
||||
if (idx >= obs->filter_types.num)
|
||||
return false;
|
||||
*name = obs->filter_types.array[idx].name;
|
||||
*id = obs->filter_types.array[idx].id;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool obs_enum_transition_types(size_t idx, const char **name)
|
||||
bool obs_enum_transition_types(size_t idx, const char **id)
|
||||
{
|
||||
if (idx >= obs->transition_types.num)
|
||||
return false;
|
||||
*name = obs->transition_types.array[idx].name;
|
||||
*id = obs->transition_types.array[idx].id;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool obs_enum_output_types(size_t idx, const char **name)
|
||||
bool obs_enum_output_types(size_t idx, const char **id)
|
||||
{
|
||||
if (idx >= obs->output_types.num)
|
||||
return false;
|
||||
*name = obs->output_types.array[idx].name;
|
||||
*id = obs->output_types.array[idx].id;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
12
libobs/obs.h
12
libobs/obs.h
@ -191,7 +191,7 @@ EXPORT int obs_load_module(const char *path);
|
||||
* Inputs are general source inputs (such as capture sources, device sources,
|
||||
* etc).
|
||||
*/
|
||||
EXPORT bool obs_enum_input_types(size_t idx, const char **name);
|
||||
EXPORT bool obs_enum_input_types(size_t idx, const char **id);
|
||||
|
||||
/**
|
||||
* Enumerates all available filter source types.
|
||||
@ -199,7 +199,7 @@ EXPORT bool obs_enum_input_types(size_t idx, const char **name);
|
||||
* Filters are sources that are used to modify the video/audio output of
|
||||
* other sources.
|
||||
*/
|
||||
EXPORT bool obs_enum_filter_types(size_t idx, const char **name);
|
||||
EXPORT bool obs_enum_filter_types(size_t idx, const char **id);
|
||||
|
||||
/**
|
||||
* Enumerates all available transition source types.
|
||||
@ -207,7 +207,7 @@ EXPORT bool obs_enum_filter_types(size_t idx, const char **name);
|
||||
* Transitions are sources used to transition between two or more other
|
||||
* sources.
|
||||
*/
|
||||
EXPORT bool obs_enum_transition_types(size_t idx, const char **name);
|
||||
EXPORT bool obs_enum_transition_types(size_t idx, const char **id);
|
||||
|
||||
/**
|
||||
* Enumerates all available ouput types.
|
||||
@ -215,7 +215,7 @@ EXPORT bool obs_enum_transition_types(size_t idx, const char **name);
|
||||
* Outputs handle color space conversion, encoding, and output to file or
|
||||
* streams.
|
||||
*/
|
||||
EXPORT bool obs_enum_output_types(size_t idx, const char **name);
|
||||
EXPORT bool obs_enum_output_types(size_t idx, const char **id);
|
||||
|
||||
/** Gets the graphics context for this OBS context */
|
||||
EXPORT graphics_t obs_graphics(void);
|
||||
@ -281,7 +281,7 @@ EXPORT obs_source_t obs_display_getsource(obs_display_t display,
|
||||
* Gets the translated display name of a source
|
||||
*/
|
||||
EXPORT const char *obs_source_getdisplayname(enum obs_source_type type,
|
||||
const char *name, const char *locale);
|
||||
const char *id, const char *locale);
|
||||
|
||||
/**
|
||||
* Creates a source of the specified type with the specified settings.
|
||||
@ -290,7 +290,7 @@ EXPORT const char *obs_source_getdisplayname(enum obs_source_type type,
|
||||
* or modifying video/audio.
|
||||
*/
|
||||
EXPORT obs_source_t obs_source_create(enum obs_source_type type,
|
||||
const char *name, const char *settings);
|
||||
const char *id, const char *name, const char *settings);
|
||||
|
||||
/**
|
||||
* Adds/releases a reference to a source. When the last reference is
|
||||
|
@ -149,14 +149,14 @@ static void test()
|
||||
/* ------------------------------------------------------ */
|
||||
/* create source */
|
||||
SourceContext source{obs_source_create(SOURCE_INPUT,
|
||||
"random", NULL)};
|
||||
"random", "a test source", NULL)};
|
||||
if (!source)
|
||||
throw "Couldn't create random test source";
|
||||
|
||||
/* ------------------------------------------------------ */
|
||||
/* create filter */
|
||||
SourceContext filter{obs_source_create(SOURCE_FILTER,
|
||||
"test", NULL)};
|
||||
"test", "a test filter", NULL)};
|
||||
if (!filter)
|
||||
throw "Couldn't create test filter";
|
||||
obs_source_filter_add(source, filter);
|
||||
|
@ -153,14 +153,14 @@ int WINAPI WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR cmdLine,
|
||||
/* ------------------------------------------------------ */
|
||||
/* create source */
|
||||
SourceContext source = obs_source_create(SOURCE_INPUT,
|
||||
"random", NULL);
|
||||
"random", "some randon source", NULL);
|
||||
if (!source)
|
||||
throw "Couldn't create random test source";
|
||||
|
||||
/* ------------------------------------------------------ */
|
||||
/* create filter */
|
||||
SourceContext filter = obs_source_create(SOURCE_FILTER,
|
||||
"test", NULL);
|
||||
"test", "a nice little green filter", NULL);
|
||||
if (!filter)
|
||||
throw "Couldn't create test filter";
|
||||
obs_source_filter_add(source, filter);
|
||||
|
Loading…
Reference in New Issue
Block a user