pipewire 1.3.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -9
- package/dist/bindings/context.d.ts +20 -0
- package/dist/bindings/context.d.ts.map +1 -0
- package/dist/bindings/context.js +12 -0
- package/dist/bindings/context.js.map +1 -0
- package/dist/bindings/core.d.ts +34 -0
- package/dist/bindings/core.d.ts.map +1 -0
- package/dist/bindings/core.js +36 -0
- package/dist/bindings/core.js.map +1 -0
- package/dist/bindings/dict.d.ts +3 -0
- package/dist/bindings/dict.d.ts.map +1 -0
- package/dist/bindings/dict.js +11 -0
- package/dist/bindings/dict.js.map +1 -0
- package/dist/bindings/hook.d.ts +3 -0
- package/dist/bindings/hook.d.ts.map +1 -0
- package/dist/bindings/hook.js +14 -0
- package/dist/bindings/hook.js.map +1 -0
- package/dist/bindings/index.d.ts +32 -0
- package/dist/bindings/index.d.ts.map +1 -0
- package/dist/bindings/index.js +16 -0
- package/dist/bindings/index.js.map +1 -0
- package/dist/bindings/list.d.ts +2 -0
- package/dist/bindings/list.d.ts.map +1 -0
- package/dist/bindings/list.js +7 -0
- package/dist/bindings/list.js.map +1 -0
- package/dist/bindings/loop.d.ts +33 -0
- package/dist/bindings/loop.d.ts.map +1 -0
- package/dist/bindings/loop.js +17 -0
- package/dist/bindings/loop.js.map +1 -0
- package/dist/bindings/main-loop.d.ts +47 -0
- package/dist/bindings/main-loop.d.ts.map +1 -0
- package/dist/bindings/main-loop.js +15 -0
- package/dist/bindings/main-loop.js.map +1 -0
- package/dist/bindings/node.d.ts +50 -0
- package/dist/bindings/node.d.ts.map +1 -0
- package/dist/bindings/node.js +81 -0
- package/dist/bindings/node.js.map +1 -0
- package/dist/bindings/param.d.ts +25 -0
- package/dist/bindings/param.d.ts.map +1 -0
- package/dist/bindings/param.js +33 -0
- package/dist/bindings/param.js.map +1 -0
- package/dist/bindings/pipewire.d.ts +19 -0
- package/dist/bindings/pipewire.d.ts.map +1 -0
- package/dist/bindings/pipewire.js +5 -0
- package/dist/bindings/pipewire.js.map +1 -0
- package/dist/bindings/pod.d.ts +2 -0
- package/dist/bindings/pod.d.ts.map +1 -0
- package/dist/bindings/pod.js +6 -0
- package/dist/bindings/pod.js.map +1 -0
- package/dist/bindings/properties.d.ts +2 -0
- package/dist/bindings/properties.d.ts.map +1 -0
- package/dist/bindings/properties.js +3 -0
- package/dist/bindings/properties.js.map +1 -0
- package/dist/bindings/props.d.ts +59 -0
- package/dist/bindings/props.d.ts.map +1 -0
- package/dist/bindings/props.js +59 -0
- package/dist/bindings/props.js.map +1 -0
- package/dist/bindings/proxy.d.ts +11 -0
- package/dist/bindings/proxy.d.ts.map +1 -0
- package/dist/bindings/proxy.js +5 -0
- package/dist/bindings/proxy.js.map +1 -0
- package/dist/bindings/registry.d.ts +20 -0
- package/dist/bindings/registry.d.ts.map +1 -0
- package/dist/bindings/registry.js +19 -0
- package/dist/bindings/registry.js.map +1 -0
- package/dist/bindings/thread-loop.d.ts +65 -0
- package/dist/bindings/thread-loop.d.ts.map +1 -0
- package/dist/bindings/thread-loop.js +18 -0
- package/dist/bindings/thread-loop.js.map +1 -0
- package/dist/index.d.ts +5 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -13
- package/dist/index.js.map +1 -1
- package/dist/loop.d.ts +27 -0
- package/dist/loop.d.ts.map +1 -1
- package/dist/loop.js +4 -0
- package/dist/loop.js.map +1 -1
- package/dist/node.d.ts +53 -39
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +104 -69
- package/dist/node.js.map +1 -1
- package/dist/object.d.ts +18 -0
- package/dist/object.d.ts.map +1 -0
- package/dist/object.js +22 -0
- package/dist/object.js.map +1 -0
- package/dist/pipewire.d.ts +50 -15
- package/dist/pipewire.d.ts.map +1 -1
- package/dist/pipewire.js +94 -3
- package/dist/pipewire.js.map +1 -1
- package/dist/thread-loop.d.ts +65 -0
- package/dist/thread-loop.d.ts.map +1 -0
- package/dist/thread-loop.js +18 -0
- package/dist/thread-loop.js.map +1 -0
- package/examples/basic.ts +20 -0
- package/examples/{event-registry.ts → event-registry-async.ts} +13 -6
- package/examples/event-registry-sync.ts +60 -0
- package/examples/node-events.ts +34 -0
- package/package.json +1 -1
- package/src/{core.ts → bindings/core.ts} +8 -6
- package/src/bindings/index.ts +16 -0
- package/src/{loop.ts → bindings/loop.ts} +6 -0
- package/src/bindings/node.ts +92 -0
- package/src/bindings/param.ts +33 -0
- package/src/bindings/pipewire.ts +6 -0
- package/src/{registry.ts → bindings/registry.ts} +2 -0
- package/src/bindings/thread-loop.ts +23 -0
- package/src/index.ts +5 -13
- package/src/node.ts +167 -79
- package/src/object.ts +36 -0
- package/src/pipewire.ts +154 -3
- package/src/param.ts +0 -33
- /package/src/{context.ts → bindings/context.ts} +0 -0
- /package/src/{dict.ts → bindings/dict.ts} +0 -0
- /package/src/{hook.ts → bindings/hook.ts} +0 -0
- /package/src/{list.ts → bindings/list.ts} +0 -0
- /package/src/{main-loop.ts → bindings/main-loop.ts} +0 -0
- /package/src/{pod.ts → bindings/pod.ts} +0 -0
- /package/src/{properties.ts → bindings/properties.ts} +0 -0
- /package/src/{props.ts → bindings/props.ts} +0 -0
- /package/src/{proxy.ts → bindings/proxy.ts} +0 -0
package/dist/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
|
package/dist/node.js
CHANGED
|
@@ -1,71 +1,106 @@
|
|
|
1
1
|
import koffi from "koffi";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
]
|
|
2
|
+
import PipewireObject from "./object.js";
|
|
3
|
+
import pw from "./bindings/index.js";
|
|
4
|
+
export default class PipewireNode extends PipewireObject {
|
|
5
|
+
static pw_node_state = pw.node.pw_node_state_enum;
|
|
6
|
+
static spa_param_type = pw.param.spa_param_type;
|
|
7
|
+
nodeName;
|
|
8
|
+
factoryId;
|
|
9
|
+
nodeProxy = null;
|
|
10
|
+
nodeListener = null;
|
|
11
|
+
nodeEvents = null;
|
|
12
|
+
nodeEventInfoRegister = null;
|
|
13
|
+
nodeEventParamRegister = null;
|
|
14
|
+
constructor(pipewire, id, permissions, type, version, props) {
|
|
15
|
+
super(pipewire, id, permissions, type, version, props);
|
|
16
|
+
this.nodeName = props["node.name"];
|
|
17
|
+
this.factoryId = Number(props["factory.id"]);
|
|
18
|
+
}
|
|
19
|
+
attachListener() {
|
|
20
|
+
if (this.removed)
|
|
21
|
+
return;
|
|
22
|
+
if (this.nodeProxy)
|
|
23
|
+
throw new Error(`Listener already attached to node ${this.id}`);
|
|
24
|
+
this.nodeProxy = pw.registry.pw_registry_bind(this.pipewire.registry, this.id, this.type, pw.node.PW_VERSION_NODE, 0);
|
|
25
|
+
this.nodeListener = Buffer.alloc(koffi.sizeof(pw.hook.spa_hook));
|
|
26
|
+
this.nodeEvents = Buffer.alloc(koffi.sizeof(pw.node.pw_node_events));
|
|
27
|
+
this.nodeEventInfoRegister = koffi.register(this.nodeEventInfo.bind(this), koffi.pointer(pw.node.pw_node_events_info));
|
|
28
|
+
this.nodeEventParamRegister = koffi.register(this.nodeEventParam.bind(this), koffi.pointer(pw.node.pw_node_events_param));
|
|
29
|
+
koffi.encode(this.nodeEvents, pw.node.pw_node_events, {
|
|
30
|
+
version: pw.node.PW_VERSION_NODE_EVENTS,
|
|
31
|
+
info: this.nodeEventInfoRegister,
|
|
32
|
+
param: this.nodeEventParamRegister
|
|
33
|
+
});
|
|
34
|
+
pw.node.pw_node_add_listener(this.nodeProxy, this.nodeListener, this.nodeEvents, null);
|
|
35
|
+
}
|
|
36
|
+
detachListener() {
|
|
37
|
+
if (!this.nodeProxy)
|
|
38
|
+
throw new Error(`Listener not attached to node ${this.id}`);
|
|
39
|
+
if (!this.removed)
|
|
40
|
+
pw.proxy.pw_proxy_destroy(this.nodeProxy);
|
|
41
|
+
koffi.unregister(this.nodeEventParamRegister);
|
|
42
|
+
koffi.unregister(this.nodeEventInfoRegister);
|
|
43
|
+
this.nodeEventInfoRegister = null;
|
|
44
|
+
this.nodeEventParamRegister = null;
|
|
45
|
+
this.nodeEvents = null;
|
|
46
|
+
this.nodeListener = null;
|
|
47
|
+
this.nodeProxy = null;
|
|
48
|
+
}
|
|
49
|
+
subscribeParams(params) {
|
|
50
|
+
if (this.removed)
|
|
51
|
+
return;
|
|
52
|
+
if (!this.nodeProxy)
|
|
53
|
+
throw new Error(`Listener not attached to node ${this.id}`);
|
|
54
|
+
pw.node.pw_node_subscribe_params(this.nodeProxy, params, params.length);
|
|
55
|
+
}
|
|
56
|
+
nodeEventInfo(_data, info) {
|
|
57
|
+
this.emit("rawNodeInfo", info);
|
|
58
|
+
const nodeInfo = koffi.decode(info, pw.node.pw_node_info);
|
|
59
|
+
const changesMasks = Object.keys(pw.node.PW_NODE_CHANGE_MASK);
|
|
60
|
+
const changes = changesMasks.filter((key) => nodeInfo.change_mask & pw.node.PW_NODE_CHANGE_MASK[key]);
|
|
61
|
+
const props = koffi.decode(nodeInfo.props, pw.dict.spa_dict);
|
|
62
|
+
if (changes.includes("PROPS") !== !!props.items)
|
|
63
|
+
throw new Error(`Node ${this.id} props change mismatch`);
|
|
64
|
+
const propsObj = changes.includes("PROPS") ? {} : null;
|
|
65
|
+
if (propsObj) {
|
|
66
|
+
const propsArray = koffi.decode(props.items, pw.dict.spa_dict_item, props.n_items);
|
|
67
|
+
for (const item of propsArray)
|
|
68
|
+
propsObj[item.key] = item.value;
|
|
69
|
+
}
|
|
70
|
+
const paramsObj = [];
|
|
71
|
+
if (nodeInfo.params) {
|
|
72
|
+
const params = koffi.decode(nodeInfo.params, pw.param.spa_param_info, nodeInfo.n_params);
|
|
73
|
+
for (const param of params)
|
|
74
|
+
paramsObj.push(param.id);
|
|
75
|
+
}
|
|
76
|
+
const nodeInfoObj = {
|
|
77
|
+
id: nodeInfo.id,
|
|
78
|
+
maxInputPorts: nodeInfo.max_input_ports,
|
|
79
|
+
maxOutputPorts: nodeInfo.max_output_ports,
|
|
80
|
+
changes: changes,
|
|
81
|
+
inputPortsCount: nodeInfo.n_input_ports,
|
|
82
|
+
outputPortsCount: nodeInfo.n_output_ports,
|
|
83
|
+
state: nodeInfo.state,
|
|
84
|
+
error: nodeInfo.error ? koffi.decode(nodeInfo.error, "string") : null,
|
|
85
|
+
props: propsObj,
|
|
86
|
+
params: paramsObj
|
|
87
|
+
};
|
|
88
|
+
this.emit("nodeInfo", nodeInfoObj);
|
|
89
|
+
}
|
|
90
|
+
nodeEventParam(_data, info) {
|
|
91
|
+
this.emit("rawNodeParam", info);
|
|
92
|
+
}
|
|
93
|
+
on(event, listener) {
|
|
94
|
+
return super.on(event, listener);
|
|
95
|
+
}
|
|
96
|
+
once(event, listener) {
|
|
97
|
+
return super.once(event, listener);
|
|
98
|
+
}
|
|
99
|
+
off(event, listener) {
|
|
100
|
+
return super.off(event, listener);
|
|
101
|
+
}
|
|
102
|
+
emit(event, ...args) {
|
|
103
|
+
return super.emit(event, ...args);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
71
106
|
//# sourceMappingURL=node.js.map
|
package/dist/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
|
package/dist/object.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import EventEmitter from "node:events";
|
|
2
|
+
import type Pipewire from "./pipewire.js";
|
|
3
|
+
export default class PipewireObject extends EventEmitter {
|
|
4
|
+
pipewire: Pipewire;
|
|
5
|
+
removed: boolean;
|
|
6
|
+
id: number;
|
|
7
|
+
permissions: number;
|
|
8
|
+
type: string;
|
|
9
|
+
version: number;
|
|
10
|
+
props: {
|
|
11
|
+
[key: string]: string;
|
|
12
|
+
};
|
|
13
|
+
objectSerial: number;
|
|
14
|
+
constructor(pipewire: Pipewire, id: number, permissions: number, type: string, version: number, props: {
|
|
15
|
+
[key: string]: string;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../src/object.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,YAAY;IACpD,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,OAAO,CAAS;IAEzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAEjC,YAAY,EAAE,MAAM,CAAC;IAErB,YACI,QAAQ,EAAE,QAAQ,EAClB,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAanC;CACJ"}
|
package/dist/object.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import EventEmitter from "node:events";
|
|
2
|
+
export default class PipewireObject extends EventEmitter {
|
|
3
|
+
pipewire;
|
|
4
|
+
removed = false;
|
|
5
|
+
id;
|
|
6
|
+
permissions;
|
|
7
|
+
type;
|
|
8
|
+
version;
|
|
9
|
+
props;
|
|
10
|
+
objectSerial;
|
|
11
|
+
constructor(pipewire, id, permissions, type, version, props) {
|
|
12
|
+
super();
|
|
13
|
+
this.pipewire = pipewire;
|
|
14
|
+
this.id = id;
|
|
15
|
+
this.permissions = permissions;
|
|
16
|
+
this.type = type;
|
|
17
|
+
this.version = version;
|
|
18
|
+
this.props = props;
|
|
19
|
+
this.objectSerial = Number(props["object.serial"]);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object.js","sourceRoot":"","sources":["../src/object.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAC;AAGvC,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,YAAY;IACpD,QAAQ,CAAW;IACnB,OAAO,GAAY,KAAK,CAAC;IAEzB,EAAE,CAAS;IACX,WAAW,CAAS;IACpB,IAAI,CAAS;IACb,OAAO,CAAS;IAChB,KAAK,CAA4B;IAEjC,YAAY,CAAS;IAErB,YACI,QAAkB,EAClB,EAAU,EACV,WAAmB,EACnB,IAAY,EACZ,OAAe,EACf,KAAgC;QAEhC,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IACvD,CAAC;CACJ"}
|
package/dist/pipewire.d.ts
CHANGED
|
@@ -1,19 +1,54 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import EventEmitter from "node:events";
|
|
2
|
+
import PipewireObject from "./object.js";
|
|
3
|
+
export default class Pipewire extends EventEmitter {
|
|
4
|
+
mainLoop: unknown;
|
|
5
|
+
loop: unknown;
|
|
6
|
+
context: unknown;
|
|
7
|
+
core: unknown;
|
|
8
|
+
registry: unknown;
|
|
9
|
+
registry_listener: Buffer;
|
|
10
|
+
registryEvents: Buffer;
|
|
11
|
+
registryEventGlobalRegister: bigint;
|
|
12
|
+
registryEventGlobalRemoveRegister: bigint;
|
|
13
|
+
loopInterval: NodeJS.Timeout | null;
|
|
14
|
+
objects: {
|
|
15
|
+
[id: number]: PipewireObject;
|
|
8
16
|
};
|
|
17
|
+
constructor();
|
|
18
|
+
registryEventGlobal(_data: unknown, id: number, permissions: number, type: string, version: number, props: unknown): void;
|
|
19
|
+
registryEventGlobalRemove(_data: unknown, id: number): void;
|
|
20
|
+
startLoop(pollInterval?: number, pollTimeout?: number): void;
|
|
21
|
+
stopLoop(): void;
|
|
22
|
+
on(event: "objectAdded", listener: (object: PipewireObject) => void): this;
|
|
23
|
+
on(event: "objectRemoved", listener: (object: PipewireObject) => void): this;
|
|
24
|
+
on(event: "rawObjectAdded", listener: (data: RawObjectAdded) => void): this;
|
|
25
|
+
on(event: "rawObjectRemoved", listener: (data: RawObjectRemoved) => void): this;
|
|
26
|
+
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
|
27
|
+
once(event: "objectAdded", listener: (object: PipewireObject) => void): this;
|
|
28
|
+
once(event: "objectRemoved", listener: (object: PipewireObject) => void): this;
|
|
29
|
+
once(event: "rawObjectAdded", listener: (data: RawObjectAdded) => void): this;
|
|
30
|
+
once(event: "rawObjectRemoved", listener: (data: RawObjectRemoved) => void): this;
|
|
31
|
+
once(event: string | symbol, listener: (...args: any[]) => void): this;
|
|
32
|
+
off(event: "objectAdded", listener: (object: PipewireObject) => void): this;
|
|
33
|
+
off(event: "objectRemoved", listener: (object: PipewireObject) => void): this;
|
|
34
|
+
off(event: "rawObjectAdded", listener: (data: RawObjectAdded) => void): this;
|
|
35
|
+
off(event: "rawObjectRemoved", listener: (data: RawObjectRemoved) => void): this;
|
|
36
|
+
off(event: string | symbol, listener: (...args: any[]) => void): this;
|
|
37
|
+
emit(event: "objectAdded", object: PipewireObject): boolean;
|
|
38
|
+
emit(event: "objectRemoved", object: PipewireObject): boolean;
|
|
39
|
+
emit(event: "rawObjectAdded", data: RawObjectAdded): boolean;
|
|
40
|
+
emit(event: "rawObjectRemoved", data: RawObjectRemoved): boolean;
|
|
41
|
+
emit(event: string | symbol, ...args: any[]): boolean;
|
|
42
|
+
deinit(): void;
|
|
43
|
+
}
|
|
44
|
+
export type RawObjectAdded = {
|
|
45
|
+
id: number;
|
|
46
|
+
permissions: number;
|
|
47
|
+
type: string;
|
|
48
|
+
version: number;
|
|
49
|
+
props: unknown;
|
|
9
50
|
};
|
|
10
|
-
export
|
|
11
|
-
|
|
12
|
-
async: (...args: any[]) => any;
|
|
13
|
-
info: {
|
|
14
|
-
name: string;
|
|
15
|
-
arguments: import("koffi").TypeObject[];
|
|
16
|
-
result: import("koffi").TypeObject;
|
|
17
|
-
};
|
|
51
|
+
export type RawObjectRemoved = {
|
|
52
|
+
id: number;
|
|
18
53
|
};
|
|
19
54
|
//# sourceMappingURL=pipewire.d.ts.map
|
package/dist/pipewire.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipewire.d.ts","sourceRoot":"","sources":["../src/pipewire.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pipewire.d.ts","sourceRoot":"","sources":["../src/pipewire.ts"],"names":[],"mappings":"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"}
|
package/dist/pipewire.js
CHANGED
|
@@ -1,5 +1,96 @@
|
|
|
1
|
+
import EventEmitter from "node:events";
|
|
1
2
|
import koffi from "koffi";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
import pw from "./bindings/index.js";
|
|
4
|
+
import PipewireObject from "./object.js";
|
|
5
|
+
import PipewireNode from "./node.js";
|
|
6
|
+
export default class Pipewire extends EventEmitter {
|
|
7
|
+
mainLoop;
|
|
8
|
+
loop;
|
|
9
|
+
context;
|
|
10
|
+
core;
|
|
11
|
+
registry;
|
|
12
|
+
registry_listener;
|
|
13
|
+
registryEvents;
|
|
14
|
+
registryEventGlobalRegister;
|
|
15
|
+
registryEventGlobalRemoveRegister;
|
|
16
|
+
loopInterval = null;
|
|
17
|
+
objects = {};
|
|
18
|
+
constructor() {
|
|
19
|
+
super();
|
|
20
|
+
pw.pipewire.pw_init(0, null);
|
|
21
|
+
this.mainLoop = pw.main_loop.pw_main_loop_new(null);
|
|
22
|
+
this.loop = pw.main_loop.pw_main_loop_get_loop(this.mainLoop);
|
|
23
|
+
this.context = pw.context.pw_context_new(this.loop, null, 0);
|
|
24
|
+
this.core = pw.core.pw_context_connect(this.context, null, 0);
|
|
25
|
+
this.registry = pw.core.pw_core_get_registry(this.core, pw.core.PW_VERSION_REGISTRY, 0);
|
|
26
|
+
this.registry_listener = Buffer.alloc(koffi.sizeof(pw.hook.spa_hook));
|
|
27
|
+
this.registryEvents = Buffer.alloc(koffi.sizeof(pw.core.pw_registry_events));
|
|
28
|
+
this.registryEventGlobalRegister = koffi.register(this.registryEventGlobal.bind(this), koffi.pointer(pw.core.pw_registry_events_global));
|
|
29
|
+
this.registryEventGlobalRemoveRegister = koffi.register(this.registryEventGlobalRemove.bind(this), koffi.pointer(pw.core.pw_registry_events_global_remove));
|
|
30
|
+
koffi.encode(this.registryEvents, pw.core.pw_registry_events, {
|
|
31
|
+
version: pw.registry.PW_VERSION_REGISTRY_EVENTS,
|
|
32
|
+
global: this.registryEventGlobalRegister,
|
|
33
|
+
global_remove: this.registryEventGlobalRemoveRegister
|
|
34
|
+
});
|
|
35
|
+
pw.registry.pw_registry_add_listener(this.registry, this.registry_listener, this.registryEvents, null);
|
|
36
|
+
}
|
|
37
|
+
registryEventGlobal(_data, id, permissions, type, version, props) {
|
|
38
|
+
this.emit("rawObjectAdded", { id, permissions, type, version, props });
|
|
39
|
+
if (this.objects[id])
|
|
40
|
+
throw new Error(`Object with id ${id} already exists`);
|
|
41
|
+
const propsDict = koffi.decode(props, pw.dict.spa_dict);
|
|
42
|
+
const propsArray = koffi.decode(propsDict.items, pw.dict.spa_dict_item, propsDict.n_items);
|
|
43
|
+
const propsObj = {};
|
|
44
|
+
for (const item of propsArray)
|
|
45
|
+
propsObj[item.key] = item.value;
|
|
46
|
+
if (type === "PipeWire:Interface:Node")
|
|
47
|
+
this.objects[id] = new PipewireNode(this, id, permissions, type, version, propsObj);
|
|
48
|
+
else
|
|
49
|
+
this.objects[id] = new PipewireObject(this, id, permissions, type, version, propsObj);
|
|
50
|
+
this.emit("objectAdded", this.objects[id]);
|
|
51
|
+
}
|
|
52
|
+
registryEventGlobalRemove(_data, id) {
|
|
53
|
+
this.emit("rawObjectRemoved", { id });
|
|
54
|
+
if (!this.objects[id])
|
|
55
|
+
throw new Error(`Object with id ${id} does not exist`);
|
|
56
|
+
this.objects[id].removed = true;
|
|
57
|
+
if (this.objects[id] instanceof PipewireNode && this.objects[id].nodeProxy)
|
|
58
|
+
this.objects[id].detachListener();
|
|
59
|
+
this.emit("objectRemoved", this.objects[id]);
|
|
60
|
+
delete this.objects[id];
|
|
61
|
+
}
|
|
62
|
+
startLoop(pollInterval = 10, pollTimeout = 1) {
|
|
63
|
+
if (this.loopInterval)
|
|
64
|
+
throw new Error("Loop already started");
|
|
65
|
+
pw.loop.pw_loop_enter(this.loop);
|
|
66
|
+
this.loopInterval = setInterval(() => pw.loop.pw_loop_iterate(this.loop, pollTimeout), pollInterval);
|
|
67
|
+
}
|
|
68
|
+
stopLoop() {
|
|
69
|
+
if (!this.loopInterval)
|
|
70
|
+
throw new Error("Loop not started");
|
|
71
|
+
clearInterval(this.loopInterval);
|
|
72
|
+
this.loopInterval = null;
|
|
73
|
+
pw.loop.pw_loop_leave(this.loop);
|
|
74
|
+
}
|
|
75
|
+
on(event, listener) {
|
|
76
|
+
return super.on(event, listener);
|
|
77
|
+
}
|
|
78
|
+
once(event, listener) {
|
|
79
|
+
return super.once(event, listener);
|
|
80
|
+
}
|
|
81
|
+
off(event, listener) {
|
|
82
|
+
return super.off(event, listener);
|
|
83
|
+
}
|
|
84
|
+
emit(event, ...args) {
|
|
85
|
+
return super.emit(event, ...args);
|
|
86
|
+
}
|
|
87
|
+
deinit() {
|
|
88
|
+
pw.proxy.pw_proxy_destroy(this.registry);
|
|
89
|
+
koffi.unregister(this.registryEventGlobalRegister);
|
|
90
|
+
koffi.unregister(this.registryEventGlobalRemoveRegister);
|
|
91
|
+
pw.core.pw_core_disconnect(this.core);
|
|
92
|
+
pw.context.pw_context_destroy(this.context);
|
|
93
|
+
pw.main_loop.pw_main_loop_destroy(this.mainLoop);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
5
96
|
//# sourceMappingURL=pipewire.js.map
|
package/dist/pipewire.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipewire.js","sourceRoot":"","sources":["../src/pipewire.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"pipewire.js","sourceRoot":"","sources":["../src/pipewire.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export declare const pw_thread_loop: import("koffi").TypeObject;
|
|
2
|
+
export declare const pw_thread_loop_new: {
|
|
3
|
+
(...args: any[]): any;
|
|
4
|
+
async: (...args: any[]) => any;
|
|
5
|
+
info: {
|
|
6
|
+
name: string;
|
|
7
|
+
arguments: import("koffi").TypeObject[];
|
|
8
|
+
result: import("koffi").TypeObject;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export declare const pw_thread_loop_destroy: {
|
|
12
|
+
(...args: any[]): any;
|
|
13
|
+
async: (...args: any[]) => any;
|
|
14
|
+
info: {
|
|
15
|
+
name: string;
|
|
16
|
+
arguments: import("koffi").TypeObject[];
|
|
17
|
+
result: import("koffi").TypeObject;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export declare const pw_thread_loop_get_loop: {
|
|
21
|
+
(...args: any[]): any;
|
|
22
|
+
async: (...args: any[]) => any;
|
|
23
|
+
info: {
|
|
24
|
+
name: string;
|
|
25
|
+
arguments: import("koffi").TypeObject[];
|
|
26
|
+
result: import("koffi").TypeObject;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
export declare const pw_thread_loop_lock: {
|
|
30
|
+
(...args: any[]): any;
|
|
31
|
+
async: (...args: any[]) => any;
|
|
32
|
+
info: {
|
|
33
|
+
name: string;
|
|
34
|
+
arguments: import("koffi").TypeObject[];
|
|
35
|
+
result: import("koffi").TypeObject;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
export declare const pw_thread_loop_unlock: {
|
|
39
|
+
(...args: any[]): any;
|
|
40
|
+
async: (...args: any[]) => any;
|
|
41
|
+
info: {
|
|
42
|
+
name: string;
|
|
43
|
+
arguments: import("koffi").TypeObject[];
|
|
44
|
+
result: import("koffi").TypeObject;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
export declare const pw_thread_loop_start: {
|
|
48
|
+
(...args: any[]): any;
|
|
49
|
+
async: (...args: any[]) => any;
|
|
50
|
+
info: {
|
|
51
|
+
name: string;
|
|
52
|
+
arguments: import("koffi").TypeObject[];
|
|
53
|
+
result: import("koffi").TypeObject;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
export declare const pw_thread_loop_stop: {
|
|
57
|
+
(...args: any[]): any;
|
|
58
|
+
async: (...args: any[]) => any;
|
|
59
|
+
info: {
|
|
60
|
+
name: string;
|
|
61
|
+
arguments: import("koffi").TypeObject[];
|
|
62
|
+
result: import("koffi").TypeObject;
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=thread-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-loop.d.ts","sourceRoot":"","sources":["../src/thread-loop.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,cAAc,4BAAiC,CAAC;AAE7D,eAAO,MAAM,kBAAkB;;;;;;;;CAG7B,CAAC;AACH,eAAO,MAAM,sBAAsB;;;;;;;;CAAmF,CAAC;AAEvH,eAAO,MAAM,uBAAuB;;;;;;;;CAElC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;CAAgF,CAAC;AACjH,eAAO,MAAM,qBAAqB;;;;;;;;CAAkF,CAAC;AAErH,eAAO,MAAM,oBAAoB;;;;;;;;CAAgF,CAAC;AAClH,eAAO,MAAM,mBAAmB;;;;;;;;CAAgF,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import koffi from "koffi";
|
|
2
|
+
import { spa_dict } from "./dict.js";
|
|
3
|
+
import { pw_loop } from "./loop.js";
|
|
4
|
+
const pipewire = koffi.load("libpipewire-0.3.so.0");
|
|
5
|
+
export const pw_thread_loop = koffi.opaque("pw_thread_loop");
|
|
6
|
+
export const pw_thread_loop_new = pipewire.func("pw_thread_loop_new", koffi.pointer(pw_thread_loop), [
|
|
7
|
+
"const char*", // name
|
|
8
|
+
koffi.pointer(spa_dict) // props
|
|
9
|
+
]);
|
|
10
|
+
export const pw_thread_loop_destroy = pipewire.func("pw_thread_loop_destroy", "void", [koffi.pointer(pw_thread_loop)]);
|
|
11
|
+
export const pw_thread_loop_get_loop = pipewire.func("pw_thread_loop_get_loop", koffi.pointer(pw_loop), [
|
|
12
|
+
koffi.pointer(pw_thread_loop)
|
|
13
|
+
]);
|
|
14
|
+
export const pw_thread_loop_lock = pipewire.func("pw_thread_loop_lock", "void", [koffi.pointer(pw_thread_loop)]);
|
|
15
|
+
export const pw_thread_loop_unlock = pipewire.func("pw_thread_loop_unlock", "void", [koffi.pointer(pw_thread_loop)]);
|
|
16
|
+
export const pw_thread_loop_start = pipewire.func("pw_thread_loop_start", "int", [koffi.pointer(pw_thread_loop)]);
|
|
17
|
+
export const pw_thread_loop_stop = pipewire.func("pw_thread_loop_stop", "void", [koffi.pointer(pw_thread_loop)]);
|
|
18
|
+
//# sourceMappingURL=thread-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-loop.js","sourceRoot":"","sources":["../src/thread-loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAE7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;IACjG,aAAa,EAAE,OAAO;IACtB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ;CACnC,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC,IAAI,CAAC,wBAAwB,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAEvH,MAAM,CAAC,MAAM,uBAAuB,GAAG,QAAQ,CAAC,IAAI,CAAC,yBAAyB,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;IACpG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;CAChC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACjH,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,uBAAuB,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAErH,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAClH,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Pipewire } from "../src/index.js";
|
|
2
|
+
|
|
3
|
+
const pipewire = new Pipewire();
|
|
4
|
+
|
|
5
|
+
pipewire.on("objectAdded", (obj) => {
|
|
6
|
+
console.log(`New object: id: ${obj.id} type: ${obj.type} version: ${obj.version}`);
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
pipewire.on("objectRemoved", (obj) => {
|
|
10
|
+
console.log(`Removed object: id: ${obj.id}`);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
console.log("Starting PipeWire main loop...");
|
|
14
|
+
pipewire.startLoop();
|
|
15
|
+
|
|
16
|
+
process.on("SIGINT", () => {
|
|
17
|
+
pipewire.stopLoop();
|
|
18
|
+
pipewire.deinit();
|
|
19
|
+
console.log("PipeWire main loop exited, cleanup done.");
|
|
20
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import koffi from "koffi";
|
|
2
|
-
import
|
|
2
|
+
import { bindings as pw } from "../src/index.js";
|
|
3
3
|
|
|
4
4
|
(async () => {
|
|
5
5
|
pw.pipewire.pw_init(0, null);
|
|
@@ -26,13 +26,18 @@ import * as pw from "../src/index.js";
|
|
|
26
26
|
|
|
27
27
|
const registry_listener = Buffer.alloc(koffi.sizeof(pw.hook.spa_hook));
|
|
28
28
|
const registry_events = Buffer.alloc(koffi.sizeof(pw.core.pw_registry_events));
|
|
29
|
+
const registry_event_global_register = koffi.register(
|
|
30
|
+
registry_event_global,
|
|
31
|
+
koffi.pointer(pw.core.pw_registry_events_global)
|
|
32
|
+
);
|
|
33
|
+
const registry_event_global_remove_register = koffi.register(
|
|
34
|
+
registry_event_global_remove,
|
|
35
|
+
koffi.pointer(pw.core.pw_registry_events_global_remove)
|
|
36
|
+
);
|
|
29
37
|
koffi.encode(registry_events, pw.core.pw_registry_events, {
|
|
30
38
|
version: 0,
|
|
31
|
-
global:
|
|
32
|
-
global_remove:
|
|
33
|
-
registry_event_global_remove,
|
|
34
|
-
koffi.pointer(pw.core.pw_registry_events_global_remove)
|
|
35
|
-
)
|
|
39
|
+
global: registry_event_global_register,
|
|
40
|
+
global_remove: registry_event_global_remove_register
|
|
36
41
|
});
|
|
37
42
|
pw.registry.pw_registry_add_listener(registry, registry_listener, registry_events, null);
|
|
38
43
|
|
|
@@ -41,6 +46,8 @@ import * as pw from "../src/index.js";
|
|
|
41
46
|
await new Promise((resolve) => pw.main_loop.pw_main_loop_run.async(loop, resolve));
|
|
42
47
|
|
|
43
48
|
pw.proxy.pw_proxy_destroy(registry);
|
|
49
|
+
koffi.unregister(registry_event_global_register);
|
|
50
|
+
koffi.unregister(registry_event_global_remove_register);
|
|
44
51
|
pw.core.pw_core_disconnect(core);
|
|
45
52
|
pw.context.pw_context_destroy(context);
|
|
46
53
|
pw.main_loop.pw_main_loop_destroy(loop);
|