Moving files:

This commit is contained in:
Antoine Phan
2024-07-27 00:06:16 +07:00
parent 9716a8df5a
commit 0cd53e0b65
260 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
-- WirePlumber
--
-- Copyright © 2023 Collabora Ltd.
-- @author Ashok Sidipotu <ashok.sidipotu@collabora.com>
--
-- SPDX-License-Identifier: MIT
cutils = require ("common-utils")
mutils = require ("monitor-utils")
log = Log.open_topic ("s-monitors-libcamera")
config = {}
config.rules = Conf.get_section_as_json ("monitor.libcamera.rules", Json.Array {})
function createLibcamNode (parent, id, type, factory, properties)
local registered = mutils:register_cam_node (parent, id, factory, properties)
if not registered then
source = source or Plugin.find ("standard-event-source")
local e = source:call ("create-event", "create-libcamera-device-node",
parent, nil)
e:set_data ("factory", factory)
e:set_data ("node-properties", properties)
e:set_data ("node-sub-id", id)
EventDispatcher.push_event (e)
end
end
SimpleEventHook {
name = "monitor/libcamera/create-device",
after = "monitor/libcamera/name-device",
interests = {
EventInterest {
Constraint { "event.type", "=", "create-libcamera-device" },
},
},
execute = function(event)
local properties = event:get_data ("device-properties")
local factory = event:get_data ("factory")
local parent = event:get_subject ()
local id = event:get_data ("device-sub-id")
-- apply properties from rules defined in JSON .conf file
properties = JsonUtils.match_rules_update_properties (config.rules, properties)
if cutils.parseBool (properties ["device.disabled"]) then
log:notice ("libcam device " .. properties["device.name"] .. " disabled")
return
end
local device = SpaDevice (factory, properties)
if device then
device:connect ("create-object", createLibcamNode)
device:activate (Feature.SpaDevice.ENABLED | Feature.Proxy.BOUND)
parent:store_managed_object (id, device)
else
log:warning ("Failed to create '" .. factory .. "' device")
end
end
}:register ()

View File

@@ -0,0 +1,41 @@
-- WirePlumber
--
-- Copyright © 2023 Collabora Ltd.
-- @author Ashok Sidipotu <ashok.sidipotu@collabora.com>
--
-- SPDX-License-Identifier: MIT
cutils = require ("common-utils")
mutils = require ("monitor-utils")
log = Log.open_topic ("s-monitors-libcamera")
config = {}
config.rules = Conf.get_section_as_json ("monitor.libcamera.rules", Json.Array {})
SimpleEventHook {
name = "monitor/libcamera/create-node",
after = "monitor/libcamera/name-node",
interests = {
EventInterest {
Constraint { "event.type", "=", "create-libcamera-device-node" },
},
},
execute = function(event)
local properties = event:get_data ("node-properties")
local parent = event:get_subject ()
local id = event:get_data ("node-sub-id")
-- apply properties from rules defined in JSON .conf file
properties = JsonUtils.match_rules_update_properties (config.rules, properties)
if cutils.parseBool (properties["node.disabled"]) then
log:notice ("libcam node" .. properties ["node.name"] .. " disabled")
return
end
-- create the node
local node = Node ("spa-node-factory", properties)
node:activate (Feature.Proxy.BOUND)
parent:store_managed_object (id, node)
end
}:register ()

View File

@@ -0,0 +1,32 @@
-- WirePlumber
--
-- Copyright © 2023 Collabora Ltd.
-- @author Ashok Sidipotu <ashok.sidipotu@collabora.com>
--
-- SPDX-License-Identifier: MIT
cutils = require ("common-utils")
log = Log.open_topic ("s-monitors-libcamera")
config = {}
config.properties = Conf.get_section_as_properties ("monitor.libcamera.properties")
function createCamDevice (parent, id, type, factory, properties)
source = source or Plugin.find ("standard-event-source")
local e = source:call ("create-event", "create-libcamera-device", parent, nil)
e:set_data ("device-properties", properties)
e:set_data ("factory", factory)
e:set_data ("device-sub-id", id)
EventDispatcher.push_event (e)
end
monitor = SpaDevice ("api.libcamera.enum.manager", config.properties)
if monitor then
monitor:connect ("create-object", createCamDevice)
monitor:activate (Feature.SpaDevice.ENABLED)
else
log:notice ("PipeWire's libcamera SPA plugin is missing or broken. " ..
"Some camera types may not be supported.")
end

View File

@@ -0,0 +1,49 @@
-- WirePlumber
--
-- Copyright © 2023 Collabora Ltd.
-- @author Ashok Sidipotu <ashok.sidipotu@collabora.com>
--
-- SPDX-License-Identifier: MIT
mutils = require ("monitor-utils")
log = Log.open_topic ("s-monitors-libcamera")
SimpleEventHook {
name = "monitor/libcamera/name-device",
interests = {
EventInterest {
Constraint { "event.type", "=", "create-libcamera-device" },
},
},
execute = function(event)
local parent = event:get_subject ()
local properties = event:get_data ("device-properties")
local id = event:get_data ("device-sub-id")
local name = "libcamera_device." ..
(properties["device.name"] or
properties["device.bus-id"] or
properties["device.bus-path"] or
tostring (id)):gsub ("([^%w_%-%.])", "_")
properties["device.name"] = name
-- deduplicate devices with the same name
for counter = 2, 99, 1 do
if mutils.find_duplicate (parent, id, "device.name", properties["node.name"]) then
properties["device.name"] = name .. "." .. counter
else
break
end
end
-- ensure the device has a description
properties["device.description"] =
properties["device.description"]
or properties["device.product.name"]
or "Unknown device"
event:set_data ("device-properties", properties)
end
}:register ()

View File

@@ -0,0 +1,90 @@
-- WirePlumber
--
-- Copyright © 2023 Collabora Ltd.
-- @author Ashok Sidipotu <ashok.sidipotu@collabora.com>
--
-- SPDX-License-Identifier: MIT
mutils = require ("monitor-utils")
log = Log.open_topic ("s-monitors-libcamera")
SimpleEventHook {
name = "monitor/libcamera/name-node",
interests = {
EventInterest {
Constraint { "event.type", "=", "create-libcamera-device-node" },
},
},
execute = function(event)
local properties = event:get_data ("node-properties")
local parent = event:get_subject ()
local dev_props = parent.properties
local factory = event:get_data ("factory")
local id = event:get_data ("node-sub-id")
local location = properties ["api.libcamera.location"]
-- set the device id and spa factory name; REQUIRED, do not change
properties ["device.id"] = parent ["bound-id"]
properties ["factory.name"] = factory
-- set the default pause-on-idle setting
properties ["node.pause-on-idle"] = false
-- set the node name
local name =
(factory:find ("sink") and "libcamera_output") or
(factory:find ("source") and "libcamera_input" or factory)
.. "." ..
(dev_props ["device.name"]:gsub ("^libcamera_device%.(.+)", "%1") or
dev_props ["device.name"] or
dev_props ["device.nick"] or
dev_props ["device.alias"] or
"libcamera-device")
-- sanitize name
name = name:gsub ("([^%w_%-%.])", "_")
properties ["node.name"] = name
-- deduplicate nodes with the same name
for counter = 2, 99, 1 do
if mutils.find_duplicate (parent, id, "node.name", properties ["node.name"]) then
properties ["node.name"] = name .. "." .. counter
else
break
end
end
-- set the node description
local desc = dev_props ["device.description"] or "libcamera-device"
if location == "front" then
desc = I18n.gettext ("Built-in Front Camera")
elseif location == "back" then
desc = I18n.gettext ("Built-in Back Camera")
end
-- sanitize description, replace ':' with ' '
properties ["node.description"] = desc:gsub ("(:)", " ")
-- set the node nick
local nick = properties ["node.nick"] or
dev_props ["device.product.name"] or
dev_props ["device.description"] or
dev_props ["device.nick"]
properties ["node.nick"] = nick:gsub ("(:)", " ")
-- set priority
if not properties ["priority.session"] then
local priority = 700
if location == "external" then
priority = priority + 150
elseif location == "front" then
priority = priority + 100
elseif location == "back" then
priority = priority + 50
end
properties ["priority.session"] = priority
end
event:set_data ("node-properties", properties)
end
}:register ()