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.
Files changed (120) hide show
  1. package/README.md +29 -9
  2. package/dist/bindings/context.d.ts +20 -0
  3. package/dist/bindings/context.d.ts.map +1 -0
  4. package/dist/bindings/context.js +12 -0
  5. package/dist/bindings/context.js.map +1 -0
  6. package/dist/bindings/core.d.ts +34 -0
  7. package/dist/bindings/core.d.ts.map +1 -0
  8. package/dist/bindings/core.js +36 -0
  9. package/dist/bindings/core.js.map +1 -0
  10. package/dist/bindings/dict.d.ts +3 -0
  11. package/dist/bindings/dict.d.ts.map +1 -0
  12. package/dist/bindings/dict.js +11 -0
  13. package/dist/bindings/dict.js.map +1 -0
  14. package/dist/bindings/hook.d.ts +3 -0
  15. package/dist/bindings/hook.d.ts.map +1 -0
  16. package/dist/bindings/hook.js +14 -0
  17. package/dist/bindings/hook.js.map +1 -0
  18. package/dist/bindings/index.d.ts +32 -0
  19. package/dist/bindings/index.d.ts.map +1 -0
  20. package/dist/bindings/index.js +16 -0
  21. package/dist/bindings/index.js.map +1 -0
  22. package/dist/bindings/list.d.ts +2 -0
  23. package/dist/bindings/list.d.ts.map +1 -0
  24. package/dist/bindings/list.js +7 -0
  25. package/dist/bindings/list.js.map +1 -0
  26. package/dist/bindings/loop.d.ts +33 -0
  27. package/dist/bindings/loop.d.ts.map +1 -0
  28. package/dist/bindings/loop.js +17 -0
  29. package/dist/bindings/loop.js.map +1 -0
  30. package/dist/bindings/main-loop.d.ts +47 -0
  31. package/dist/bindings/main-loop.d.ts.map +1 -0
  32. package/dist/bindings/main-loop.js +15 -0
  33. package/dist/bindings/main-loop.js.map +1 -0
  34. package/dist/bindings/node.d.ts +50 -0
  35. package/dist/bindings/node.d.ts.map +1 -0
  36. package/dist/bindings/node.js +81 -0
  37. package/dist/bindings/node.js.map +1 -0
  38. package/dist/bindings/param.d.ts +25 -0
  39. package/dist/bindings/param.d.ts.map +1 -0
  40. package/dist/bindings/param.js +33 -0
  41. package/dist/bindings/param.js.map +1 -0
  42. package/dist/bindings/pipewire.d.ts +19 -0
  43. package/dist/bindings/pipewire.d.ts.map +1 -0
  44. package/dist/bindings/pipewire.js +5 -0
  45. package/dist/bindings/pipewire.js.map +1 -0
  46. package/dist/bindings/pod.d.ts +2 -0
  47. package/dist/bindings/pod.d.ts.map +1 -0
  48. package/dist/bindings/pod.js +6 -0
  49. package/dist/bindings/pod.js.map +1 -0
  50. package/dist/bindings/properties.d.ts +2 -0
  51. package/dist/bindings/properties.d.ts.map +1 -0
  52. package/dist/bindings/properties.js +3 -0
  53. package/dist/bindings/properties.js.map +1 -0
  54. package/dist/bindings/props.d.ts +59 -0
  55. package/dist/bindings/props.d.ts.map +1 -0
  56. package/dist/bindings/props.js +59 -0
  57. package/dist/bindings/props.js.map +1 -0
  58. package/dist/bindings/proxy.d.ts +11 -0
  59. package/dist/bindings/proxy.d.ts.map +1 -0
  60. package/dist/bindings/proxy.js +5 -0
  61. package/dist/bindings/proxy.js.map +1 -0
  62. package/dist/bindings/registry.d.ts +20 -0
  63. package/dist/bindings/registry.d.ts.map +1 -0
  64. package/dist/bindings/registry.js +19 -0
  65. package/dist/bindings/registry.js.map +1 -0
  66. package/dist/bindings/thread-loop.d.ts +65 -0
  67. package/dist/bindings/thread-loop.d.ts.map +1 -0
  68. package/dist/bindings/thread-loop.js +18 -0
  69. package/dist/bindings/thread-loop.js.map +1 -0
  70. package/dist/index.d.ts +5 -13
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +5 -13
  73. package/dist/index.js.map +1 -1
  74. package/dist/loop.d.ts +27 -0
  75. package/dist/loop.d.ts.map +1 -1
  76. package/dist/loop.js +4 -0
  77. package/dist/loop.js.map +1 -1
  78. package/dist/node.d.ts +53 -39
  79. package/dist/node.d.ts.map +1 -1
  80. package/dist/node.js +104 -69
  81. package/dist/node.js.map +1 -1
  82. package/dist/object.d.ts +18 -0
  83. package/dist/object.d.ts.map +1 -0
  84. package/dist/object.js +22 -0
  85. package/dist/object.js.map +1 -0
  86. package/dist/pipewire.d.ts +50 -15
  87. package/dist/pipewire.d.ts.map +1 -1
  88. package/dist/pipewire.js +94 -3
  89. package/dist/pipewire.js.map +1 -1
  90. package/dist/thread-loop.d.ts +65 -0
  91. package/dist/thread-loop.d.ts.map +1 -0
  92. package/dist/thread-loop.js +18 -0
  93. package/dist/thread-loop.js.map +1 -0
  94. package/examples/basic.ts +20 -0
  95. package/examples/{event-registry.ts → event-registry-async.ts} +13 -6
  96. package/examples/event-registry-sync.ts +60 -0
  97. package/examples/node-events.ts +34 -0
  98. package/package.json +1 -1
  99. package/src/{core.ts → bindings/core.ts} +8 -6
  100. package/src/bindings/index.ts +16 -0
  101. package/src/{loop.ts → bindings/loop.ts} +6 -0
  102. package/src/bindings/node.ts +92 -0
  103. package/src/bindings/param.ts +33 -0
  104. package/src/bindings/pipewire.ts +6 -0
  105. package/src/{registry.ts → bindings/registry.ts} +2 -0
  106. package/src/bindings/thread-loop.ts +23 -0
  107. package/src/index.ts +5 -13
  108. package/src/node.ts +167 -79
  109. package/src/object.ts +36 -0
  110. package/src/pipewire.ts +154 -3
  111. package/src/param.ts +0 -33
  112. /package/src/{context.ts → bindings/context.ts} +0 -0
  113. /package/src/{dict.ts → bindings/dict.ts} +0 -0
  114. /package/src/{hook.ts → bindings/hook.ts} +0 -0
  115. /package/src/{list.ts → bindings/list.ts} +0 -0
  116. /package/src/{main-loop.ts → bindings/main-loop.ts} +0 -0
  117. /package/src/{pod.ts → bindings/pod.ts} +0 -0
  118. /package/src/{properties.ts → bindings/properties.ts} +0 -0
  119. /package/src/{props.ts → bindings/props.ts} +0 -0
  120. /package/src/{proxy.ts → bindings/proxy.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,OAAO,4BAA0B,CAAC;AAE/C,eAAO,MAAM,aAAa,4BAMxB,CAAC;AAEH,eAAO,MAAM,mBAAmB;IAC5B,WAAW;IACX,YAAY;IACZ,KAAK;IACL,KAAK;IACL,MAAM;CACT,CAAC;AAEF,eAAO,MAAM,YAAY,4BAYvB,CAAC;AAEH,eAAO,MAAM,mBAAmB,4BAG9B,CAAC;AAEH,eAAO,MAAM,oBAAoB,4BAO/B,CAAC;AAEH,eAAO,MAAM,cAAc,4BAIzB,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;CAK/B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;CAO9B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;CAInC,CAAC"}
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 { spa_hook } from "./hook.js";
3
- import { spa_pod } from "./pod.js";
4
- import { spa_dict } from "./dict.js";
5
- import { spa_param_info } from "./param.js";
6
- const pipewire = koffi.load("libpipewire-0.3.so.0");
7
- export const pw_node = koffi.opaque("pw_node");
8
- export const pw_node_state = koffi.enumeration("pw_node_state", {
9
- PW_NODE_STATE_ERROR: -1,
10
- PW_NODE_STATE_CREATING: 0,
11
- PW_NODE_STATE_SUSPENDED: 1,
12
- PW_NODE_STATE_IDLE: 2,
13
- PW_NODE_STATE_RUNNING: 3
14
- });
15
- export const PW_NODE_CHANGE_MASK = {
16
- INPUT_PORTS: 1 << 0,
17
- OUTPUT_PORTS: 1 << 1,
18
- STATE: 1 << 2,
19
- PROPS: 1 << 3,
20
- PARAMS: 1 << 4
21
- };
22
- export const pw_node_info = koffi.struct("pw_node_info", {
23
- id: "uint32_t",
24
- max_input_ports: "uint32_t",
25
- max_output_ports: "uint32_t",
26
- change_mask: "uint64_t",
27
- n_input_ports: "uint32_t",
28
- n_output_ports: "uint32_t",
29
- state: pw_node_state,
30
- error: "const char*",
31
- props: koffi.pointer(spa_dict),
32
- params: koffi.pointer(spa_param_info),
33
- n_params: "uint32_t"
34
- });
35
- export const pw_node_events_info = koffi.proto("void", [
36
- "void*", // data
37
- koffi.pointer(pw_node_info) // info
38
- ]);
39
- export const pw_node_events_param = koffi.proto("void", [
40
- "void*", // data
41
- "int", // seq
42
- "uint32_t", // id
43
- "uint32_t", // index
44
- "uint32_t", // next
45
- koffi.pointer(spa_pod) // param
46
- ]);
47
- export const pw_node_events = koffi.struct("pw_node_events", {
48
- version: "uint32_t",
49
- info: koffi.pointer(pw_node_events_info),
50
- param: koffi.pointer(pw_node_events_param)
51
- });
52
- export const pw_node_add_listener = pipewire.func("pw_node_add_listener", "int", [
53
- koffi.pointer(pw_node), // object
54
- koffi.pointer(spa_hook), // listener
55
- koffi.pointer(pw_node_events), // events
56
- "void*" // data
57
- ]);
58
- export const pw_node_enum_params = pipewire.func("pw_node_enum_params", "int", [
59
- koffi.pointer(pw_node), // object
60
- "int", // seq
61
- "uint32_t", // id
62
- "uint32_t", // start
63
- "uint32_t", // num
64
- koffi.pointer(spa_pod) // filter
65
- ]);
66
- export const pw_node_subscribe_params = pipewire.func("pw_node_subscribe_params", "int", [
67
- koffi.pointer(pw_node), // object
68
- "uint32_t*", // ids
69
- "uint32_t" // n_ids
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":"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"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -1,19 +1,54 @@
1
- export declare const pw_init: {
2
- (...args: any[]): any;
3
- async: (...args: any[]) => any;
4
- info: {
5
- name: string;
6
- arguments: import("koffi").TypeObject[];
7
- result: import("koffi").TypeObject;
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 declare const pw_deinit: {
11
- (...args: any[]): any;
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
@@ -1 +1 @@
1
- {"version":3,"file":"pipewire.d.ts","sourceRoot":"","sources":["../src/pipewire.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO;;;;;;;;CAAyD,CAAC;AAC9E,eAAO,MAAM,SAAS;;;;;;;;CAAyC,CAAC"}
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
- const pipewire = koffi.load("libpipewire-0.3.so.0");
3
- export const pw_init = pipewire.func("pw_init", "void", ["int**", "char***"]);
4
- export const pw_deinit = pipewire.func("pw_deinit", "void", []);
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
@@ -1 +1 @@
1
- {"version":3,"file":"pipewire.js","sourceRoot":"","sources":["../src/pipewire.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC,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 * as pw from "../src/index.js";
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: koffi.register(registry_event_global, koffi.pointer(pw.core.pw_registry_events_global)),
32
- global_remove: koffi.register(
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);