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 +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/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/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/{event-registry.ts → event-registry-async.ts} +12 -5
- package/examples/event-registry-sync.ts +59 -0
- package/package.json +1 -1
- package/src/index.ts +3 -1
- package/src/loop.ts +6 -0
- package/src/thread-loop.ts +23 -0
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
|
-
|
|
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
|
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,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;
|
|
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
|
-
|
|
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;
|
|
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
|
package/dist/loop.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../src/loop.ts"],"names":[],"mappings":"
|
|
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:
|
|
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);
|
|
@@ -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
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)]);
|