@revizly/node-av 5.2.2-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/BUILD_LINUX.md +61 -0
  2. package/LICENSE.md +22 -0
  3. package/README.md +662 -0
  4. package/build_mac_local.sh +69 -0
  5. package/dist/api/audio-frame-buffer.d.ts +205 -0
  6. package/dist/api/audio-frame-buffer.js +287 -0
  7. package/dist/api/audio-frame-buffer.js.map +1 -0
  8. package/dist/api/bitstream-filter.d.ts +820 -0
  9. package/dist/api/bitstream-filter.js +1242 -0
  10. package/dist/api/bitstream-filter.js.map +1 -0
  11. package/dist/api/constants.d.ts +44 -0
  12. package/dist/api/constants.js +45 -0
  13. package/dist/api/constants.js.map +1 -0
  14. package/dist/api/data/test_av1.ivf +0 -0
  15. package/dist/api/data/test_h264.h264 +0 -0
  16. package/dist/api/data/test_hevc.h265 +0 -0
  17. package/dist/api/data/test_mjpeg.mjpeg +0 -0
  18. package/dist/api/data/test_vp8.ivf +0 -0
  19. package/dist/api/data/test_vp9.ivf +0 -0
  20. package/dist/api/decoder.d.ts +1088 -0
  21. package/dist/api/decoder.js +1775 -0
  22. package/dist/api/decoder.js.map +1 -0
  23. package/dist/api/demuxer.d.ts +1219 -0
  24. package/dist/api/demuxer.js +2081 -0
  25. package/dist/api/demuxer.js.map +1 -0
  26. package/dist/api/device.d.ts +586 -0
  27. package/dist/api/device.js +961 -0
  28. package/dist/api/device.js.map +1 -0
  29. package/dist/api/encoder.d.ts +1132 -0
  30. package/dist/api/encoder.js +1988 -0
  31. package/dist/api/encoder.js.map +1 -0
  32. package/dist/api/filter-complex.d.ts +821 -0
  33. package/dist/api/filter-complex.js +1604 -0
  34. package/dist/api/filter-complex.js.map +1 -0
  35. package/dist/api/filter-presets.d.ts +1286 -0
  36. package/dist/api/filter-presets.js +2152 -0
  37. package/dist/api/filter-presets.js.map +1 -0
  38. package/dist/api/filter.d.ts +1234 -0
  39. package/dist/api/filter.js +1976 -0
  40. package/dist/api/filter.js.map +1 -0
  41. package/dist/api/fmp4-stream.d.ts +426 -0
  42. package/dist/api/fmp4-stream.js +739 -0
  43. package/dist/api/fmp4-stream.js.map +1 -0
  44. package/dist/api/hardware.d.ts +651 -0
  45. package/dist/api/hardware.js +1260 -0
  46. package/dist/api/hardware.js.map +1 -0
  47. package/dist/api/index.d.ts +17 -0
  48. package/dist/api/index.js +32 -0
  49. package/dist/api/index.js.map +1 -0
  50. package/dist/api/io-stream.d.ts +307 -0
  51. package/dist/api/io-stream.js +282 -0
  52. package/dist/api/io-stream.js.map +1 -0
  53. package/dist/api/muxer.d.ts +957 -0
  54. package/dist/api/muxer.js +2002 -0
  55. package/dist/api/muxer.js.map +1 -0
  56. package/dist/api/pipeline.d.ts +607 -0
  57. package/dist/api/pipeline.js +1145 -0
  58. package/dist/api/pipeline.js.map +1 -0
  59. package/dist/api/utilities/async-queue.d.ts +120 -0
  60. package/dist/api/utilities/async-queue.js +211 -0
  61. package/dist/api/utilities/async-queue.js.map +1 -0
  62. package/dist/api/utilities/audio-sample.d.ts +117 -0
  63. package/dist/api/utilities/audio-sample.js +112 -0
  64. package/dist/api/utilities/audio-sample.js.map +1 -0
  65. package/dist/api/utilities/channel-layout.d.ts +76 -0
  66. package/dist/api/utilities/channel-layout.js +80 -0
  67. package/dist/api/utilities/channel-layout.js.map +1 -0
  68. package/dist/api/utilities/electron-shared-texture.d.ts +328 -0
  69. package/dist/api/utilities/electron-shared-texture.js +503 -0
  70. package/dist/api/utilities/electron-shared-texture.js.map +1 -0
  71. package/dist/api/utilities/image.d.ts +207 -0
  72. package/dist/api/utilities/image.js +213 -0
  73. package/dist/api/utilities/image.js.map +1 -0
  74. package/dist/api/utilities/index.d.ts +12 -0
  75. package/dist/api/utilities/index.js +25 -0
  76. package/dist/api/utilities/index.js.map +1 -0
  77. package/dist/api/utilities/media-type.d.ts +49 -0
  78. package/dist/api/utilities/media-type.js +53 -0
  79. package/dist/api/utilities/media-type.js.map +1 -0
  80. package/dist/api/utilities/pixel-format.d.ts +89 -0
  81. package/dist/api/utilities/pixel-format.js +97 -0
  82. package/dist/api/utilities/pixel-format.js.map +1 -0
  83. package/dist/api/utilities/sample-format.d.ts +129 -0
  84. package/dist/api/utilities/sample-format.js +141 -0
  85. package/dist/api/utilities/sample-format.js.map +1 -0
  86. package/dist/api/utilities/scheduler.d.ts +138 -0
  87. package/dist/api/utilities/scheduler.js +98 -0
  88. package/dist/api/utilities/scheduler.js.map +1 -0
  89. package/dist/api/utilities/streaming.d.ts +186 -0
  90. package/dist/api/utilities/streaming.js +309 -0
  91. package/dist/api/utilities/streaming.js.map +1 -0
  92. package/dist/api/utilities/timestamp.d.ts +193 -0
  93. package/dist/api/utilities/timestamp.js +206 -0
  94. package/dist/api/utilities/timestamp.js.map +1 -0
  95. package/dist/api/utilities/whisper-model.d.ts +310 -0
  96. package/dist/api/utilities/whisper-model.js +528 -0
  97. package/dist/api/utilities/whisper-model.js.map +1 -0
  98. package/dist/api/utils.d.ts +19 -0
  99. package/dist/api/utils.js +39 -0
  100. package/dist/api/utils.js.map +1 -0
  101. package/dist/api/whisper.d.ts +324 -0
  102. package/dist/api/whisper.js +362 -0
  103. package/dist/api/whisper.js.map +1 -0
  104. package/dist/constants/channel-layouts.d.ts +53 -0
  105. package/dist/constants/channel-layouts.js +57 -0
  106. package/dist/constants/channel-layouts.js.map +1 -0
  107. package/dist/constants/constants.d.ts +2325 -0
  108. package/dist/constants/constants.js +1887 -0
  109. package/dist/constants/constants.js.map +1 -0
  110. package/dist/constants/decoders.d.ts +633 -0
  111. package/dist/constants/decoders.js +641 -0
  112. package/dist/constants/decoders.js.map +1 -0
  113. package/dist/constants/encoders.d.ts +295 -0
  114. package/dist/constants/encoders.js +308 -0
  115. package/dist/constants/encoders.js.map +1 -0
  116. package/dist/constants/hardware.d.ts +26 -0
  117. package/dist/constants/hardware.js +27 -0
  118. package/dist/constants/hardware.js.map +1 -0
  119. package/dist/constants/index.d.ts +5 -0
  120. package/dist/constants/index.js +6 -0
  121. package/dist/constants/index.js.map +1 -0
  122. package/dist/ffmpeg/index.d.ts +99 -0
  123. package/dist/ffmpeg/index.js +115 -0
  124. package/dist/ffmpeg/index.js.map +1 -0
  125. package/dist/ffmpeg/utils.d.ts +31 -0
  126. package/dist/ffmpeg/utils.js +68 -0
  127. package/dist/ffmpeg/utils.js.map +1 -0
  128. package/dist/ffmpeg/version.d.ts +6 -0
  129. package/dist/ffmpeg/version.js +7 -0
  130. package/dist/ffmpeg/version.js.map +1 -0
  131. package/dist/index.d.ts +4 -0
  132. package/dist/index.js +9 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/lib/audio-fifo.d.ts +399 -0
  135. package/dist/lib/audio-fifo.js +431 -0
  136. package/dist/lib/audio-fifo.js.map +1 -0
  137. package/dist/lib/binding.d.ts +228 -0
  138. package/dist/lib/binding.js +60 -0
  139. package/dist/lib/binding.js.map +1 -0
  140. package/dist/lib/bitstream-filter-context.d.ts +379 -0
  141. package/dist/lib/bitstream-filter-context.js +441 -0
  142. package/dist/lib/bitstream-filter-context.js.map +1 -0
  143. package/dist/lib/bitstream-filter.d.ts +140 -0
  144. package/dist/lib/bitstream-filter.js +154 -0
  145. package/dist/lib/bitstream-filter.js.map +1 -0
  146. package/dist/lib/codec-context.d.ts +1071 -0
  147. package/dist/lib/codec-context.js +1354 -0
  148. package/dist/lib/codec-context.js.map +1 -0
  149. package/dist/lib/codec-parameters.d.ts +616 -0
  150. package/dist/lib/codec-parameters.js +761 -0
  151. package/dist/lib/codec-parameters.js.map +1 -0
  152. package/dist/lib/codec-parser.d.ts +201 -0
  153. package/dist/lib/codec-parser.js +213 -0
  154. package/dist/lib/codec-parser.js.map +1 -0
  155. package/dist/lib/codec.d.ts +586 -0
  156. package/dist/lib/codec.js +713 -0
  157. package/dist/lib/codec.js.map +1 -0
  158. package/dist/lib/device.d.ts +291 -0
  159. package/dist/lib/device.js +324 -0
  160. package/dist/lib/device.js.map +1 -0
  161. package/dist/lib/dictionary.d.ts +333 -0
  162. package/dist/lib/dictionary.js +372 -0
  163. package/dist/lib/dictionary.js.map +1 -0
  164. package/dist/lib/error.d.ts +242 -0
  165. package/dist/lib/error.js +303 -0
  166. package/dist/lib/error.js.map +1 -0
  167. package/dist/lib/fifo.d.ts +416 -0
  168. package/dist/lib/fifo.js +453 -0
  169. package/dist/lib/fifo.js.map +1 -0
  170. package/dist/lib/filter-context.d.ts +712 -0
  171. package/dist/lib/filter-context.js +789 -0
  172. package/dist/lib/filter-context.js.map +1 -0
  173. package/dist/lib/filter-graph-segment.d.ts +160 -0
  174. package/dist/lib/filter-graph-segment.js +171 -0
  175. package/dist/lib/filter-graph-segment.js.map +1 -0
  176. package/dist/lib/filter-graph.d.ts +641 -0
  177. package/dist/lib/filter-graph.js +704 -0
  178. package/dist/lib/filter-graph.js.map +1 -0
  179. package/dist/lib/filter-inout.d.ts +198 -0
  180. package/dist/lib/filter-inout.js +257 -0
  181. package/dist/lib/filter-inout.js.map +1 -0
  182. package/dist/lib/filter.d.ts +243 -0
  183. package/dist/lib/filter.js +272 -0
  184. package/dist/lib/filter.js.map +1 -0
  185. package/dist/lib/format-context.d.ts +1254 -0
  186. package/dist/lib/format-context.js +1379 -0
  187. package/dist/lib/format-context.js.map +1 -0
  188. package/dist/lib/frame-utils.d.ts +116 -0
  189. package/dist/lib/frame-utils.js +98 -0
  190. package/dist/lib/frame-utils.js.map +1 -0
  191. package/dist/lib/frame.d.ts +1222 -0
  192. package/dist/lib/frame.js +1435 -0
  193. package/dist/lib/frame.js.map +1 -0
  194. package/dist/lib/hardware-device-context.d.ts +362 -0
  195. package/dist/lib/hardware-device-context.js +383 -0
  196. package/dist/lib/hardware-device-context.js.map +1 -0
  197. package/dist/lib/hardware-frames-context.d.ts +419 -0
  198. package/dist/lib/hardware-frames-context.js +477 -0
  199. package/dist/lib/hardware-frames-context.js.map +1 -0
  200. package/dist/lib/index.d.ts +35 -0
  201. package/dist/lib/index.js +60 -0
  202. package/dist/lib/index.js.map +1 -0
  203. package/dist/lib/input-format.d.ts +249 -0
  204. package/dist/lib/input-format.js +306 -0
  205. package/dist/lib/input-format.js.map +1 -0
  206. package/dist/lib/io-context.d.ts +696 -0
  207. package/dist/lib/io-context.js +769 -0
  208. package/dist/lib/io-context.js.map +1 -0
  209. package/dist/lib/log.d.ts +174 -0
  210. package/dist/lib/log.js +184 -0
  211. package/dist/lib/log.js.map +1 -0
  212. package/dist/lib/native-types.d.ts +946 -0
  213. package/dist/lib/native-types.js +2 -0
  214. package/dist/lib/native-types.js.map +1 -0
  215. package/dist/lib/option.d.ts +927 -0
  216. package/dist/lib/option.js +1583 -0
  217. package/dist/lib/option.js.map +1 -0
  218. package/dist/lib/output-format.d.ts +180 -0
  219. package/dist/lib/output-format.js +213 -0
  220. package/dist/lib/output-format.js.map +1 -0
  221. package/dist/lib/packet.d.ts +501 -0
  222. package/dist/lib/packet.js +590 -0
  223. package/dist/lib/packet.js.map +1 -0
  224. package/dist/lib/rational.d.ts +251 -0
  225. package/dist/lib/rational.js +278 -0
  226. package/dist/lib/rational.js.map +1 -0
  227. package/dist/lib/software-resample-context.d.ts +552 -0
  228. package/dist/lib/software-resample-context.js +592 -0
  229. package/dist/lib/software-resample-context.js.map +1 -0
  230. package/dist/lib/software-scale-context.d.ts +344 -0
  231. package/dist/lib/software-scale-context.js +366 -0
  232. package/dist/lib/software-scale-context.js.map +1 -0
  233. package/dist/lib/stream.d.ts +379 -0
  234. package/dist/lib/stream.js +526 -0
  235. package/dist/lib/stream.js.map +1 -0
  236. package/dist/lib/sync-queue.d.ts +179 -0
  237. package/dist/lib/sync-queue.js +197 -0
  238. package/dist/lib/sync-queue.js.map +1 -0
  239. package/dist/lib/types.d.ts +34 -0
  240. package/dist/lib/types.js +2 -0
  241. package/dist/lib/types.js.map +1 -0
  242. package/dist/lib/utilities.d.ts +1127 -0
  243. package/dist/lib/utilities.js +1225 -0
  244. package/dist/lib/utilities.js.map +1 -0
  245. package/dist/utils/electron.d.ts +49 -0
  246. package/dist/utils/electron.js +63 -0
  247. package/dist/utils/electron.js.map +1 -0
  248. package/dist/utils/index.d.ts +4 -0
  249. package/dist/utils/index.js +5 -0
  250. package/dist/utils/index.js.map +1 -0
  251. package/install/check.js +121 -0
  252. package/install/ffmpeg.js +66 -0
  253. package/jellyfin-ffmpeg.patch +181 -0
  254. package/package.json +129 -0
@@ -0,0 +1,76 @@
1
+ import type { ChannelLayout } from '../../lib/types.js';
2
+ /**
3
+ * Audio channel layout utilities.
4
+ *
5
+ * Provides static methods for describing and working with audio channel layouts.
6
+ * Channel layouts define the arrangement and meaning of audio channels in
7
+ * multi-channel audio.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { ChannelLayoutUtils } from 'node-av';
12
+ * import { AV_CHANNEL_ORDER_NATIVE } from 'node-av/constants';
13
+ *
14
+ * // Describe a stereo layout
15
+ * const stereo: ChannelLayout = {
16
+ * order: AV_CHANNEL_ORDER_NATIVE,
17
+ * nb_channels: 2,
18
+ * u: { mask: 0x3n } // FL | FR
19
+ * };
20
+ *
21
+ * const description = ChannelLayoutUtils.describe(stereo);
22
+ * console.log(description); // "stereo"
23
+ *
24
+ * // Describe a 5.1 layout
25
+ * const surround: ChannelLayout = {
26
+ * order: AV_CHANNEL_ORDER_NATIVE,
27
+ * nb_channels: 6,
28
+ * u: { mask: 0x3Fn } // FL | FR | FC | LFE | BL | BR
29
+ * };
30
+ *
31
+ * console.log(ChannelLayoutUtils.describe(surround)); // "5.1"
32
+ * ```
33
+ */
34
+ export declare class ChannelLayoutUtils {
35
+ private constructor();
36
+ /**
37
+ * Get string description of channel layout.
38
+ *
39
+ * Returns a human-readable string describing the channel layout.
40
+ * Direct mapping to av_channel_layout_describe()
41
+ *
42
+ * @param channelLayout - Channel layout to describe
43
+ *
44
+ * @returns String description, or null on error
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * import { ChannelLayoutUtils } from 'node-av';
49
+ * import { AV_CHANNEL_ORDER_NATIVE, AV_CHANNEL_ORDER_CUSTOM } from 'node-av/constants';
50
+ *
51
+ * // Standard layouts
52
+ * const mono: ChannelLayout = {
53
+ * order: AV_CHANNEL_ORDER_NATIVE,
54
+ * nb_channels: 1,
55
+ * u: { mask: 0x4n } // FC
56
+ * };
57
+ * console.log(ChannelLayoutUtils.describe(mono)); // "mono"
58
+ *
59
+ * const stereo: ChannelLayout = {
60
+ * order: AV_CHANNEL_ORDER_NATIVE,
61
+ * nb_channels: 2,
62
+ * u: { mask: 0x3n } // FL | FR
63
+ * };
64
+ * console.log(ChannelLayoutUtils.describe(stereo)); // "stereo"
65
+ *
66
+ * // Custom layout
67
+ * const custom: ChannelLayout = {
68
+ * order: AV_CHANNEL_ORDER_CUSTOM,
69
+ * nb_channels: 3,
70
+ * u: { map: null }
71
+ * };
72
+ * console.log(ChannelLayoutUtils.describe(custom)); // "3 channels"
73
+ * ```
74
+ */
75
+ static describe(channelLayout: Partial<ChannelLayout>): string | null;
76
+ }
@@ -0,0 +1,80 @@
1
+ import { bindings } from '../../lib/binding.js';
2
+ /**
3
+ * Audio channel layout utilities.
4
+ *
5
+ * Provides static methods for describing and working with audio channel layouts.
6
+ * Channel layouts define the arrangement and meaning of audio channels in
7
+ * multi-channel audio.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { ChannelLayoutUtils } from 'node-av';
12
+ * import { AV_CHANNEL_ORDER_NATIVE } from 'node-av/constants';
13
+ *
14
+ * // Describe a stereo layout
15
+ * const stereo: ChannelLayout = {
16
+ * order: AV_CHANNEL_ORDER_NATIVE,
17
+ * nb_channels: 2,
18
+ * u: { mask: 0x3n } // FL | FR
19
+ * };
20
+ *
21
+ * const description = ChannelLayoutUtils.describe(stereo);
22
+ * console.log(description); // "stereo"
23
+ *
24
+ * // Describe a 5.1 layout
25
+ * const surround: ChannelLayout = {
26
+ * order: AV_CHANNEL_ORDER_NATIVE,
27
+ * nb_channels: 6,
28
+ * u: { mask: 0x3Fn } // FL | FR | FC | LFE | BL | BR
29
+ * };
30
+ *
31
+ * console.log(ChannelLayoutUtils.describe(surround)); // "5.1"
32
+ * ```
33
+ */
34
+ export class ChannelLayoutUtils {
35
+ // Private constructor to prevent instantiation
36
+ constructor() { }
37
+ /**
38
+ * Get string description of channel layout.
39
+ *
40
+ * Returns a human-readable string describing the channel layout.
41
+ * Direct mapping to av_channel_layout_describe()
42
+ *
43
+ * @param channelLayout - Channel layout to describe
44
+ *
45
+ * @returns String description, or null on error
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * import { ChannelLayoutUtils } from 'node-av';
50
+ * import { AV_CHANNEL_ORDER_NATIVE, AV_CHANNEL_ORDER_CUSTOM } from 'node-av/constants';
51
+ *
52
+ * // Standard layouts
53
+ * const mono: ChannelLayout = {
54
+ * order: AV_CHANNEL_ORDER_NATIVE,
55
+ * nb_channels: 1,
56
+ * u: { mask: 0x4n } // FC
57
+ * };
58
+ * console.log(ChannelLayoutUtils.describe(mono)); // "mono"
59
+ *
60
+ * const stereo: ChannelLayout = {
61
+ * order: AV_CHANNEL_ORDER_NATIVE,
62
+ * nb_channels: 2,
63
+ * u: { mask: 0x3n } // FL | FR
64
+ * };
65
+ * console.log(ChannelLayoutUtils.describe(stereo)); // "stereo"
66
+ *
67
+ * // Custom layout
68
+ * const custom: ChannelLayout = {
69
+ * order: AV_CHANNEL_ORDER_CUSTOM,
70
+ * nb_channels: 3,
71
+ * u: { map: null }
72
+ * };
73
+ * console.log(ChannelLayoutUtils.describe(custom)); // "3 channels"
74
+ * ```
75
+ */
76
+ static describe(channelLayout) {
77
+ return bindings.avChannelLayoutDescribe(channelLayout);
78
+ }
79
+ }
80
+ //# sourceMappingURL=channel-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-layout.js","sourceRoot":"","sources":["../../../src/api/utilities/channel-layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,OAAO,kBAAkB;IAC7B,+CAA+C;IAC/C,gBAAuB,CAAC;IAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACH,MAAM,CAAC,QAAQ,CAAC,aAAqC;QACnD,OAAO,QAAQ,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;IACzD,CAAC;CACF"}
@@ -0,0 +1,328 @@
1
+ import { Frame } from '../../lib/frame.js';
2
+ import type { AVPixelFormat } from '../../constants/constants.js';
3
+ import type { IRational } from '../../lib/types.js';
4
+ import type { HardwareContext } from '../hardware.js';
5
+ /**
6
+ * Electron SharedTextureHandle (textureInfo.handle).
7
+ *
8
+ * Platform-specific GPU texture handles provided by Electron's offscreen rendering
9
+ * with shared textures enabled.
10
+ */
11
+ export interface SharedTextureHandle {
12
+ ioSurface?: Buffer;
13
+ ntHandle?: Buffer;
14
+ nativePixmap?: {
15
+ planes: {
16
+ fd: number;
17
+ stride: number;
18
+ offset: number;
19
+ size: number;
20
+ }[];
21
+ modifier: string;
22
+ };
23
+ }
24
+ /**
25
+ * Electron color space descriptor from textureInfo.colorSpace.
26
+ */
27
+ export interface TextureColorSpace {
28
+ range?: 'limited' | 'full' | 'derived' | 'invalid';
29
+ primaries?: string;
30
+ transfer?: string;
31
+ matrix?: string;
32
+ }
33
+ /**
34
+ * Electron textureInfo object.
35
+ *
36
+ * Contains GPU texture metadata and platform-specific handle for zero-copy frame import.
37
+ */
38
+ export interface TextureInfo {
39
+ pixelFormat: string;
40
+ codedSize: {
41
+ width: number;
42
+ height: number;
43
+ };
44
+ colorSpace?: TextureColorSpace;
45
+ handle: SharedTextureHandle;
46
+ }
47
+ /**
48
+ * Options for each frame import via {@link SharedTexture.importTexture} or {@link SharedTexture.importHandle}.
49
+ */
50
+ export interface TextureFrameOptions {
51
+ pts?: bigint;
52
+ timeBase?: IRational;
53
+ }
54
+ /**
55
+ * Options for {@link SharedTexture.create}.
56
+ */
57
+ export interface SharedTextureOptions {
58
+ width?: number;
59
+ height?: number;
60
+ swFormat?: AVPixelFormat;
61
+ }
62
+ /**
63
+ * Properties for importing a raw GPU texture handle via {@link SharedTexture.importHandle}.
64
+ */
65
+ export interface ImportHandleProps {
66
+ width: number;
67
+ height: number;
68
+ pixelFormat?: string | AVPixelFormat;
69
+ pts?: bigint;
70
+ timeBase?: IRational;
71
+ }
72
+ /**
73
+ * High-level GPU texture import for Electron shared textures.
74
+ *
75
+ * Handles platform detection (macOS IOSurface, Windows D3D11,
76
+ * Linux DMA-BUF), HardwareFramesContext lifecycle, and format mapping automatically.
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * import { HardwareContext, SharedTexture } from 'node-av/api';
81
+ *
82
+ * const hw = HardwareContext.auto();
83
+ * using sharedTexture = SharedTexture.create(hw);
84
+ *
85
+ * // In Electron paint event:
86
+ * offscreen.webContents.on('paint', (event) => {
87
+ * const texture = event.texture;
88
+ * if (!texture?.textureInfo) return;
89
+ *
90
+ * using frame = sharedTexture.importTexture(texture.textureInfo, { pts: 0n });
91
+ * // frame is a hardware Frame ready for encoding/filtering
92
+ *
93
+ * texture.release();
94
+ * });
95
+ * ```
96
+ *
97
+ * @see {@link HardwareContext} For hardware acceleration setup
98
+ * @see {@link Frame} For frame operations
99
+ */
100
+ export declare class SharedTexture implements Disposable {
101
+ private _hardware;
102
+ private _framesCtx;
103
+ private _currentWidth;
104
+ private _currentHeight;
105
+ private _swFormat;
106
+ private _isDisposed;
107
+ private _mappingCtx;
108
+ private _mappingHw;
109
+ private constructor();
110
+ /**
111
+ * Create a SharedTexture.
112
+ *
113
+ * @param hardware - Initialized hardware context (from HardwareContext.auto() or HardwareContext.create())
114
+ *
115
+ * @param options - Optional configuration overrides
116
+ *
117
+ * @returns SharedTexture instance
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * const hw = HardwareContext.auto();
122
+ * using sharedTexture = SharedTexture.create(hw);
123
+ * ```
124
+ *
125
+ * @example
126
+ * ```typescript
127
+ * // With explicit software format
128
+ * import { AV_PIX_FMT_NV12 } from 'node-av/constants';
129
+ *
130
+ * using sharedTexture = SharedTexture.create(hw, { swFormat: AV_PIX_FMT_NV12 });
131
+ * ```
132
+ */
133
+ static create(hardware: HardwareContext, options?: SharedTextureOptions): SharedTexture;
134
+ /**
135
+ * The hardware context used by this sharedTexture.
136
+ */
137
+ get hardware(): HardwareContext;
138
+ /**
139
+ * Current width of the cached HardwareFramesContext.
140
+ */
141
+ get width(): number;
142
+ /**
143
+ * Current height of the cached HardwareFramesContext.
144
+ */
145
+ get height(): number;
146
+ /**
147
+ * Whether this sharedTexture has been disposed.
148
+ */
149
+ get isDisposed(): boolean;
150
+ /**
151
+ * Import an Electron textureInfo as a hardware Frame.
152
+ *
153
+ * Automatically detects the platform from the handle contents,
154
+ * manages the HardwareFramesContext, and creates a zero-copy hardware frame.
155
+ *
156
+ * @param textureInfo - Electron's textureInfo object from paint event
157
+ *
158
+ * @param options - Per-frame options (pts, timeBase)
159
+ *
160
+ * @returns Hardware Frame referencing the GPU texture
161
+ *
162
+ * @throws {Error} If disposed, no valid handle found, or import fails
163
+ *
164
+ * @example
165
+ * ```typescript
166
+ * offscreen.webContents.on('paint', (event) => {
167
+ * const texture = event.texture;
168
+ * if (!texture?.textureInfo) return;
169
+ *
170
+ * using frame = sharedTexture.importTexture(texture.textureInfo, {
171
+ * pts: BigInt(Date.now()) * 1000n,
172
+ * timeBase: { num: 1, den: 1000000 },
173
+ * });
174
+ *
175
+ * texture.release();
176
+ * });
177
+ * ```
178
+ */
179
+ importTexture(textureInfo: TextureInfo, options?: TextureFrameOptions): Frame;
180
+ /**
181
+ * Import a raw SharedTextureHandle as a hardware Frame.
182
+ *
183
+ * Use this when you have the handle directly without the full textureInfo wrapper.
184
+ *
185
+ * @param handle - Platform-specific GPU texture handle
186
+ *
187
+ * @param props - Dimensions, format, and timing options
188
+ *
189
+ * @returns Hardware Frame referencing the GPU texture
190
+ *
191
+ * @throws {Error} If disposed, no valid handle found, or import fails
192
+ *
193
+ * @example
194
+ * ```typescript
195
+ * const frame = sharedTexture.importHandle(handle, {
196
+ * width: 1920,
197
+ * height: 1080,
198
+ * pixelFormat: 'BGRA',
199
+ * pts: 0n,
200
+ * });
201
+ * ```
202
+ */
203
+ importHandle(handle: SharedTextureHandle, props: ImportHandleProps): Frame;
204
+ /**
205
+ * Map a frame to a different hardware format.
206
+ *
207
+ * Handles HardwareFramesContext creation and caching automatically.
208
+ * The mapping context is cached and reused for subsequent calls with the
209
+ * same target hardware and frame dimensions.
210
+ *
211
+ * @param srcFrame - Source frame (e.g., DRM PRIME from importTexture on Linux)
212
+ *
213
+ * @param targetHw - Target hardware context (e.g., VAAPI, Vulkan)
214
+ *
215
+ * @param flags - Mapping flags
216
+ *
217
+ * @returns Mapped frame in target hardware format
218
+ *
219
+ * @throws {FFmpegError} If mapping fails (e.g., unsupported mapping, invalid frames)
220
+ *
221
+ * @example
222
+ * ```typescript
223
+ * import { HardwareContext, SharedTexture } from 'node-av/api';
224
+ * import { AV_HWDEVICE_TYPE_VAAPI } from 'node-av/constants';
225
+ *
226
+ * // Import DRM PRIME frame from Electron shared texture
227
+ * const drmFrame = sharedTexture.importTexture(textureInfo, { pts: 0n });
228
+ *
229
+ * // Map to VAAPI for encoding
230
+ * const vaapiHw = HardwareContext.create(AV_HWDEVICE_TYPE_VAAPI);
231
+ * const vaapiFrame = sharedTexture.mapTo(drmFrame, vaapiHw);
232
+ *
233
+ * // Encode with VAAPI encoder
234
+ * encoder.encode(vaapiFrame);
235
+ * ```
236
+ */
237
+ mapTo(srcFrame: Frame, targetHw: HardwareContext, flags?: number): Frame;
238
+ /**
239
+ * Ensure mapping context exists and matches the target hardware and frame dimensions.
240
+ *
241
+ * Re-creates the context if target hardware changes or dimensions change.
242
+ *
243
+ * @param srcFrame - Source frame to get dimensions from
244
+ *
245
+ * @param targetHw - Target hardware context
246
+ *
247
+ * @internal
248
+ */
249
+ private ensureMappingContext;
250
+ /**
251
+ * Release the cached HardwareFramesContext and mapping context.
252
+ *
253
+ * The HardwareContext is NOT disposed — it belongs to the caller.
254
+ * Safe to call multiple times.
255
+ *
256
+ * @example
257
+ * ```typescript
258
+ * sharedTexture.dispose();
259
+ * ```
260
+ */
261
+ dispose(): void;
262
+ /**
263
+ * Core import logic — dispatches to the correct Frame factory based on handle type.
264
+ *
265
+ * @param handle - Platform-specific GPU texture handle
266
+ *
267
+ * @param width - Texture width in pixels
268
+ *
269
+ * @param height - Texture height in pixels
270
+ *
271
+ * @param swFormat - Software pixel format for HardwareFramesContext
272
+ *
273
+ * @param options - Per-frame timing options
274
+ *
275
+ * @param colorSpace - Electron color space descriptor for mapping to FFmpeg color properties
276
+ *
277
+ * @returns Hardware Frame referencing the GPU texture
278
+ *
279
+ * @internal
280
+ */
281
+ private importFromHandle;
282
+ /**
283
+ * Ensure HardwareFramesContext is created and matches the requested dimensions/format.
284
+ *
285
+ * Re-creates the context only when dimensions or format change.
286
+ * Windows D3D11 does not use this — it passes HardwareDeviceContext directly.
287
+ *
288
+ * @param width - Frame width in pixels
289
+ *
290
+ * @param height - Frame height in pixels
291
+ *
292
+ * @param swFormat - Software pixel format
293
+ *
294
+ * @returns Initialized HardwareFramesContext matching the requested parameters
295
+ *
296
+ * @internal
297
+ */
298
+ private ensureFramesContext;
299
+ /**
300
+ * Resolve a pixel format string (e.g., 'BGRA') to an AVPixelFormat enum value.
301
+ *
302
+ * Falls back to the configured swFormat if the name is not recognized.
303
+ *
304
+ * @param name - Pixel format name string from Electron
305
+ *
306
+ * @returns Resolved AVPixelFormat enum value
307
+ *
308
+ * @internal
309
+ */
310
+ private resolvePixelFormat;
311
+ /**
312
+ * Dispose of the SharedTexture.
313
+ *
314
+ * Implements the Disposable interface for automatic cleanup.
315
+ * Equivalent to calling dispose().
316
+ *
317
+ * @example
318
+ * ```typescript
319
+ * {
320
+ * using sharedTexture = SharedTexture.create(hw);
321
+ * // Use sharedTexture...
322
+ * } // Automatically disposed
323
+ * ```
324
+ *
325
+ * @see {@link dispose} For manual cleanup
326
+ */
327
+ [Symbol.dispose](): void;
328
+ }