pipewire 1.2.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,10 +2,15 @@ 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";
8
+ import * as param from "./param.js";
7
9
  import * as pipewire from "./pipewire.js";
10
+ import * as pod from "./pod.js";
11
+ import * as props from "./props.js";
8
12
  import * as proxy from "./proxy.js";
9
13
  import * as registry from "./registry.js";
10
- export { context, core, dict, hook, main_loop, node, 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 };
11
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,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"}
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,10 +2,15 @@ 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";
8
+ import * as param from "./param.js";
7
9
  import * as pipewire from "./pipewire.js";
10
+ import * as pod from "./pod.js";
11
+ import * as props from "./props.js";
8
12
  import * as proxy from "./proxy.js";
9
13
  import * as registry from "./registry.js";
10
- export { context, core, dict, hook, main_loop, node, 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 };
11
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,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"}
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"}
package/dist/node.d.ts CHANGED
@@ -1,5 +1,12 @@
1
1
  export declare const pw_node: import("koffi").TypeObject;
2
2
  export declare const pw_node_state: import("koffi").TypeObject;
3
+ export declare const PW_NODE_CHANGE_MASK: {
4
+ INPUT_PORTS: number;
5
+ OUTPUT_PORTS: number;
6
+ STATE: number;
7
+ PROPS: number;
8
+ PARAMS: number;
9
+ };
3
10
  export declare const pw_node_info: import("koffi").TypeObject;
4
11
  export declare const pw_node_events_info: import("koffi").TypeObject;
5
12
  export declare const pw_node_events_param: import("koffi").TypeObject;
@@ -13,4 +20,22 @@ export declare const pw_node_add_listener: {
13
20
  result: import("koffi").TypeObject;
14
21
  };
15
22
  };
23
+ export declare const pw_node_enum_params: {
24
+ (...args: any[]): any;
25
+ async: (...args: any[]) => any;
26
+ info: {
27
+ name: string;
28
+ arguments: import("koffi").TypeObject[];
29
+ result: import("koffi").TypeObject;
30
+ };
31
+ };
32
+ export declare const pw_node_subscribe_params: {
33
+ (...args: any[]): any;
34
+ async: (...args: any[]) => any;
35
+ info: {
36
+ name: string;
37
+ arguments: import("koffi").TypeObject[];
38
+ result: import("koffi").TypeObject;
39
+ };
40
+ };
16
41
  //# sourceMappingURL=node.d.ts.map
@@ -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,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"}
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"}
package/dist/node.js CHANGED
@@ -12,6 +12,13 @@ export const pw_node_state = koffi.enumeration("pw_node_state", {
12
12
  PW_NODE_STATE_IDLE: 2,
13
13
  PW_NODE_STATE_RUNNING: 3
14
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
+ };
15
22
  export const pw_node_info = koffi.struct("pw_node_info", {
16
23
  id: "uint32_t",
17
24
  max_input_ports: "uint32_t",
@@ -48,4 +55,17 @@ export const pw_node_add_listener = pipewire.func("pw_node_add_listener", "int",
48
55
  koffi.pointer(pw_node_events), // events
49
56
  "void*" // data
50
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
+ ]);
51
71
  //# sourceMappingURL=node.js.map
package/dist/node.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;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"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
package/dist/param.d.ts CHANGED
@@ -1,2 +1,25 @@
1
1
  export declare const spa_param_info: import("koffi").TypeObject;
2
+ export declare const spa_param_type: {
3
+ SPA_PARAM_Invalid: number;
4
+ SPA_PARAM_PropInfo: number;
5
+ SPA_PARAM_Props: number;
6
+ SPA_PARAM_EnumFormat: number;
7
+ SPA_PARAM_Format: number;
8
+ SPA_PARAM_Buffers: number;
9
+ SPA_PARAM_Meta: number;
10
+ SPA_PARAM_IO: number;
11
+ SPA_PARAM_EnumProfile: number;
12
+ SPA_PARAM_Profile: number;
13
+ SPA_PARAM_EnumPortConfig: number;
14
+ SPA_PARAM_PortConfig: number;
15
+ SPA_PARAM_EnumRoute: number;
16
+ SPA_PARAM_Route: number;
17
+ SPA_PARAM_Control: number;
18
+ SPA_PARAM_Latency: number;
19
+ SPA_PARAM_ProcessLatency: number;
20
+ SPA_PARAM_Tag: number;
21
+ SPA_PARAM_PeerEnumFormat: number;
22
+ SPA_PARAM_Capability: number;
23
+ SPA_PARAM_PeerCapability: number;
24
+ };
2
25
  //# sourceMappingURL=param.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"param.d.ts","sourceRoot":"","sources":["../src/param.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,4BAMzB,CAAC"}
1
+ {"version":3,"file":"param.d.ts","sourceRoot":"","sources":["../src/param.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,4BAMzB,CAAC;AAEH,eAAO,MAAM,cAAc;IACvB,iBAAiB;IACjB,kBAAkB;IAClB,eAAe;IACf,oBAAoB;IACpB,gBAAgB;IAChB,iBAAiB;IACjB,cAAc;IACd,YAAY;IACZ,qBAAqB;IACrB,iBAAiB;IACjB,wBAAwB;IACxB,oBAAoB;IACpB,mBAAmB;IACnB,eAAe;IACf,iBAAiB;IACjB,iBAAiB;IACjB,wBAAwB;IACxB,aAAa;IACb,wBAAwB;IACxB,oBAAoB;IACpB,wBAAwB;CAC3B,CAAC"}
package/dist/param.js CHANGED
@@ -6,4 +6,27 @@ export const spa_param_info = koffi.struct("spa_param_info", {
6
6
  seq: "int32_t",
7
7
  padding: koffi.array("uint32_t", 4)
8
8
  });
9
+ export const spa_param_type = {
10
+ SPA_PARAM_Invalid: 0,
11
+ SPA_PARAM_PropInfo: 1,
12
+ SPA_PARAM_Props: 2,
13
+ SPA_PARAM_EnumFormat: 3,
14
+ SPA_PARAM_Format: 4,
15
+ SPA_PARAM_Buffers: 5,
16
+ SPA_PARAM_Meta: 6,
17
+ SPA_PARAM_IO: 7,
18
+ SPA_PARAM_EnumProfile: 8,
19
+ SPA_PARAM_Profile: 9,
20
+ SPA_PARAM_EnumPortConfig: 10,
21
+ SPA_PARAM_PortConfig: 11,
22
+ SPA_PARAM_EnumRoute: 12,
23
+ SPA_PARAM_Route: 13,
24
+ SPA_PARAM_Control: 14,
25
+ SPA_PARAM_Latency: 15,
26
+ SPA_PARAM_ProcessLatency: 16,
27
+ SPA_PARAM_Tag: 17,
28
+ SPA_PARAM_PeerEnumFormat: 18,
29
+ SPA_PARAM_Capability: 19,
30
+ SPA_PARAM_PeerCapability: 20
31
+ };
9
32
  //# sourceMappingURL=param.js.map
package/dist/param.js.map CHANGED
@@ -1 +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"}
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;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,iBAAiB,EAAE,CAAC;IACpB,kBAAkB,EAAE,CAAC;IACrB,eAAe,EAAE,CAAC;IAClB,oBAAoB,EAAE,CAAC;IACvB,gBAAgB,EAAE,CAAC;IACnB,iBAAiB,EAAE,CAAC;IACpB,cAAc,EAAE,CAAC;IACjB,YAAY,EAAE,CAAC;IACf,qBAAqB,EAAE,CAAC;IACxB,iBAAiB,EAAE,CAAC;IACpB,wBAAwB,EAAE,EAAE;IAC5B,oBAAoB,EAAE,EAAE;IACxB,mBAAmB,EAAE,EAAE;IACvB,eAAe,EAAE,EAAE;IACnB,iBAAiB,EAAE,EAAE;IACrB,iBAAiB,EAAE,EAAE;IACrB,wBAAwB,EAAE,EAAE;IAC5B,aAAa,EAAE,EAAE;IACjB,wBAAwB,EAAE,EAAE;IAC5B,oBAAoB,EAAE,EAAE;IACxB,wBAAwB,EAAE,EAAE;CAC/B,CAAC"}
@@ -0,0 +1,59 @@
1
+ export declare const spa_prop: {
2
+ SPA_PROP_START: number;
3
+ SPA_PROP_unknown: number;
4
+ SPA_PROP_START_Device: number;
5
+ SPA_PROP_device: number;
6
+ SPA_PROP_deviceName: number;
7
+ SPA_PROP_deviceFd: number;
8
+ SPA_PROP_card: number;
9
+ SPA_PROP_cardName: number;
10
+ SPA_PROP_minLatency: number;
11
+ SPA_PROP_maxLatency: number;
12
+ SPA_PROP_periods: number;
13
+ SPA_PROP_periodSize: number;
14
+ SPA_PROP_periodEvent: number;
15
+ SPA_PROP_live: number;
16
+ SPA_PROP_rate: number;
17
+ SPA_PROP_quality: number;
18
+ SPA_PROP_bluetoothAudioCodec: number;
19
+ SPA_PROP_bluetoothOffloadActive: number;
20
+ SPA_PROP_clockId: number;
21
+ SPA_PROP_clockDevice: number;
22
+ SPA_PROP_clockInterface: number;
23
+ SPA_PROP_START_Audio: number;
24
+ SPA_PROP_waveType: number;
25
+ SPA_PROP_frequency: number;
26
+ SPA_PROP_volume: number;
27
+ SPA_PROP_mute: number;
28
+ SPA_PROP_patternType: number;
29
+ SPA_PROP_ditherType: number;
30
+ SPA_PROP_truncate: number;
31
+ SPA_PROP_channelVolumes: number;
32
+ SPA_PROP_volumeBase: number;
33
+ SPA_PROP_volumeStep: number;
34
+ SPA_PROP_channelMap: number;
35
+ SPA_PROP_monitorMute: number;
36
+ SPA_PROP_monitorVolumes: number;
37
+ SPA_PROP_latencyOffsetNsec: number;
38
+ SPA_PROP_softMute: number;
39
+ SPA_PROP_softVolumes: number;
40
+ SPA_PROP_iec958Codecs: number;
41
+ SPA_PROP_volumeRampSamples: number;
42
+ SPA_PROP_volumeRampStepSamples: number;
43
+ SPA_PROP_volumeRampTime: number;
44
+ SPA_PROP_volumeRampStepTime: number;
45
+ SPA_PROP_volumeRampScale: number;
46
+ SPA_PROP_START_Video: number;
47
+ SPA_PROP_brightness: number;
48
+ SPA_PROP_contrast: number;
49
+ SPA_PROP_saturation: number;
50
+ SPA_PROP_hue: number;
51
+ SPA_PROP_gamma: number;
52
+ SPA_PROP_exposure: number;
53
+ SPA_PROP_gain: number;
54
+ SPA_PROP_sharpness: number;
55
+ SPA_PROP_START_Other: number;
56
+ SPA_PROP_params: number;
57
+ SPA_PROP_START_CUSTOM: number;
58
+ };
59
+ //# sourceMappingURL=props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../src/props.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;IACjB,cAAc;IAEd,gBAAgB;IAEhB,qBAAqB;IACrB,eAAe;IACf,mBAAmB;IACnB,iBAAiB;IACjB,aAAa;IACb,iBAAiB;IAEjB,mBAAmB;IACnB,mBAAmB;IACnB,gBAAgB;IAChB,mBAAmB;IACnB,oBAAoB;IACpB,aAAa;IACb,aAAa;IACb,gBAAgB;IAChB,4BAA4B;IAC5B,+BAA+B;IAC/B,gBAAgB;IAChB,oBAAoB;IACpB,uBAAuB;IAEvB,oBAAoB;IACpB,iBAAiB;IACjB,kBAAkB;IAClB,eAAe;IACf,aAAa;IACb,oBAAoB;IACpB,mBAAmB;IACnB,iBAAiB;IACjB,uBAAuB;IACvB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,oBAAoB;IACpB,uBAAuB;IACvB,0BAA0B;IAC1B,iBAAiB;IACjB,oBAAoB;IAEpB,qBAAqB;IACrB,0BAA0B;IAC1B,8BAA8B;IAC9B,uBAAuB;IACvB,2BAA2B;IAC3B,wBAAwB;IAExB,oBAAoB;IACpB,mBAAmB;IACnB,iBAAiB;IACjB,mBAAmB;IACnB,YAAY;IACZ,cAAc;IACd,iBAAiB;IACjB,aAAa;IACb,kBAAkB;IAElB,oBAAoB;IACpB,eAAe;IAEf,qBAAqB;CACxB,CAAC"}
package/dist/props.js ADDED
@@ -0,0 +1,59 @@
1
+ export const spa_prop = {
2
+ SPA_PROP_START: 0,
3
+ SPA_PROP_unknown: 1,
4
+ SPA_PROP_START_Device: 0x100,
5
+ SPA_PROP_device: 0x100 + 1,
6
+ SPA_PROP_deviceName: 0x100 + 2,
7
+ SPA_PROP_deviceFd: 0x100 + 3,
8
+ SPA_PROP_card: 0x100 + 4,
9
+ SPA_PROP_cardName: 0x100 + 5,
10
+ SPA_PROP_minLatency: 0x100 + 6,
11
+ SPA_PROP_maxLatency: 0x100 + 7,
12
+ SPA_PROP_periods: 0x100 + 8,
13
+ SPA_PROP_periodSize: 0x100 + 9,
14
+ SPA_PROP_periodEvent: 0x100 + 10,
15
+ SPA_PROP_live: 0x100 + 11,
16
+ SPA_PROP_rate: 0x100 + 12,
17
+ SPA_PROP_quality: 0x100 + 13,
18
+ SPA_PROP_bluetoothAudioCodec: 0x100 + 14,
19
+ SPA_PROP_bluetoothOffloadActive: 0x100 + 15,
20
+ SPA_PROP_clockId: 0x100 + 16,
21
+ SPA_PROP_clockDevice: 0x100 + 17,
22
+ SPA_PROP_clockInterface: 0x100 + 18,
23
+ SPA_PROP_START_Audio: 0x10000,
24
+ SPA_PROP_waveType: 0x10000 + 1,
25
+ SPA_PROP_frequency: 0x10000 + 2,
26
+ SPA_PROP_volume: 0x10000 + 3,
27
+ SPA_PROP_mute: 0x10000 + 4,
28
+ SPA_PROP_patternType: 0x10000 + 5,
29
+ SPA_PROP_ditherType: 0x10000 + 6,
30
+ SPA_PROP_truncate: 0x10000 + 7,
31
+ SPA_PROP_channelVolumes: 0x10000 + 8,
32
+ SPA_PROP_volumeBase: 0x10000 + 9,
33
+ SPA_PROP_volumeStep: 0x10000 + 10,
34
+ SPA_PROP_channelMap: 0x10000 + 11,
35
+ SPA_PROP_monitorMute: 0x10000 + 12,
36
+ SPA_PROP_monitorVolumes: 0x10000 + 13,
37
+ SPA_PROP_latencyOffsetNsec: 0x10000 + 14,
38
+ SPA_PROP_softMute: 0x10000 + 15,
39
+ SPA_PROP_softVolumes: 0x10000 + 16,
40
+ SPA_PROP_iec958Codecs: 0x10000 + 17,
41
+ SPA_PROP_volumeRampSamples: 0x10000 + 18,
42
+ SPA_PROP_volumeRampStepSamples: 0x10000 + 19,
43
+ SPA_PROP_volumeRampTime: 0x10000 + 20,
44
+ SPA_PROP_volumeRampStepTime: 0x10000 + 21,
45
+ SPA_PROP_volumeRampScale: 0x10000 + 22,
46
+ SPA_PROP_START_Video: 0x20000,
47
+ SPA_PROP_brightness: 0x20000 + 1,
48
+ SPA_PROP_contrast: 0x20000 + 2,
49
+ SPA_PROP_saturation: 0x20000 + 3,
50
+ SPA_PROP_hue: 0x20000 + 4,
51
+ SPA_PROP_gamma: 0x20000 + 5,
52
+ SPA_PROP_exposure: 0x20000 + 6,
53
+ SPA_PROP_gain: 0x20000 + 7,
54
+ SPA_PROP_sharpness: 0x20000 + 8,
55
+ SPA_PROP_START_Other: 0x80000,
56
+ SPA_PROP_params: 0x80000 + 1,
57
+ SPA_PROP_START_CUSTOM: 0x1000000
58
+ };
59
+ //# sourceMappingURL=props.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"props.js","sourceRoot":"","sources":["../src/props.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,cAAc,EAAE,CAAC;IAEjB,gBAAgB,EAAE,CAAC;IAEnB,qBAAqB,EAAE,KAAK;IAC5B,eAAe,EAAE,KAAK,GAAG,CAAC;IAC1B,mBAAmB,EAAE,KAAK,GAAG,CAAC;IAC9B,iBAAiB,EAAE,KAAK,GAAG,CAAC;IAC5B,aAAa,EAAE,KAAK,GAAG,CAAC;IACxB,iBAAiB,EAAE,KAAK,GAAG,CAAC;IAE5B,mBAAmB,EAAE,KAAK,GAAG,CAAC;IAC9B,mBAAmB,EAAE,KAAK,GAAG,CAAC;IAC9B,gBAAgB,EAAE,KAAK,GAAG,CAAC;IAC3B,mBAAmB,EAAE,KAAK,GAAG,CAAC;IAC9B,oBAAoB,EAAE,KAAK,GAAG,EAAE;IAChC,aAAa,EAAE,KAAK,GAAG,EAAE;IACzB,aAAa,EAAE,KAAK,GAAG,EAAE;IACzB,gBAAgB,EAAE,KAAK,GAAG,EAAE;IAC5B,4BAA4B,EAAE,KAAK,GAAG,EAAE;IACxC,+BAA+B,EAAE,KAAK,GAAG,EAAE;IAC3C,gBAAgB,EAAE,KAAK,GAAG,EAAE;IAC5B,oBAAoB,EAAE,KAAK,GAAG,EAAE;IAChC,uBAAuB,EAAE,KAAK,GAAG,EAAE;IAEnC,oBAAoB,EAAE,OAAO;IAC7B,iBAAiB,EAAE,OAAO,GAAG,CAAC;IAC9B,kBAAkB,EAAE,OAAO,GAAG,CAAC;IAC/B,eAAe,EAAE,OAAO,GAAG,CAAC;IAC5B,aAAa,EAAE,OAAO,GAAG,CAAC;IAC1B,oBAAoB,EAAE,OAAO,GAAG,CAAC;IACjC,mBAAmB,EAAE,OAAO,GAAG,CAAC;IAChC,iBAAiB,EAAE,OAAO,GAAG,CAAC;IAC9B,uBAAuB,EAAE,OAAO,GAAG,CAAC;IACpC,mBAAmB,EAAE,OAAO,GAAG,CAAC;IAChC,mBAAmB,EAAE,OAAO,GAAG,EAAE;IACjC,mBAAmB,EAAE,OAAO,GAAG,EAAE;IACjC,oBAAoB,EAAE,OAAO,GAAG,EAAE;IAClC,uBAAuB,EAAE,OAAO,GAAG,EAAE;IACrC,0BAA0B,EAAE,OAAO,GAAG,EAAE;IACxC,iBAAiB,EAAE,OAAO,GAAG,EAAE;IAC/B,oBAAoB,EAAE,OAAO,GAAG,EAAE;IAElC,qBAAqB,EAAE,OAAO,GAAG,EAAE;IACnC,0BAA0B,EAAE,OAAO,GAAG,EAAE;IACxC,8BAA8B,EAAE,OAAO,GAAG,EAAE;IAC5C,uBAAuB,EAAE,OAAO,GAAG,EAAE;IACrC,2BAA2B,EAAE,OAAO,GAAG,EAAE;IACzC,wBAAwB,EAAE,OAAO,GAAG,EAAE;IAEtC,oBAAoB,EAAE,OAAO;IAC7B,mBAAmB,EAAE,OAAO,GAAG,CAAC;IAChC,iBAAiB,EAAE,OAAO,GAAG,CAAC;IAC9B,mBAAmB,EAAE,OAAO,GAAG,CAAC;IAChC,YAAY,EAAE,OAAO,GAAG,CAAC;IACzB,cAAc,EAAE,OAAO,GAAG,CAAC;IAC3B,iBAAiB,EAAE,OAAO,GAAG,CAAC;IAC9B,aAAa,EAAE,OAAO,GAAG,CAAC;IAC1B,kBAAkB,EAAE,OAAO,GAAG,CAAC;IAE/B,oBAAoB,EAAE,OAAO;IAC7B,eAAe,EAAE,OAAO,GAAG,CAAC;IAE5B,qBAAqB,EAAE,SAAS;CACnC,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"}
@@ -8,7 +8,6 @@ import * as pw from "../src/index.js";
8
8
  const context = pw.context.pw_context_new(pw.main_loop.pw_main_loop_get_loop(loop), null, 0);
9
9
  const core = pw.core.pw_context_connect(context, null, 0);
10
10
  const registry = pw.core.pw_core_get_registry(core, 3, 0);
11
- const registry_listener = Buffer.alloc(koffi.sizeof(pw.hook.spa_hook));
12
11
 
13
12
  const registry_event_global = (
14
13
  data: unknown,
@@ -25,14 +24,21 @@ import * as pw from "../src/index.js";
25
24
  console.log(`Removed object: id: ${id}`);
26
25
  };
27
26
 
28
- const registry_events = {
27
+ const registry_listener = Buffer.alloc(koffi.sizeof(pw.hook.spa_hook));
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
+ );
37
+ koffi.encode(registry_events, pw.core.pw_registry_events, {
29
38
  version: 0,
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
- )
35
- };
39
+ global: registry_event_global_register,
40
+ global_remove: registry_event_global_remove_register
41
+ });
36
42
  pw.registry.pw_registry_add_listener(registry, registry_listener, registry_events, null);
37
43
 
38
44
  console.log("Starting PipeWire main loop...");
@@ -40,6 +46,8 @@ import * as pw from "../src/index.js";
40
46
  await new Promise((resolve) => pw.main_loop.pw_main_loop_run.async(loop, resolve));
41
47
 
42
48
  pw.proxy.pw_proxy_destroy(registry);
49
+ koffi.unregister(registry_event_global_register);
50
+ koffi.unregister(registry_event_global_remove_register);
43
51
  pw.core.pw_core_disconnect(core);
44
52
  pw.context.pw_context_destroy(context);
45
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.2.0",
3
+ "version": "1.4.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
package/src/index.ts CHANGED
@@ -2,10 +2,15 @@ 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";
8
+ import * as param from "./param.js";
7
9
  import * as pipewire from "./pipewire.js";
10
+ import * as pod from "./pod.js";
11
+ import * as props from "./props.js";
8
12
  import * as proxy from "./proxy.js";
9
13
  import * as registry from "./registry.js";
14
+ import * as thread_loop from "./thread-loop.js";
10
15
 
11
- export { context, core, dict, hook, main_loop, node, 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)]);
package/src/node.ts CHANGED
@@ -16,6 +16,14 @@ export const pw_node_state = koffi.enumeration("pw_node_state", {
16
16
  PW_NODE_STATE_RUNNING: 3
17
17
  });
18
18
 
19
+ export const PW_NODE_CHANGE_MASK = {
20
+ INPUT_PORTS: 1 << 0,
21
+ OUTPUT_PORTS: 1 << 1,
22
+ STATE: 1 << 2,
23
+ PROPS: 1 << 3,
24
+ PARAMS: 1 << 4
25
+ };
26
+
19
27
  export const pw_node_info = koffi.struct("pw_node_info", {
20
28
  id: "uint32_t",
21
29
  max_input_ports: "uint32_t",
@@ -56,3 +64,18 @@ export const pw_node_add_listener = pipewire.func("pw_node_add_listener", "int",
56
64
  koffi.pointer(pw_node_events), // events
57
65
  "void*" // data
58
66
  ]);
67
+
68
+ export const pw_node_enum_params = pipewire.func("pw_node_enum_params", "int", [
69
+ koffi.pointer(pw_node), // object
70
+ "int", // seq
71
+ "uint32_t", // id
72
+ "uint32_t", // start
73
+ "uint32_t", // num
74
+ koffi.pointer(spa_pod) // filter
75
+ ]);
76
+
77
+ export const pw_node_subscribe_params = pipewire.func("pw_node_subscribe_params", "int", [
78
+ koffi.pointer(pw_node), // object
79
+ "uint32_t*", // ids
80
+ "uint32_t" // n_ids
81
+ ]);
package/src/param.ts CHANGED
@@ -7,3 +7,27 @@ export const spa_param_info = koffi.struct("spa_param_info", {
7
7
  seq: "int32_t",
8
8
  padding: koffi.array("uint32_t", 4)
9
9
  });
10
+
11
+ export const spa_param_type = {
12
+ SPA_PARAM_Invalid: 0,
13
+ SPA_PARAM_PropInfo: 1,
14
+ SPA_PARAM_Props: 2,
15
+ SPA_PARAM_EnumFormat: 3,
16
+ SPA_PARAM_Format: 4,
17
+ SPA_PARAM_Buffers: 5,
18
+ SPA_PARAM_Meta: 6,
19
+ SPA_PARAM_IO: 7,
20
+ SPA_PARAM_EnumProfile: 8,
21
+ SPA_PARAM_Profile: 9,
22
+ SPA_PARAM_EnumPortConfig: 10,
23
+ SPA_PARAM_PortConfig: 11,
24
+ SPA_PARAM_EnumRoute: 12,
25
+ SPA_PARAM_Route: 13,
26
+ SPA_PARAM_Control: 14,
27
+ SPA_PARAM_Latency: 15,
28
+ SPA_PARAM_ProcessLatency: 16,
29
+ SPA_PARAM_Tag: 17,
30
+ SPA_PARAM_PeerEnumFormat: 18,
31
+ SPA_PARAM_Capability: 19,
32
+ SPA_PARAM_PeerCapability: 20
33
+ };
package/src/props.ts ADDED
@@ -0,0 +1,66 @@
1
+ export const spa_prop = {
2
+ SPA_PROP_START: 0,
3
+
4
+ SPA_PROP_unknown: 1,
5
+
6
+ SPA_PROP_START_Device: 0x100,
7
+ SPA_PROP_device: 0x100 + 1,
8
+ SPA_PROP_deviceName: 0x100 + 2,
9
+ SPA_PROP_deviceFd: 0x100 + 3,
10
+ SPA_PROP_card: 0x100 + 4,
11
+ SPA_PROP_cardName: 0x100 + 5,
12
+
13
+ SPA_PROP_minLatency: 0x100 + 6,
14
+ SPA_PROP_maxLatency: 0x100 + 7,
15
+ SPA_PROP_periods: 0x100 + 8,
16
+ SPA_PROP_periodSize: 0x100 + 9,
17
+ SPA_PROP_periodEvent: 0x100 + 10,
18
+ SPA_PROP_live: 0x100 + 11,
19
+ SPA_PROP_rate: 0x100 + 12,
20
+ SPA_PROP_quality: 0x100 + 13,
21
+ SPA_PROP_bluetoothAudioCodec: 0x100 + 14,
22
+ SPA_PROP_bluetoothOffloadActive: 0x100 + 15,
23
+ SPA_PROP_clockId: 0x100 + 16,
24
+ SPA_PROP_clockDevice: 0x100 + 17,
25
+ SPA_PROP_clockInterface: 0x100 + 18,
26
+
27
+ SPA_PROP_START_Audio: 0x10000,
28
+ SPA_PROP_waveType: 0x10000 + 1,
29
+ SPA_PROP_frequency: 0x10000 + 2,
30
+ SPA_PROP_volume: 0x10000 + 3,
31
+ SPA_PROP_mute: 0x10000 + 4,
32
+ SPA_PROP_patternType: 0x10000 + 5,
33
+ SPA_PROP_ditherType: 0x10000 + 6,
34
+ SPA_PROP_truncate: 0x10000 + 7,
35
+ SPA_PROP_channelVolumes: 0x10000 + 8,
36
+ SPA_PROP_volumeBase: 0x10000 + 9,
37
+ SPA_PROP_volumeStep: 0x10000 + 10,
38
+ SPA_PROP_channelMap: 0x10000 + 11,
39
+ SPA_PROP_monitorMute: 0x10000 + 12,
40
+ SPA_PROP_monitorVolumes: 0x10000 + 13,
41
+ SPA_PROP_latencyOffsetNsec: 0x10000 + 14,
42
+ SPA_PROP_softMute: 0x10000 + 15,
43
+ SPA_PROP_softVolumes: 0x10000 + 16,
44
+
45
+ SPA_PROP_iec958Codecs: 0x10000 + 17,
46
+ SPA_PROP_volumeRampSamples: 0x10000 + 18,
47
+ SPA_PROP_volumeRampStepSamples: 0x10000 + 19,
48
+ SPA_PROP_volumeRampTime: 0x10000 + 20,
49
+ SPA_PROP_volumeRampStepTime: 0x10000 + 21,
50
+ SPA_PROP_volumeRampScale: 0x10000 + 22,
51
+
52
+ SPA_PROP_START_Video: 0x20000,
53
+ SPA_PROP_brightness: 0x20000 + 1,
54
+ SPA_PROP_contrast: 0x20000 + 2,
55
+ SPA_PROP_saturation: 0x20000 + 3,
56
+ SPA_PROP_hue: 0x20000 + 4,
57
+ SPA_PROP_gamma: 0x20000 + 5,
58
+ SPA_PROP_exposure: 0x20000 + 6,
59
+ SPA_PROP_gain: 0x20000 + 7,
60
+ SPA_PROP_sharpness: 0x20000 + 8,
61
+
62
+ SPA_PROP_START_Other: 0x80000,
63
+ SPA_PROP_params: 0x80000 + 1,
64
+
65
+ SPA_PROP_START_CUSTOM: 0x1000000
66
+ };
@@ -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)]);