pipewire 1.3.0 → 1.4.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/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ import * as context from "./context.js";
2
2
  import * as core from "./core.js";
3
3
  import * as dict from "./dict.js";
4
4
  import * as hook from "./hook.js";
5
+ import * as loop from "./loop.js";
5
6
  import * as main_loop from "./main-loop.js";
6
7
  import * as node from "./node.js";
7
8
  import * as param from "./param.js";
@@ -10,5 +11,6 @@ import * as pod from "./pod.js";
10
11
  import * as props from "./props.js";
11
12
  import * as proxy from "./proxy.js";
12
13
  import * as registry from "./registry.js";
13
- export { context, core, dict, hook, main_loop, node, param, pod, props, pipewire, proxy, registry };
14
+ import * as thread_loop from "./thread-loop.js";
15
+ export { context, core, dict, hook, loop, main_loop, node, param, pod, props, pipewire, proxy, registry, thread_loop };
14
16
  //# sourceMappingURL=index.d.ts.map
@@ -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,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,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,KAAK,EAAE,GAAG,EAAE,KAAK,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,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@ import * as context from "./context.js";
2
2
  import * as core from "./core.js";
3
3
  import * as dict from "./dict.js";
4
4
  import * as hook from "./hook.js";
5
+ import * as loop from "./loop.js";
5
6
  import * as main_loop from "./main-loop.js";
6
7
  import * as node from "./node.js";
7
8
  import * as param from "./param.js";
@@ -10,5 +11,6 @@ import * as pod from "./pod.js";
10
11
  import * as props from "./props.js";
11
12
  import * as proxy from "./proxy.js";
12
13
  import * as registry from "./registry.js";
13
- export { context, core, dict, hook, main_loop, node, param, pod, props, pipewire, proxy, registry };
14
+ import * as thread_loop from "./thread-loop.js";
15
+ export { context, core, dict, hook, loop, main_loop, node, param, pod, props, pipewire, proxy, registry, thread_loop };
14
16
  //# 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,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,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,KAAK,EAAE,GAAG,EAAE,KAAK,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,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC"}
package/dist/loop.d.ts CHANGED
@@ -3,4 +3,31 @@ export declare const spa_loop: import("koffi").TypeObject;
3
3
  export declare const spa_loop_control: import("koffi").TypeObject;
4
4
  export declare const spa_loop_utils: import("koffi").TypeObject;
5
5
  export declare const pw_loop: import("koffi").TypeObject;
6
+ export declare const pw_loop_enter: {
7
+ (...args: any[]): any;
8
+ async: (...args: any[]) => any;
9
+ info: {
10
+ name: string;
11
+ arguments: import("koffi").TypeObject[];
12
+ result: import("koffi").TypeObject;
13
+ };
14
+ };
15
+ export declare const pw_loop_iterate: {
16
+ (...args: any[]): any;
17
+ async: (...args: any[]) => any;
18
+ info: {
19
+ name: string;
20
+ arguments: import("koffi").TypeObject[];
21
+ result: import("koffi").TypeObject;
22
+ };
23
+ };
24
+ export declare const pw_loop_leave: {
25
+ (...args: any[]): any;
26
+ async: (...args: any[]) => any;
27
+ info: {
28
+ name: string;
29
+ arguments: import("koffi").TypeObject[];
30
+ result: import("koffi").TypeObject;
31
+ };
32
+ };
6
33
  //# sourceMappingURL=loop.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../src/loop.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,4BAA6B,CAAC;AACrD,eAAO,MAAM,QAAQ,4BAA2B,CAAC;AACjD,eAAO,MAAM,gBAAgB,4BAAmC,CAAC;AAEjE,eAAO,MAAM,cAAc,4BAAiC,CAAC;AAE7D,eAAO,MAAM,OAAO,4BAMlB,CAAC"}
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../src/loop.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,4BAA6B,CAAC;AACrD,eAAO,MAAM,QAAQ,4BAA2B,CAAC;AACjD,eAAO,MAAM,gBAAgB,4BAAmC,CAAC;AAEjE,eAAO,MAAM,cAAc,4BAAiC,CAAC;AAE7D,eAAO,MAAM,OAAO,4BAMlB,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;CAAmE,CAAC;AAC9F,eAAO,MAAM,eAAe;;;;;;;;CAA2E,CAAC;AACxG,eAAO,MAAM,aAAa;;;;;;;;CAAmE,CAAC"}
package/dist/loop.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import koffi from "koffi";
2
+ const pipewire = koffi.load("libpipewire-0.3.so.0");
2
3
  export const spa_system = koffi.opaque("spa_system");
3
4
  export const spa_loop = koffi.opaque("spa_loop");
4
5
  export const spa_loop_control = koffi.opaque("spa_loop_control");
@@ -10,4 +11,7 @@ export const pw_loop = koffi.struct("pw_loop", {
10
11
  utils: koffi.pointer(spa_loop_utils),
11
12
  name: "const char*"
12
13
  });
14
+ export const pw_loop_enter = pipewire.func("pw_loop_enter", "void", [koffi.pointer(pw_loop)]);
15
+ export const pw_loop_iterate = pipewire.func("pw_loop_iterate", "int", [koffi.pointer(pw_loop), "int"]);
16
+ export const pw_loop_leave = pipewire.func("pw_loop_leave", "void", [koffi.pointer(pw_loop)]);
13
17
  //# sourceMappingURL=loop.js.map
package/dist/loop.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"loop.js","sourceRoot":"","sources":["../src/loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAEjE,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO;AAErE,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE;IAC3C,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;IACjC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC7B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACxC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;IACpC,IAAI,EAAE,aAAa;CACtB,CAAC,CAAC"}
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../src/loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAEjE,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO;AAErE,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE;IAC3C,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;IACjC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC7B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACxC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;IACpC,IAAI,EAAE,aAAa;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9F,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACxG,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC"}
@@ -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"}
@@ -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);
@@ -0,0 +1,59 @@
1
+ import koffi from "koffi";
2
+ import * as pw from "../src/index.js";
3
+
4
+ (async () => {
5
+ pw.pipewire.pw_init(0, null);
6
+
7
+ const mainLoop = pw.main_loop.pw_main_loop_new(null);
8
+ const loop = pw.main_loop.pw_main_loop_get_loop(mainLoop);
9
+ const context = pw.context.pw_context_new(loop, null, 0);
10
+ const core = pw.core.pw_context_connect(context, null, 0);
11
+ const registry = pw.core.pw_core_get_registry(core, 3, 0);
12
+
13
+ const registry_event_global = (
14
+ data: unknown,
15
+ id: number,
16
+ permissions: number,
17
+ type: string,
18
+ version: number,
19
+ props: unknown
20
+ ) => {
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}`);
26
+ };
27
+
28
+ const registry_listener = Buffer.alloc(koffi.sizeof(pw.hook.spa_hook));
29
+ const registry_events = Buffer.alloc(koffi.sizeof(pw.core.pw_registry_events));
30
+ const registry_event_global_register = koffi.register(
31
+ registry_event_global,
32
+ koffi.pointer(pw.core.pw_registry_events_global)
33
+ );
34
+ const registry_event_global_remove_register = koffi.register(
35
+ registry_event_global_remove,
36
+ koffi.pointer(pw.core.pw_registry_events_global_remove)
37
+ );
38
+ koffi.encode(registry_events, pw.core.pw_registry_events, {
39
+ version: 0,
40
+ global: registry_event_global_register,
41
+ global_remove: registry_event_global_remove_register
42
+ });
43
+ pw.registry.pw_registry_add_listener(registry, registry_listener, registry_events, null);
44
+
45
+ console.log("Starting PipeWire main loop...");
46
+ pw.loop.pw_loop_enter(loop);
47
+ const interval = setInterval(() => pw.loop.pw_loop_iterate(loop, 1), 10);
48
+ await new Promise((resolve) => process.on("SIGINT", resolve));
49
+ clearInterval(interval);
50
+
51
+ pw.proxy.pw_proxy_destroy(registry);
52
+ koffi.unregister(registry_event_global_register);
53
+ koffi.unregister(registry_event_global_remove_register);
54
+ pw.core.pw_core_disconnect(core);
55
+ pw.context.pw_context_destroy(context);
56
+ pw.main_loop.pw_main_loop_destroy(loop);
57
+
58
+ console.log("PipeWire main loop exited, cleanup done.");
59
+ })();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pipewire",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
package/src/index.ts CHANGED
@@ -2,6 +2,7 @@ import * as context from "./context.js";
2
2
  import * as core from "./core.js";
3
3
  import * as dict from "./dict.js";
4
4
  import * as hook from "./hook.js";
5
+ import * as loop from "./loop.js";
5
6
  import * as main_loop from "./main-loop.js";
6
7
  import * as node from "./node.js";
7
8
  import * as param from "./param.js";
@@ -10,5 +11,6 @@ import * as pod from "./pod.js";
10
11
  import * as props from "./props.js";
11
12
  import * as proxy from "./proxy.js";
12
13
  import * as registry from "./registry.js";
14
+ import * as thread_loop from "./thread-loop.js";
13
15
 
14
- export { context, core, dict, hook, main_loop, node, param, pod, props, pipewire, proxy, registry };
16
+ export { context, core, dict, hook, loop, main_loop, node, param, pod, props, pipewire, proxy, registry, thread_loop };
package/src/loop.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import koffi from "koffi";
2
2
 
3
+ const pipewire = koffi.load("libpipewire-0.3.so.0");
4
+
3
5
  export const spa_system = koffi.opaque("spa_system");
4
6
  export const spa_loop = koffi.opaque("spa_loop");
5
7
  export const spa_loop_control = koffi.opaque("spa_loop_control");
@@ -13,3 +15,7 @@ export const pw_loop = koffi.struct("pw_loop", {
13
15
  utils: koffi.pointer(spa_loop_utils),
14
16
  name: "const char*"
15
17
  });
18
+
19
+ export const pw_loop_enter = pipewire.func("pw_loop_enter", "void", [koffi.pointer(pw_loop)]);
20
+ export const pw_loop_iterate = pipewire.func("pw_loop_iterate", "int", [koffi.pointer(pw_loop), "int"]);
21
+ export const pw_loop_leave = pipewire.func("pw_loop_leave", "void", [koffi.pointer(pw_loop)]);
@@ -0,0 +1,23 @@
1
+ import koffi from "koffi";
2
+ import { spa_dict } from "./dict.js";
3
+ import { pw_loop } from "./loop.js";
4
+
5
+ const pipewire = koffi.load("libpipewire-0.3.so.0");
6
+
7
+ export const pw_thread_loop = koffi.opaque("pw_thread_loop");
8
+
9
+ export const pw_thread_loop_new = pipewire.func("pw_thread_loop_new", koffi.pointer(pw_thread_loop), [
10
+ "const char*", // name
11
+ koffi.pointer(spa_dict) // props
12
+ ]);
13
+ export const pw_thread_loop_destroy = pipewire.func("pw_thread_loop_destroy", "void", [koffi.pointer(pw_thread_loop)]);
14
+
15
+ export const pw_thread_loop_get_loop = pipewire.func("pw_thread_loop_get_loop", koffi.pointer(pw_loop), [
16
+ koffi.pointer(pw_thread_loop)
17
+ ]);
18
+
19
+ export const pw_thread_loop_lock = pipewire.func("pw_thread_loop_lock", "void", [koffi.pointer(pw_thread_loop)]);
20
+ export const pw_thread_loop_unlock = pipewire.func("pw_thread_loop_unlock", "void", [koffi.pointer(pw_thread_loop)]);
21
+
22
+ export const pw_thread_loop_start = pipewire.func("pw_thread_loop_start", "int", [koffi.pointer(pw_thread_loop)]);
23
+ export const pw_thread_loop_stop = pipewire.func("pw_thread_loop_stop", "void", [koffi.pointer(pw_thread_loop)]);