void obs_source_filter_add(obs_source_t source, obs_source_t filter) { if (!source || !filter) return; pthread_mutex_lock(&source->filter_mutex); if (da_find(source->filters, &filter, 0) != DARRAY_INVALID) { blog(LOG_WARNING, "Tried to add a filter that was already " "present on the source"); return; } if (source->filters.num) { obs_source_t *back = da_end(source->filters); (*back)->filter_target = filter; } da_push_back(source->filters, &filter); pthread_mutex_unlock(&source->filter_mutex); filter->filter_parent = source; filter->filter_target = source; }
void device_projection_pop(device_t device) { struct matrix4 *end; if (!device->proj_stack.num) return; end = da_end(device->proj_stack); device->cur_proj = *end; da_pop_back(device->proj_stack); }
void gs_viewport_pop(void) { struct gs_rect *rect; if (!thread_graphics->viewport_stack.num) return; rect = da_end(thread_graphics->viewport_stack); gs_setviewport(rect->x, rect->y, rect->cx, rect->cy); da_pop_back(thread_graphics->viewport_stack); }