pipewire 1.1.2 → 1.2.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 +0 -14
- package/dist/core.d.ts +2 -1
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +8 -4
- package/dist/core.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +16 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +51 -0
- package/dist/node.js.map +1 -0
- package/dist/param.d.ts +2 -0
- package/dist/param.d.ts.map +1 -0
- package/dist/param.js +9 -0
- package/dist/param.js.map +1 -0
- package/dist/pod.d.ts +2 -0
- package/dist/pod.d.ts.map +1 -0
- package/dist/pod.js +6 -0
- package/dist/pod.js.map +1 -0
- package/dist/registry.d.ts +9 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +11 -4
- package/dist/registry.js.map +1 -1
- package/examples/event-registry.ts +13 -10
- package/package.json +5 -2
- package/src/core.ts +9 -4
- package/src/index.ts +3 -1
- package/src/node.ts +58 -0
- package/src/param.ts +9 -0
- package/src/pod.ts +6 -0
- package/src/registry.ts +12 -4
- package/tsconfig.build.json +7 -0
- package/tsconfig.json +0 -1
package/README.md
CHANGED
|
@@ -21,20 +21,6 @@ npm run build
|
|
|
21
21
|
|
|
22
22
|
## Usage
|
|
23
23
|
|
|
24
|
-
```ts
|
|
25
|
-
import * as pw from "pipewire";
|
|
26
|
-
|
|
27
|
-
pw.pipewire.pw_init(0, null);
|
|
28
|
-
|
|
29
|
-
const loop = pw.main_loop.pw_main_loop_new(null);
|
|
30
|
-
const context = pw.context.pw_context_new(pw.main_loop.pw_main_loop_get_loop(loop), null, 0);
|
|
31
|
-
const core = pw.core.pw_context_connect(context, null, 0);
|
|
32
|
-
const registry = pw.core.pw_core_get_registry(core, 3, 0);
|
|
33
|
-
|
|
34
|
-
// ...add listeners, then run the main loop
|
|
35
|
-
await new Promise((resolve) => pw.main_loop.pw_main_loop_run.async(loop, resolve));
|
|
36
|
-
```
|
|
37
|
-
|
|
38
24
|
See [`examples/event-registry.ts`](examples/event-registry.ts) for a complete example:
|
|
39
25
|
|
|
40
26
|
```bash
|
package/dist/core.d.ts
CHANGED
|
@@ -18,7 +18,8 @@ export declare const pw_core_get_registry: {
|
|
|
18
18
|
result: import("koffi").TypeObject;
|
|
19
19
|
};
|
|
20
20
|
};
|
|
21
|
-
export declare const
|
|
21
|
+
export declare const pw_registry_events_global: import("koffi").TypeObject;
|
|
22
|
+
export declare const pw_registry_events_global_remove: import("koffi").TypeObject;
|
|
22
23
|
export declare const pw_registry_events: import("koffi").TypeObject;
|
|
23
24
|
export declare const pw_core_disconnect: {
|
|
24
25
|
(...args: any[]): any;
|
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,OAAO,4BAA0B,CAAC;AAC/C,eAAO,MAAM,WAAW,4BAA8B,CAAC;AAEvD,eAAO,MAAM,kBAAkB;;;;;;;;CAI7B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;CAI/B,CAAC;AAEH,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,OAAO,4BAA0B,CAAC;AAC/C,eAAO,MAAM,WAAW,4BAA8B,CAAC;AAEvD,eAAO,MAAM,kBAAkB;;;;;;;;CAI7B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;CAI/B,CAAC;AAEH,eAAO,MAAM,yBAAyB,4BAOpC,CAAC;AAEH,eAAO,MAAM,gCAAgC,4BAG3C,CAAC;AAEH,eAAO,MAAM,kBAAkB,4BAI7B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;CAAuE,CAAC"}
|
package/dist/core.js
CHANGED
|
@@ -14,7 +14,7 @@ export const pw_core_get_registry = pipewire.func("pw_core_get_registry", koffi.
|
|
|
14
14
|
"uint32_t",
|
|
15
15
|
"size_t"
|
|
16
16
|
]);
|
|
17
|
-
export const
|
|
17
|
+
export const pw_registry_events_global = koffi.proto("void", [
|
|
18
18
|
"void*", // data
|
|
19
19
|
"uint32_t", // id
|
|
20
20
|
"uint32_t", // permissions
|
|
@@ -22,10 +22,14 @@ export const pw_registry_events_globals = koffi.proto("void", [
|
|
|
22
22
|
"uint32_t", // version
|
|
23
23
|
"void*" // props
|
|
24
24
|
]);
|
|
25
|
+
export const pw_registry_events_global_remove = koffi.proto("void", [
|
|
26
|
+
"void*", // data
|
|
27
|
+
"uint32_t" // id
|
|
28
|
+
]);
|
|
25
29
|
export const pw_registry_events = koffi.struct("pw_registry_events", {
|
|
26
|
-
|
|
27
|
-
global:
|
|
28
|
-
global_remove:
|
|
30
|
+
version: "uint32_t",
|
|
31
|
+
global: koffi.pointer(pw_registry_events_global),
|
|
32
|
+
global_remove: koffi.pointer(pw_registry_events_global_remove)
|
|
29
33
|
});
|
|
30
34
|
export const pw_core_disconnect = pipewire.func("pw_core_disconnect", "int", [koffi.pointer(pw_core)]);
|
|
31
35
|
//# sourceMappingURL=core.js.map
|
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAEvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;IAC1F,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;IACzB,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;IAC5B,QAAQ;CACX,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;IAClG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;IACtB,UAAU;IACV,QAAQ;CACX,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAEvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;IAC1F,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;IACzB,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;IAC5B,QAAQ;CACX,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;IAClG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;IACtB,UAAU;IACV,QAAQ;CACX,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;IACzD,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,cAAc;IAC1B,aAAa,EAAE,OAAO;IACtB,UAAU,EAAE,UAAU;IACtB,OAAO,CAAC,QAAQ;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gCAAgC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;IAChE,OAAO,EAAE,OAAO;IAChB,UAAU,CAAC,KAAK;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAAC,oBAAoB,EAAE;IACjE,OAAO,EAAE,UAAU;IACnB,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,yBAAyB,CAAC;IAChD,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,gCAAgC,CAAC;CACjE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import * as context from "./context.js";
|
|
2
2
|
import * as core from "./core.js";
|
|
3
|
+
import * as dict from "./dict.js";
|
|
3
4
|
import * as hook from "./hook.js";
|
|
4
5
|
import * as main_loop from "./main-loop.js";
|
|
6
|
+
import * as node from "./node.js";
|
|
5
7
|
import * as pipewire from "./pipewire.js";
|
|
6
8
|
import * as proxy from "./proxy.js";
|
|
7
9
|
import * as registry from "./registry.js";
|
|
8
|
-
export { context, core, hook, main_loop, pipewire, proxy, registry };
|
|
10
|
+
export { context, core, dict, hook, main_loop, node, pipewire, proxy, registry };
|
|
9
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import * as context from "./context.js";
|
|
2
2
|
import * as core from "./core.js";
|
|
3
|
+
import * as dict from "./dict.js";
|
|
3
4
|
import * as hook from "./hook.js";
|
|
4
5
|
import * as main_loop from "./main-loop.js";
|
|
6
|
+
import * as node from "./node.js";
|
|
5
7
|
import * as pipewire from "./pipewire.js";
|
|
6
8
|
import * as proxy from "./proxy.js";
|
|
7
9
|
import * as registry from "./registry.js";
|
|
8
|
-
export { context, core, hook, main_loop, pipewire, proxy, registry };
|
|
10
|
+
export { context, core, dict, hook, main_loop, node, pipewire, proxy, registry };
|
|
9
11
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/node.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const pw_node: import("koffi").TypeObject;
|
|
2
|
+
export declare const pw_node_state: import("koffi").TypeObject;
|
|
3
|
+
export declare const pw_node_info: import("koffi").TypeObject;
|
|
4
|
+
export declare const pw_node_events_info: import("koffi").TypeObject;
|
|
5
|
+
export declare const pw_node_events_param: import("koffi").TypeObject;
|
|
6
|
+
export declare const pw_node_events: import("koffi").TypeObject;
|
|
7
|
+
export declare const pw_node_add_listener: {
|
|
8
|
+
(...args: any[]): any;
|
|
9
|
+
async: (...args: any[]) => any;
|
|
10
|
+
info: {
|
|
11
|
+
name: string;
|
|
12
|
+
arguments: import("koffi").TypeObject[];
|
|
13
|
+
result: import("koffi").TypeObject;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +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,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"}
|
package/dist/node.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
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_info = koffi.struct("pw_node_info", {
|
|
16
|
+
id: "uint32_t",
|
|
17
|
+
max_input_ports: "uint32_t",
|
|
18
|
+
max_output_ports: "uint32_t",
|
|
19
|
+
change_mask: "uint64_t",
|
|
20
|
+
n_input_ports: "uint32_t",
|
|
21
|
+
n_output_ports: "uint32_t",
|
|
22
|
+
state: pw_node_state,
|
|
23
|
+
error: "const char*",
|
|
24
|
+
props: koffi.pointer(spa_dict),
|
|
25
|
+
params: koffi.pointer(spa_param_info),
|
|
26
|
+
n_params: "uint32_t"
|
|
27
|
+
});
|
|
28
|
+
export const pw_node_events_info = koffi.proto("void", [
|
|
29
|
+
"void*", // data
|
|
30
|
+
koffi.pointer(pw_node_info) // info
|
|
31
|
+
]);
|
|
32
|
+
export const pw_node_events_param = koffi.proto("void", [
|
|
33
|
+
"void*", // data
|
|
34
|
+
"int", // seq
|
|
35
|
+
"uint32_t", // id
|
|
36
|
+
"uint32_t", // index
|
|
37
|
+
"uint32_t", // next
|
|
38
|
+
koffi.pointer(spa_pod) // param
|
|
39
|
+
]);
|
|
40
|
+
export const pw_node_events = koffi.struct("pw_node_events", {
|
|
41
|
+
version: "uint32_t",
|
|
42
|
+
info: koffi.pointer(pw_node_events_info),
|
|
43
|
+
param: koffi.pointer(pw_node_events_param)
|
|
44
|
+
});
|
|
45
|
+
export const pw_node_add_listener = pipewire.func("pw_node_add_listener", "int", [
|
|
46
|
+
koffi.pointer(pw_node), // object
|
|
47
|
+
koffi.pointer(spa_hook), // listener
|
|
48
|
+
koffi.pointer(pw_node_events), // events
|
|
49
|
+
"void*" // data
|
|
50
|
+
]);
|
|
51
|
+
//# sourceMappingURL=node.js.map
|
package/dist/node.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE;IAC5D,mBAAmB,EAAE,CAAC,CAAC;IACvB,sBAAsB,EAAE,CAAC;IACzB,uBAAuB,EAAE,CAAC;IAC1B,kBAAkB,EAAE,CAAC;IACrB,qBAAqB,EAAE,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE;IACrD,EAAE,EAAE,UAAU;IACd,eAAe,EAAE,UAAU;IAC3B,gBAAgB,EAAE,UAAU;IAC5B,WAAW,EAAE,UAAU;IACvB,aAAa,EAAE,UAAU;IACzB,cAAc,EAAE,UAAU;IAC1B,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC9B,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;IACrC,QAAQ,EAAE,UAAU;CACvB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;IACnD,OAAO,EAAE,OAAO;IAChB,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO;CACtC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;IACpD,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,MAAM;IACb,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,QAAQ;IACpB,UAAU,EAAE,OAAO;IACnB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE;IACzD,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC;IACxC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC;CAC7C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE;IAC7E,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS;IACjC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,WAAW;IACpC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,SAAS;IACxC,OAAO,CAAC,OAAO;CAClB,CAAC,CAAC"}
|
package/dist/param.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"param.d.ts","sourceRoot":"","sources":["../src/param.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,4BAMzB,CAAC"}
|
package/dist/param.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"param.js","sourceRoot":"","sources":["../src/param.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE;IACzD,EAAE,EAAE,UAAU;IACd,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,UAAU;IAChB,GAAG,EAAE,SAAS;IACd,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;CACtC,CAAC,CAAC"}
|
package/dist/pod.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pod.d.ts","sourceRoot":"","sources":["../src/pod.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,4BAGlB,CAAC"}
|
package/dist/pod.js
ADDED
package/dist/pod.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pod.js","sourceRoot":"","sources":["../src/pod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE;IAC3C,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;CACnB,CAAC,CAAC"}
|
package/dist/registry.d.ts
CHANGED
|
@@ -7,4 +7,13 @@ export declare const pw_registry_add_listener: {
|
|
|
7
7
|
result: import("koffi").TypeObject;
|
|
8
8
|
};
|
|
9
9
|
};
|
|
10
|
+
export declare const pw_registry_bind: {
|
|
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
|
+
};
|
|
18
|
+
};
|
|
10
19
|
//# sourceMappingURL=registry.d.ts.map
|
package/dist/registry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,wBAAwB;;;;;;;;CAKnC,CAAC"}
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,wBAAwB;;;;;;;;CAKnC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;CAM3B,CAAC"}
|
package/dist/registry.js
CHANGED
|
@@ -3,9 +3,16 @@ import { pw_registry, pw_registry_events } from "./core.js";
|
|
|
3
3
|
import { spa_hook } from "./hook.js";
|
|
4
4
|
const pipewire = koffi.load("libpipewire-0.3.so.0");
|
|
5
5
|
export const pw_registry_add_listener = pipewire.func("pw_registry_add_listener", "int", [
|
|
6
|
-
koffi.pointer(pw_registry),
|
|
7
|
-
koffi.pointer(spa_hook),
|
|
8
|
-
koffi.pointer(pw_registry_events),
|
|
9
|
-
"void*"
|
|
6
|
+
koffi.pointer(pw_registry), // registry
|
|
7
|
+
koffi.pointer(spa_hook), // listener
|
|
8
|
+
koffi.pointer(pw_registry_events), // events
|
|
9
|
+
"void*" // data
|
|
10
|
+
]);
|
|
11
|
+
export const pw_registry_bind = pipewire.func("pw_registry_bind", koffi.pointer("void"), [
|
|
12
|
+
koffi.pointer(pw_registry), // registry
|
|
13
|
+
"uint32_t", // id
|
|
14
|
+
"const char*", // type
|
|
15
|
+
"uint32_t", // version
|
|
16
|
+
"size_t" // user_data_size
|
|
10
17
|
]);
|
|
11
18
|
//# sourceMappingURL=registry.js.map
|
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,wBAAwB,GAAG,QAAQ,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,EAAE;IACrF,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,wBAAwB,GAAG,QAAQ,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,EAAE;IACrF,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,WAAW;IACvC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,WAAW;IACpC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,SAAS;IAC5C,OAAO,CAAC,OAAO;CAClB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;IACrF,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,WAAW;IACvC,UAAU,EAAE,KAAK;IACjB,aAAa,EAAE,OAAO;IACtB,UAAU,EAAE,UAAU;IACtB,QAAQ,CAAC,iBAAiB;CAC7B,CAAC,CAAC"}
|
|
@@ -11,29 +11,32 @@ import * as pw from "../src/index.js";
|
|
|
11
11
|
const registry_listener = Buffer.alloc(koffi.sizeof(pw.hook.spa_hook));
|
|
12
12
|
|
|
13
13
|
const registry_event_global = (
|
|
14
|
-
data:
|
|
14
|
+
data: unknown,
|
|
15
15
|
id: number,
|
|
16
16
|
permissions: number,
|
|
17
17
|
type: string,
|
|
18
18
|
version: number,
|
|
19
|
-
props:
|
|
19
|
+
props: unknown
|
|
20
20
|
) => {
|
|
21
|
-
console.log(`object: id
|
|
21
|
+
console.log(`New object: id: ${id} type: ${type} version: ${version}`);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const registry_event_global_remove = (data: unknown, id: number) => {
|
|
25
|
+
console.log(`Removed object: id: ${id}`);
|
|
22
26
|
};
|
|
23
27
|
|
|
24
28
|
const registry_events = {
|
|
25
29
|
version: 0,
|
|
26
|
-
global: koffi.register(registry_event_global, koffi.pointer(pw.core.
|
|
27
|
-
global_remove:
|
|
30
|
+
global: koffi.register(registry_event_global, koffi.pointer(pw.core.pw_registry_events_global)),
|
|
31
|
+
global_remove: koffi.register(
|
|
32
|
+
registry_event_global_remove,
|
|
33
|
+
koffi.pointer(pw.core.pw_registry_events_global_remove)
|
|
34
|
+
)
|
|
28
35
|
};
|
|
29
|
-
|
|
30
36
|
pw.registry.pw_registry_add_listener(registry, registry_listener, registry_events, null);
|
|
31
37
|
|
|
32
|
-
process.on("SIGINT", () => {
|
|
33
|
-
pw.main_loop.pw_main_loop_quit(loop);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
38
|
console.log("Starting PipeWire main loop...");
|
|
39
|
+
process.on("SIGINT", () => pw.main_loop.pw_main_loop_quit(loop));
|
|
37
40
|
await new Promise((resolve) => pw.main_loop.pw_main_loop_run.async(loop, resolve));
|
|
38
41
|
|
|
39
42
|
pw.proxy.pw_proxy_destroy(registry);
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pipewire",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"build": "tsc"
|
|
7
|
+
"build": "tsc -p tsconfig.build.json",
|
|
8
|
+
"publish": "npm run build && npm publish"
|
|
8
9
|
},
|
|
9
10
|
"keywords": [],
|
|
10
11
|
"homepage": "https://github.com/Raraph84/node-pipewire",
|
|
@@ -17,6 +18,7 @@
|
|
|
17
18
|
"devDependencies": {
|
|
18
19
|
"@types/node": "^26.6.3",
|
|
19
20
|
"prettier": "^3.9.9",
|
|
21
|
+
"tsx": "^4.23.15",
|
|
20
22
|
"typescript": "^7.0.2"
|
|
21
23
|
},
|
|
22
24
|
"prettier": {
|
|
@@ -28,6 +30,7 @@
|
|
|
28
30
|
"files": [
|
|
29
31
|
"package.json",
|
|
30
32
|
"package-lock.json",
|
|
33
|
+
"tsconfig.build.json",
|
|
31
34
|
"tsconfig.json"
|
|
32
35
|
],
|
|
33
36
|
"options": {
|
package/src/core.ts
CHANGED
|
@@ -19,7 +19,7 @@ export const pw_core_get_registry = pipewire.func("pw_core_get_registry", koffi.
|
|
|
19
19
|
"size_t"
|
|
20
20
|
]);
|
|
21
21
|
|
|
22
|
-
export const
|
|
22
|
+
export const pw_registry_events_global = koffi.proto("void", [
|
|
23
23
|
"void*", // data
|
|
24
24
|
"uint32_t", // id
|
|
25
25
|
"uint32_t", // permissions
|
|
@@ -28,10 +28,15 @@ export const pw_registry_events_globals = koffi.proto("void", [
|
|
|
28
28
|
"void*" // props
|
|
29
29
|
]);
|
|
30
30
|
|
|
31
|
+
export const pw_registry_events_global_remove = koffi.proto("void", [
|
|
32
|
+
"void*", // data
|
|
33
|
+
"uint32_t" // id
|
|
34
|
+
]);
|
|
35
|
+
|
|
31
36
|
export const pw_registry_events = koffi.struct("pw_registry_events", {
|
|
32
|
-
|
|
33
|
-
global:
|
|
34
|
-
global_remove:
|
|
37
|
+
version: "uint32_t",
|
|
38
|
+
global: koffi.pointer(pw_registry_events_global),
|
|
39
|
+
global_remove: koffi.pointer(pw_registry_events_global_remove)
|
|
35
40
|
});
|
|
36
41
|
|
|
37
42
|
export const pw_core_disconnect = pipewire.func("pw_core_disconnect", "int", [koffi.pointer(pw_core)]);
|
package/src/index.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import * as context from "./context.js";
|
|
2
2
|
import * as core from "./core.js";
|
|
3
|
+
import * as dict from "./dict.js";
|
|
3
4
|
import * as hook from "./hook.js";
|
|
4
5
|
import * as main_loop from "./main-loop.js";
|
|
6
|
+
import * as node from "./node.js";
|
|
5
7
|
import * as pipewire from "./pipewire.js";
|
|
6
8
|
import * as proxy from "./proxy.js";
|
|
7
9
|
import * as registry from "./registry.js";
|
|
8
10
|
|
|
9
|
-
export { context, core, hook, main_loop, pipewire, proxy, registry };
|
|
11
|
+
export { context, core, dict, hook, main_loop, node, pipewire, proxy, registry };
|
package/src/node.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
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
|
+
|
|
7
|
+
const pipewire = koffi.load("libpipewire-0.3.so.0");
|
|
8
|
+
|
|
9
|
+
export const pw_node = koffi.opaque("pw_node");
|
|
10
|
+
|
|
11
|
+
export const pw_node_state = koffi.enumeration("pw_node_state", {
|
|
12
|
+
PW_NODE_STATE_ERROR: -1,
|
|
13
|
+
PW_NODE_STATE_CREATING: 0,
|
|
14
|
+
PW_NODE_STATE_SUSPENDED: 1,
|
|
15
|
+
PW_NODE_STATE_IDLE: 2,
|
|
16
|
+
PW_NODE_STATE_RUNNING: 3
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
export const pw_node_info = koffi.struct("pw_node_info", {
|
|
20
|
+
id: "uint32_t",
|
|
21
|
+
max_input_ports: "uint32_t",
|
|
22
|
+
max_output_ports: "uint32_t",
|
|
23
|
+
change_mask: "uint64_t",
|
|
24
|
+
n_input_ports: "uint32_t",
|
|
25
|
+
n_output_ports: "uint32_t",
|
|
26
|
+
state: pw_node_state,
|
|
27
|
+
error: "const char*",
|
|
28
|
+
props: koffi.pointer(spa_dict),
|
|
29
|
+
params: koffi.pointer(spa_param_info),
|
|
30
|
+
n_params: "uint32_t"
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
export const pw_node_events_info = koffi.proto("void", [
|
|
34
|
+
"void*", // data
|
|
35
|
+
koffi.pointer(pw_node_info) // info
|
|
36
|
+
]);
|
|
37
|
+
|
|
38
|
+
export const pw_node_events_param = koffi.proto("void", [
|
|
39
|
+
"void*", // data
|
|
40
|
+
"int", // seq
|
|
41
|
+
"uint32_t", // id
|
|
42
|
+
"uint32_t", // index
|
|
43
|
+
"uint32_t", // next
|
|
44
|
+
koffi.pointer(spa_pod) // param
|
|
45
|
+
]);
|
|
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
|
+
|
|
53
|
+
export const pw_node_add_listener = pipewire.func("pw_node_add_listener", "int", [
|
|
54
|
+
koffi.pointer(pw_node), // object
|
|
55
|
+
koffi.pointer(spa_hook), // listener
|
|
56
|
+
koffi.pointer(pw_node_events), // events
|
|
57
|
+
"void*" // data
|
|
58
|
+
]);
|
package/src/param.ts
ADDED
package/src/pod.ts
ADDED
package/src/registry.ts
CHANGED
|
@@ -5,8 +5,16 @@ import { spa_hook } from "./hook.js";
|
|
|
5
5
|
const pipewire = koffi.load("libpipewire-0.3.so.0");
|
|
6
6
|
|
|
7
7
|
export const pw_registry_add_listener = pipewire.func("pw_registry_add_listener", "int", [
|
|
8
|
-
koffi.pointer(pw_registry),
|
|
9
|
-
koffi.pointer(spa_hook),
|
|
10
|
-
koffi.pointer(pw_registry_events),
|
|
11
|
-
"void*"
|
|
8
|
+
koffi.pointer(pw_registry), // registry
|
|
9
|
+
koffi.pointer(spa_hook), // listener
|
|
10
|
+
koffi.pointer(pw_registry_events), // events
|
|
11
|
+
"void*" // data
|
|
12
|
+
]);
|
|
13
|
+
|
|
14
|
+
export const pw_registry_bind = pipewire.func("pw_registry_bind", koffi.pointer("void"), [
|
|
15
|
+
koffi.pointer(pw_registry), // registry
|
|
16
|
+
"uint32_t", // id
|
|
17
|
+
"const char*", // type
|
|
18
|
+
"uint32_t", // version
|
|
19
|
+
"size_t" // user_data_size
|
|
12
20
|
]);
|