Implement source activation/deactivation
Now sources will be properly activated and deactivated when they are in use or not in use. Had to figure out a way to handle child sources, and children of children, just ended up implementing simple functions that parents use to signal adding/removal to help with hierarchial activation and deactivation of child sources. To prevent the source activate/deactivate callbacks from being called more than once, added an activation reference counter. The first increment will call the activate callback, and the last decrement will call the deactivate callback. Added "source-activate" and "source-deactivate" signals to the main obs signal handler, and "activate" and "deactivate" to individual source signal handlers. Also, fixed the main window so it properly selects a source when the current active scene has been changed.
This commit is contained in:
17
libobs/obs.h
17
libobs/obs.h
@@ -520,6 +520,9 @@ EXPORT void obs_source_enum_tree(obs_source_t source,
|
||||
obs_source_enum_proc_t enum_callback,
|
||||
void *param);
|
||||
|
||||
/** Returns true if active, false if not */
|
||||
EXPORT bool obs_source_active(obs_source_t source);
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Functions used by sources */
|
||||
|
||||
@@ -543,6 +546,20 @@ EXPORT void obs_source_process_filter(obs_source_t filter, effect_t effect,
|
||||
uint32_t width, uint32_t height, enum gs_color_format format,
|
||||
enum allow_direct_render allow_direct);
|
||||
|
||||
/**
|
||||
* Adds a child source. Must be called by parent sources on child sources
|
||||
* when the child is added. This ensures that the source is properly activated
|
||||
* if the parent is active.
|
||||
*/
|
||||
EXPORT void obs_source_add_child(obs_source_t parent, obs_source_t child);
|
||||
|
||||
/**
|
||||
* Removes a child source. Must be called by parent sources on child sources
|
||||
* when the child is removed. This ensures that the source is properly
|
||||
* deactivated if the parent is active.
|
||||
*/
|
||||
EXPORT void obs_source_remove_child(obs_source_t parent, obs_source_t child);
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Scenes */
|
||||
|
Reference in New Issue
Block a user