最近在看OBS源码,发现其复杂度真不是一般的高,看到render_video时脑子混乱了,经过单步调试跟踪才终于明朗了,下面先贴上源码:
static inline voidrender_video(obs_source_t *source)
{
if(source->info.type != OBS_SOURCE_TYPE_FILTER &&
(source->info.output_flags &OBS_SOURCE_VIDEO) == 0)
return;
if(source->info.type == OBS_SOURCE_TYPE_INPUT &&
(source->info.output_flags &OBS_SOURCE_ASYNC) != 0 &&
!source->rendering_filter) {
if(deinterlacing_enabled(source))
deinterlace_update_async_video(source);
obs_source_update_async_video(source);
}
if(!source->context.data || !source->enabled) {
if(source->filter_parent)
obs_source_skip_video_filter(source);
return;
}
if(source->filters.num && !source->rendering_filter)
obs_source_render_filters(source);
elseif (source->info.video_render)
obs_source_main_render(source);
elseif (source->filter_target)
obs_source_video_render(source->filter_target);
elseif (deinterlacing_enabled(source))
deinterlace_render(source);
else
obs_source_render_async_video(source);
}
如果source不是OBS_SOURCE_TYPE_FILTER且不是OBS_SOURCE_VIDEO直接退出;
如果source为OBS_SOURCE_TYPE_INPUT且是OBS