Linking Scripts
These scripts contain all the logic for creating links between nodes. This involves, to a large extent, deciding which links to create.
Hooks
The hooks in this section are organized in 3 sub-categories. The first category includes hooks that are triggered by changes in the graph. Some of them are tasked to schedule a “rescan-for-linking” event, which is the lowest priority event and its purpose is to scan through all the linkable session items and link them to a particular target. The “rescan-for-linking” event is always scheduled to run once for all the graph changes in a cycle. This is achieved by flagging the event as already scheduled in the module-standard-event-source; this flag is then cleared by a hook that runs on this event.
Selecting a target for each linkable and linking to it is deferred to another set of hooks by pushing a “select-target” event for each linkable. This event is the highest priority event and therefore no other changes in the graph are processed while targets are being selected.
Hook name |
File |
Triggered by |
Action |
---|---|---|---|
linking/rescan-trigger |
rescan.lua |
linkable SI added|removed or metadata-changed |
schedules rescan-for-linking event |
linking/linkable-removed |
rescan.lua |
linkable SI removed |
destroys links related to the removed linkable |
linking/follow |
move-follow.lua |
metadata-changed |
schedules rescan-for-linking when the configured default sources/sinks are changed by the user |
linking/move |
move-follow.lua |
metadata-changed |
schedules rescan-for-linking when node target metadata properties are changed |
linking/rescan-media-role-links |
rescan-media-role-links.lua |
link SI added, removed or metadata-changed |
activates or deactivates role-based links based on role priorities and actions |
Hook name |
File |
Description |
---|---|---|
m-standard-event-source/rescan-done |
module-standard-event-source.c |
clears the rescan_scheduled flag |
linking/rescan |
rescan.lua |
schedules select-target for each linkable session item |
Hook name |
File |
Description |
---|---|---|
linking/find-defined-target |
find-defined-target.lua |
Select the target that has been defined explicitly by the ‘target.object’ property or metadata |
linking/find-filter-target |
find-filter-target.lua |
Select the target of a filter node, if the subject is a filter node |
linking/find-media-role-target |
find-media-role-target.lua |
Select the target based on the stream’s media.role and the target’s device.intended-roles |
linking/find-default-target |
find-default-target.lua |
Select the default source/sink as target |
linking/find-best-target |
find-best-target.lua |
Select target based on priority.session |
linking/get-filter-from-target |
get-filter-from-target.lua |
Translate the found target to a filter target that should be linked instead |
linking/prepare-link |
prepare-link.lua |
Break existing link if needed, check if the target is available for linking; send error to the client if needed |
linking/link-target |
link-target.lua |
Create si-standard-link session item to create links between the subject linkable and the selected target |