filter-utils.lua: Check media type when finding the default filter
This avoids wireplumber trying to link a video stream node with the default audio smart filter if smart audio filters are configured.
This commit is contained in:
@@ -318,6 +318,9 @@ local function rescanFilters (om, metadata_om)
|
|||||||
filter.direction = "output"
|
filter.direction = "output"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Filter media type
|
||||||
|
filter.media_type = si.properties["media.type"]
|
||||||
|
|
||||||
-- Get filter properties
|
-- Get filter properties
|
||||||
filter.smart = getFilterSmart (metadata, n)
|
filter.smart = getFilterSmart (metadata, n)
|
||||||
filter.name = getFilterSmartName (metadata, n)
|
filter.name = getFilterSmartName (metadata, n)
|
||||||
@@ -432,6 +435,7 @@ function module.get_filter_target (direction, link_group)
|
|||||||
-- Return the next filter with matching target
|
-- Return the next filter with matching target
|
||||||
for i, v in ipairs(module.filters) do
|
for i, v in ipairs(module.filters) do
|
||||||
if v.direction == direction and
|
if v.direction == direction and
|
||||||
|
v.media_type == filter.media_type and
|
||||||
v.name ~= filter.name and
|
v.name ~= filter.name and
|
||||||
v.link_group ~= link_group and
|
v.link_group ~= link_group and
|
||||||
not v.disabled and
|
not v.disabled and
|
||||||
@@ -447,11 +451,11 @@ function module.get_filter_target (direction, link_group)
|
|||||||
return filter.target
|
return filter.target
|
||||||
end
|
end
|
||||||
|
|
||||||
function module.get_filter_from_target (direction, si_target)
|
function module.get_filter_from_target (direction, media_type, si_target)
|
||||||
local target = si_target
|
local target = si_target
|
||||||
|
|
||||||
-- Make sure direction is valid
|
-- Make sure direction and media_type are valid
|
||||||
if direction == nil then
|
if direction == nil or media_type == nil then
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -463,6 +467,7 @@ function module.get_filter_from_target (direction, si_target)
|
|||||||
local filter = nil
|
local filter = nil
|
||||||
for i, v in ipairs(module.filters) do
|
for i, v in ipairs(module.filters) do
|
||||||
if v.direction == direction and
|
if v.direction == direction and
|
||||||
|
v.media_type == media_type and
|
||||||
v.link_group == target_link_group and
|
v.link_group == target_link_group and
|
||||||
not v.disabled and
|
not v.disabled and
|
||||||
v.smart then
|
v.smart then
|
||||||
@@ -477,10 +482,10 @@ function module.get_filter_from_target (direction, si_target)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Find the first filter matching target
|
-- Find the first filter matching target
|
||||||
for i, v in ipairs(module.filters) do
|
for i, v in ipairs(module.filters) do
|
||||||
if v.direction == direction and
|
if v.direction == direction and
|
||||||
|
v.media_type == media_type and
|
||||||
not v.disabled and
|
not v.disabled and
|
||||||
v.smart and
|
v.smart and
|
||||||
((v.target ~= nil and target ~= nil and v.target.id == target.id) or
|
((v.target ~= nil and target ~= nil and v.target.id == target.id) or
|
||||||
|
@@ -30,14 +30,16 @@ SimpleEventHook {
|
|||||||
|
|
||||||
-- bypass the hook if the session item is a filter
|
-- bypass the hook if the session item is a filter
|
||||||
local node = si:get_associated_proxy ("node")
|
local node = si:get_associated_proxy ("node")
|
||||||
local link_group = node.properties ["node.link-group"]
|
local node_props = node.properties
|
||||||
|
local link_group = node_props ["node.link-group"]
|
||||||
if link_group ~= nil then
|
if link_group ~= nil then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
-- bypass the hook if target is defined, is a filter and is targetable
|
-- bypass the hook if target is defined, is a filter and is targetable
|
||||||
local target_node = target:get_associated_proxy ("node")
|
local target_node = target:get_associated_proxy ("node")
|
||||||
local target_link_group = target_node.properties ["node.link-group"]
|
local target_node_props = target_node.properties
|
||||||
|
local target_link_group = target_node_props ["node.link-group"]
|
||||||
local target_direction = cutils.getTargetDirection (si.properties)
|
local target_direction = cutils.getTargetDirection (si.properties)
|
||||||
if target_link_group ~= nil and si_flags.has_defined_target then
|
if target_link_group ~= nil and si_flags.has_defined_target then
|
||||||
if futils.is_filter_smart (target_direction, target_link_group) and
|
if futils.is_filter_smart (target_direction, target_link_group) and
|
||||||
@@ -50,12 +52,13 @@ SimpleEventHook {
|
|||||||
-- Get the filter from the given target if it exists, otherwise get the
|
-- Get the filter from the given target if it exists, otherwise get the
|
||||||
-- default filter, but only if target was not defined
|
-- default filter, but only if target was not defined
|
||||||
local target_direction = cutils.getTargetDirection (si.properties)
|
local target_direction = cutils.getTargetDirection (si.properties)
|
||||||
local filter_target = futils.get_filter_from_target (target_direction, target)
|
local media_type = si_props["media.type"]
|
||||||
|
local filter_target = futils.get_filter_from_target (target_direction, media_type, target)
|
||||||
if filter_target ~= nil then
|
if filter_target ~= nil then
|
||||||
target = filter_target
|
target = filter_target
|
||||||
log:info (si, "... got filter for given target")
|
log:info (si, "... got filter for given target")
|
||||||
elseif filter_target == nil and not si_flags.has_defined_target then
|
elseif filter_target == nil and not si_flags.has_defined_target then
|
||||||
filter_target = futils.get_filter_from_target (target_direction, nil)
|
filter_target = futils.get_filter_from_target (target_direction, media_type, nil)
|
||||||
if filter_target ~= nil then
|
if filter_target ~= nil then
|
||||||
target = filter_target
|
target = filter_target
|
||||||
log:info (si, "... got default filter for given target")
|
log:info (si, "... got default filter for given target")
|
||||||
|
Reference in New Issue
Block a user