diff --git a/libobs/obs-source.c b/libobs/obs-source.c index 7dd39603c..869711738 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -1761,8 +1761,11 @@ static bool ready_async_frame(obs_source_t *source, uint64_t sys_time); static inline void render_video(obs_source_t *source) { if (source->info.type != OBS_SOURCE_TYPE_FILTER && - (source->info.output_flags & OBS_SOURCE_VIDEO) == 0) + (source->info.output_flags & OBS_SOURCE_VIDEO) == 0) { + if (source->filter_parent) + obs_source_skip_video_filter(source); return; + } if (source->info.type == OBS_SOURCE_TYPE_INPUT && (source->info.output_flags & OBS_SOURCE_ASYNC) != 0 && @@ -1806,7 +1809,7 @@ void obs_source_video_render(obs_source_t *source) static uint32_t get_base_width(const obs_source_t *source) { - bool is_filter = (source->info.type == OBS_SOURCE_TYPE_FILTER); + bool is_filter = !!source->filter_parent; if (source->info.type == OBS_SOURCE_TYPE_TRANSITION) { return source->enabled ? source->transition_actual_cx : 0; @@ -1814,7 +1817,7 @@ static uint32_t get_base_width(const obs_source_t *source) } else if (source->info.get_width && (!is_filter || source->enabled)) { return source->info.get_width(source->context.data); - } else if (source->info.type == OBS_SOURCE_TYPE_FILTER) { + } else if (is_filter) { return get_base_width(source->filter_target); } @@ -1823,7 +1826,7 @@ static uint32_t get_base_width(const obs_source_t *source) static uint32_t get_base_height(const obs_source_t *source) { - bool is_filter = (source->info.type == OBS_SOURCE_TYPE_FILTER); + bool is_filter = !!source->filter_parent; if (source->info.type == OBS_SOURCE_TYPE_TRANSITION) { return source->enabled ? source->transition_actual_cy : 0;