scene注册obs_register_source
2024-10-08
29
0
本想着从简单的开始,但是发现核心的渲染如D3D11和新的版本基本差不多,还不如直接用新的代码调试,所以本章节放弃。
obs_init函数中最后一项功能是注册一个输入源:scene类型。这样用户就可以在OBS界面中创建场景了。
static bool obs_init(void)
{
obs = bzalloc(sizeof(struct obs_core));
if (!obs_init_data())
return false;
if (!obs_init_handlers())
return false;
obs_register_source(&scene_info);
return true;
}
scene_info内容如下:
const struct obs_source_info scene_info =
{
.id = "scene",
.type = OBS_SOURCE_TYPE_INPUT,
.output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_CUSTOM_DRAW,
.getname = scene_getname,
.create = scene_create,
.destroy = scene_destroy,
.video_render = scene_video_render,
.getwidth = scene_getwidth,
.getheight = scene_getheight,
.load = scene_load,
.save = scene_save,
.enum_sources = scene_enum_sources
};
源的类型有三种:
enum obs_source_type {
OBS_SOURCE_TYPE_INPUT,
OBS_SOURCE_TYPE_FILTER,
OBS_SOURCE_TYPE_TRANSITION,
};
其相关的标识信息output_flags如下:
#define OBS_SOURCE_VIDEO (1<<0)
#define OBS_SOURCE_AUDIO (1<<1)
#define OBS_SOURCE_ASYNC (1<<2) //异步
#define OBS_SOURCE_CUSTOM_DRAW (1<<3)//如果指定了此标志,video_render回调将传递NULL效果,基于效果的过滤器将不使用直接渲染。
#define OBS_SOURCE_COLOR_MATRIX (1<<4)//源实现YUV->RGB