node-av-lgpl 0.0.0 → 7.1.0-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 (311) hide show
  1. package/LICENSE.md +22 -0
  2. package/README.md +711 -0
  3. package/dist/api/audio-frame-buffer.d.ts +636 -0
  4. package/dist/api/audio-frame-buffer.js +1027 -0
  5. package/dist/api/audio-frame-buffer.js.map +1 -0
  6. package/dist/api/bitstream-filter.d.ts +938 -0
  7. package/dist/api/bitstream-filter.js +1427 -0
  8. package/dist/api/bitstream-filter.js.map +1 -0
  9. package/dist/api/constants.d.ts +44 -0
  10. package/dist/api/constants.js +45 -0
  11. package/dist/api/constants.js.map +1 -0
  12. package/dist/api/data/test_av1.ivf +0 -0
  13. package/dist/api/data/test_h264.h264 +0 -0
  14. package/dist/api/data/test_hevc.h265 +0 -0
  15. package/dist/api/data/test_mjpeg.mjpeg +0 -0
  16. package/dist/api/data/test_vp8.ivf +0 -0
  17. package/dist/api/data/test_vp9.ivf +0 -0
  18. package/dist/api/decoder.d.ts +1413 -0
  19. package/dist/api/decoder.js +2367 -0
  20. package/dist/api/decoder.js.map +1 -0
  21. package/dist/api/demuxer.d.ts +1295 -0
  22. package/dist/api/demuxer.js +2344 -0
  23. package/dist/api/demuxer.js.map +1 -0
  24. package/dist/api/device.d.ts +589 -0
  25. package/dist/api/device.js +964 -0
  26. package/dist/api/device.js.map +1 -0
  27. package/dist/api/encoder-pool.d.ts +262 -0
  28. package/dist/api/encoder-pool.js +397 -0
  29. package/dist/api/encoder-pool.js.map +1 -0
  30. package/dist/api/encoder.d.ts +1509 -0
  31. package/dist/api/encoder.js +2619 -0
  32. package/dist/api/encoder.js.map +1 -0
  33. package/dist/api/filter-complex.d.ts +828 -0
  34. package/dist/api/filter-complex.js +1661 -0
  35. package/dist/api/filter-complex.js.map +1 -0
  36. package/dist/api/filter-presets.d.ts +800 -0
  37. package/dist/api/filter-presets.js +1554 -0
  38. package/dist/api/filter-presets.js.map +1 -0
  39. package/dist/api/filter.d.ts +1339 -0
  40. package/dist/api/filter.js +2075 -0
  41. package/dist/api/filter.js.map +1 -0
  42. package/dist/api/fmp4-stream.d.ts +797 -0
  43. package/dist/api/fmp4-stream.js +1428 -0
  44. package/dist/api/fmp4-stream.js.map +1 -0
  45. package/dist/api/hardware.d.ts +677 -0
  46. package/dist/api/hardware.js +1300 -0
  47. package/dist/api/hardware.js.map +1 -0
  48. package/dist/api/index.d.ts +21 -0
  49. package/dist/api/index.js +38 -0
  50. package/dist/api/index.js.map +1 -0
  51. package/dist/api/io-stream.d.ts +308 -0
  52. package/dist/api/io-stream.js +358 -0
  53. package/dist/api/io-stream.js.map +1 -0
  54. package/dist/api/muxer.d.ts +1311 -0
  55. package/dist/api/muxer.js +2672 -0
  56. package/dist/api/muxer.js.map +1 -0
  57. package/dist/api/pipeline.d.ts +801 -0
  58. package/dist/api/pipeline.js +1344 -0
  59. package/dist/api/pipeline.js.map +1 -0
  60. package/dist/api/probe.d.ts +128 -0
  61. package/dist/api/probe.js +227 -0
  62. package/dist/api/probe.js.map +1 -0
  63. package/dist/api/rtp-stream.d.ts +497 -0
  64. package/dist/api/rtp-stream.js +1131 -0
  65. package/dist/api/rtp-stream.js.map +1 -0
  66. package/dist/api/scaler.d.ts +561 -0
  67. package/dist/api/scaler.js +918 -0
  68. package/dist/api/scaler.js.map +1 -0
  69. package/dist/api/types.d.ts +17 -0
  70. package/dist/api/types.js +2 -0
  71. package/dist/api/types.js.map +1 -0
  72. package/dist/api/utilities/async-queue.d.ts +149 -0
  73. package/dist/api/utilities/async-queue.js +254 -0
  74. package/dist/api/utilities/async-queue.js.map +1 -0
  75. package/dist/api/utilities/audio-sample.d.ts +117 -0
  76. package/dist/api/utilities/audio-sample.js +112 -0
  77. package/dist/api/utilities/audio-sample.js.map +1 -0
  78. package/dist/api/utilities/audio-transcode.d.ts +20 -0
  79. package/dist/api/utilities/audio-transcode.js +27 -0
  80. package/dist/api/utilities/audio-transcode.js.map +1 -0
  81. package/dist/api/utilities/channel-layout.d.ts +76 -0
  82. package/dist/api/utilities/channel-layout.js +80 -0
  83. package/dist/api/utilities/channel-layout.js.map +1 -0
  84. package/dist/api/utilities/codec-format.d.ts +87 -0
  85. package/dist/api/utilities/codec-format.js +117 -0
  86. package/dist/api/utilities/codec-format.js.map +1 -0
  87. package/dist/api/utilities/context-options.d.ts +25 -0
  88. package/dist/api/utilities/context-options.js +23 -0
  89. package/dist/api/utilities/context-options.js.map +1 -0
  90. package/dist/api/utilities/electron-shared-texture.d.ts +368 -0
  91. package/dist/api/utilities/electron-shared-texture.js +540 -0
  92. package/dist/api/utilities/electron-shared-texture.js.map +1 -0
  93. package/dist/api/utilities/image.d.ts +207 -0
  94. package/dist/api/utilities/image.js +213 -0
  95. package/dist/api/utilities/image.js.map +1 -0
  96. package/dist/api/utilities/index.d.ts +14 -0
  97. package/dist/api/utilities/index.js +27 -0
  98. package/dist/api/utilities/index.js.map +1 -0
  99. package/dist/api/utilities/live-decoding.d.ts +15 -0
  100. package/dist/api/utilities/live-decoding.js +32 -0
  101. package/dist/api/utilities/live-decoding.js.map +1 -0
  102. package/dist/api/utilities/media-type.d.ts +49 -0
  103. package/dist/api/utilities/media-type.js +53 -0
  104. package/dist/api/utilities/media-type.js.map +1 -0
  105. package/dist/api/utilities/packet-age-watchdog.d.ts +198 -0
  106. package/dist/api/utilities/packet-age-watchdog.js +594 -0
  107. package/dist/api/utilities/packet-age-watchdog.js.map +1 -0
  108. package/dist/api/utilities/pixel-format.d.ts +89 -0
  109. package/dist/api/utilities/pixel-format.js +97 -0
  110. package/dist/api/utilities/pixel-format.js.map +1 -0
  111. package/dist/api/utilities/sample-format.d.ts +129 -0
  112. package/dist/api/utilities/sample-format.js +141 -0
  113. package/dist/api/utilities/sample-format.js.map +1 -0
  114. package/dist/api/utilities/scale-size.d.ts +51 -0
  115. package/dist/api/utilities/scale-size.js +55 -0
  116. package/dist/api/utilities/scale-size.js.map +1 -0
  117. package/dist/api/utilities/scheduler.d.ts +138 -0
  118. package/dist/api/utilities/scheduler.js +98 -0
  119. package/dist/api/utilities/scheduler.js.map +1 -0
  120. package/dist/api/utilities/streaming.d.ts +186 -0
  121. package/dist/api/utilities/streaming.js +309 -0
  122. package/dist/api/utilities/streaming.js.map +1 -0
  123. package/dist/api/utilities/timestamp.d.ts +193 -0
  124. package/dist/api/utilities/timestamp.js +206 -0
  125. package/dist/api/utilities/timestamp.js.map +1 -0
  126. package/dist/api/utilities/video-transcode.d.ts +218 -0
  127. package/dist/api/utilities/video-transcode.js +624 -0
  128. package/dist/api/utilities/video-transcode.js.map +1 -0
  129. package/dist/api/utilities/whisper-model.d.ts +330 -0
  130. package/dist/api/utilities/whisper-model.js +587 -0
  131. package/dist/api/utilities/whisper-model.js.map +1 -0
  132. package/dist/api/utils.d.ts +19 -0
  133. package/dist/api/utils.js +39 -0
  134. package/dist/api/utils.js.map +1 -0
  135. package/dist/api/webrtc-stream.d.ts +294 -0
  136. package/dist/api/webrtc-stream.js +546 -0
  137. package/dist/api/webrtc-stream.js.map +1 -0
  138. package/dist/api/whisper.d.ts +326 -0
  139. package/dist/api/whisper.js +402 -0
  140. package/dist/api/whisper.js.map +1 -0
  141. package/dist/constants/bsf-options.d.ts +364 -0
  142. package/dist/constants/bsf-options.js +7 -0
  143. package/dist/constants/bsf-options.js.map +1 -0
  144. package/dist/constants/channel-layouts.d.ts +53 -0
  145. package/dist/constants/channel-layouts.js +57 -0
  146. package/dist/constants/channel-layouts.js.map +1 -0
  147. package/dist/constants/constants.d.ts +2435 -0
  148. package/dist/constants/constants.js +1989 -0
  149. package/dist/constants/constants.js.map +1 -0
  150. package/dist/constants/decoders.d.ts +651 -0
  151. package/dist/constants/decoders.js +641 -0
  152. package/dist/constants/decoders.js.map +1 -0
  153. package/dist/constants/encoders.d.ts +314 -0
  154. package/dist/constants/encoders.js +309 -0
  155. package/dist/constants/encoders.js.map +1 -0
  156. package/dist/constants/filter-options.d.ts +12099 -0
  157. package/dist/constants/filter-options.js +7 -0
  158. package/dist/constants/filter-options.js.map +1 -0
  159. package/dist/constants/format-options.d.ts +4319 -0
  160. package/dist/constants/format-options.js +7 -0
  161. package/dist/constants/format-options.js.map +1 -0
  162. package/dist/constants/formats.d.ts +18 -0
  163. package/dist/constants/formats.js +7 -0
  164. package/dist/constants/formats.js.map +1 -0
  165. package/dist/constants/hardware.d.ts +26 -0
  166. package/dist/constants/hardware.js +27 -0
  167. package/dist/constants/hardware.js.map +1 -0
  168. package/dist/constants/index.d.ts +10 -0
  169. package/dist/constants/index.js +6 -0
  170. package/dist/constants/index.js.map +1 -0
  171. package/dist/constants/options.d.ts +6217 -0
  172. package/dist/constants/options.js +7 -0
  173. package/dist/constants/options.js.map +1 -0
  174. package/dist/ffmpeg/index.d.ts +101 -0
  175. package/dist/ffmpeg/index.js +161 -0
  176. package/dist/ffmpeg/index.js.map +1 -0
  177. package/dist/ffmpeg/version.d.ts +6 -0
  178. package/dist/ffmpeg/version.js +7 -0
  179. package/dist/ffmpeg/version.js.map +1 -0
  180. package/dist/index.d.ts +4 -0
  181. package/dist/index.js +9 -0
  182. package/dist/index.js.map +1 -0
  183. package/dist/lib/audio-fifo.d.ts +399 -0
  184. package/dist/lib/audio-fifo.js +431 -0
  185. package/dist/lib/audio-fifo.js.map +1 -0
  186. package/dist/lib/binding.d.ts +242 -0
  187. package/dist/lib/binding.js +102 -0
  188. package/dist/lib/binding.js.map +1 -0
  189. package/dist/lib/bitstream-filter-context.d.ts +381 -0
  190. package/dist/lib/bitstream-filter-context.js +443 -0
  191. package/dist/lib/bitstream-filter-context.js.map +1 -0
  192. package/dist/lib/bitstream-filter.d.ts +140 -0
  193. package/dist/lib/bitstream-filter.js +154 -0
  194. package/dist/lib/bitstream-filter.js.map +1 -0
  195. package/dist/lib/codec-context.d.ts +1069 -0
  196. package/dist/lib/codec-context.js +1336 -0
  197. package/dist/lib/codec-context.js.map +1 -0
  198. package/dist/lib/codec-parameters.d.ts +664 -0
  199. package/dist/lib/codec-parameters.js +813 -0
  200. package/dist/lib/codec-parameters.js.map +1 -0
  201. package/dist/lib/codec-parser.d.ts +201 -0
  202. package/dist/lib/codec-parser.js +213 -0
  203. package/dist/lib/codec-parser.js.map +1 -0
  204. package/dist/lib/codec.d.ts +617 -0
  205. package/dist/lib/codec.js +746 -0
  206. package/dist/lib/codec.js.map +1 -0
  207. package/dist/lib/device.d.ts +294 -0
  208. package/dist/lib/device.js +326 -0
  209. package/dist/lib/device.js.map +1 -0
  210. package/dist/lib/dictionary.d.ts +333 -0
  211. package/dist/lib/dictionary.js +372 -0
  212. package/dist/lib/dictionary.js.map +1 -0
  213. package/dist/lib/error.d.ts +311 -0
  214. package/dist/lib/error.js +395 -0
  215. package/dist/lib/error.js.map +1 -0
  216. package/dist/lib/fifo.d.ts +416 -0
  217. package/dist/lib/fifo.js +453 -0
  218. package/dist/lib/fifo.js.map +1 -0
  219. package/dist/lib/filter-context.d.ts +714 -0
  220. package/dist/lib/filter-context.js +783 -0
  221. package/dist/lib/filter-context.js.map +1 -0
  222. package/dist/lib/filter-graph-segment.d.ts +161 -0
  223. package/dist/lib/filter-graph-segment.js +172 -0
  224. package/dist/lib/filter-graph-segment.js.map +1 -0
  225. package/dist/lib/filter-graph.d.ts +641 -0
  226. package/dist/lib/filter-graph.js +704 -0
  227. package/dist/lib/filter-graph.js.map +1 -0
  228. package/dist/lib/filter-inout.d.ts +202 -0
  229. package/dist/lib/filter-inout.js +261 -0
  230. package/dist/lib/filter-inout.js.map +1 -0
  231. package/dist/lib/filter.d.ts +243 -0
  232. package/dist/lib/filter.js +272 -0
  233. package/dist/lib/filter.js.map +1 -0
  234. package/dist/lib/format-context.d.ts +1335 -0
  235. package/dist/lib/format-context.js +1455 -0
  236. package/dist/lib/format-context.js.map +1 -0
  237. package/dist/lib/frame-utils.d.ts +116 -0
  238. package/dist/lib/frame-utils.js +98 -0
  239. package/dist/lib/frame-utils.js.map +1 -0
  240. package/dist/lib/frame.d.ts +1315 -0
  241. package/dist/lib/frame.js +1535 -0
  242. package/dist/lib/frame.js.map +1 -0
  243. package/dist/lib/hardware-device-context.d.ts +362 -0
  244. package/dist/lib/hardware-device-context.js +383 -0
  245. package/dist/lib/hardware-device-context.js.map +1 -0
  246. package/dist/lib/hardware-frames-context.d.ts +418 -0
  247. package/dist/lib/hardware-frames-context.js +471 -0
  248. package/dist/lib/hardware-frames-context.js.map +1 -0
  249. package/dist/lib/index.d.ts +35 -0
  250. package/dist/lib/index.js +60 -0
  251. package/dist/lib/index.js.map +1 -0
  252. package/dist/lib/input-format.d.ts +249 -0
  253. package/dist/lib/input-format.js +306 -0
  254. package/dist/lib/input-format.js.map +1 -0
  255. package/dist/lib/io-context.d.ts +698 -0
  256. package/dist/lib/io-context.js +771 -0
  257. package/dist/lib/io-context.js.map +1 -0
  258. package/dist/lib/log.d.ts +174 -0
  259. package/dist/lib/log.js +184 -0
  260. package/dist/lib/log.js.map +1 -0
  261. package/dist/lib/native-types.d.ts +1024 -0
  262. package/dist/lib/native-types.js +2 -0
  263. package/dist/lib/native-types.js.map +1 -0
  264. package/dist/lib/option.d.ts +953 -0
  265. package/dist/lib/option.js +1607 -0
  266. package/dist/lib/option.js.map +1 -0
  267. package/dist/lib/output-format.d.ts +222 -0
  268. package/dist/lib/output-format.js +259 -0
  269. package/dist/lib/output-format.js.map +1 -0
  270. package/dist/lib/packet.d.ts +521 -0
  271. package/dist/lib/packet.js +613 -0
  272. package/dist/lib/packet.js.map +1 -0
  273. package/dist/lib/rational.d.ts +251 -0
  274. package/dist/lib/rational.js +278 -0
  275. package/dist/lib/rational.js.map +1 -0
  276. package/dist/lib/software-resample-context.d.ts +552 -0
  277. package/dist/lib/software-resample-context.js +592 -0
  278. package/dist/lib/software-resample-context.js.map +1 -0
  279. package/dist/lib/software-scale-context.d.ts +344 -0
  280. package/dist/lib/software-scale-context.js +366 -0
  281. package/dist/lib/software-scale-context.js.map +1 -0
  282. package/dist/lib/stream.d.ts +383 -0
  283. package/dist/lib/stream.js +524 -0
  284. package/dist/lib/stream.js.map +1 -0
  285. package/dist/lib/sync-queue.d.ts +179 -0
  286. package/dist/lib/sync-queue.js +197 -0
  287. package/dist/lib/sync-queue.js.map +1 -0
  288. package/dist/lib/types.d.ts +34 -0
  289. package/dist/lib/types.js +2 -0
  290. package/dist/lib/types.js.map +1 -0
  291. package/dist/lib/utilities.d.ts +1198 -0
  292. package/dist/lib/utilities.js +1302 -0
  293. package/dist/lib/utilities.js.map +1 -0
  294. package/dist/utils/electron.d.ts +49 -0
  295. package/dist/utils/electron.js +63 -0
  296. package/dist/utils/electron.js.map +1 -0
  297. package/dist/utils/index.d.ts +6 -0
  298. package/dist/utils/index.js +7 -0
  299. package/dist/utils/index.js.map +1 -0
  300. package/dist/utils/libc.d.ts +11 -0
  301. package/dist/utils/libc.js +35 -0
  302. package/dist/utils/libc.js.map +1 -0
  303. package/dist/utils/variant.d.ts +26 -0
  304. package/dist/utils/variant.js +31 -0
  305. package/dist/utils/variant.js.map +1 -0
  306. package/dist/webrtc/index.d.ts +4 -0
  307. package/dist/webrtc/index.js +7 -0
  308. package/dist/webrtc/index.js.map +1 -0
  309. package/install/check.js +124 -0
  310. package/install/ffmpeg.js +66 -0
  311. package/package.json +165 -3
@@ -0,0 +1,368 @@
1
+ import { Frame } from '../../lib/frame.js';
2
+ import type { AVColorPrimaries, AVColorRange, AVColorSpace, AVColorTransferCharacteristic, 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
+ * Map an Electron color space descriptor to FFmpeg color properties.
74
+ *
75
+ * Translates Electron's `textureInfo.colorSpace` strings (range, primaries,
76
+ * transfer, matrix) to the corresponding `AVCOL_*` enums. Unknown values map to
77
+ * the `UNSPECIFIED` variants; a missing descriptor falls back to the BGRA/sRGB
78
+ * defaults typical of Electron textures.
79
+ *
80
+ * @param colorSpace - Electron color space descriptor from textureInfo.colorSpace
81
+ *
82
+ * @returns Mapped FFmpeg color properties (colorRange, colorPrimaries, colorTrc, colorSpace) with fallbacks
83
+ *
84
+ * @internal
85
+ */
86
+ export declare function mapColorSpace(colorSpace?: TextureColorSpace): {
87
+ colorRange: AVColorRange;
88
+ colorPrimaries: AVColorPrimaries;
89
+ colorTrc: AVColorTransferCharacteristic;
90
+ colorSpace: AVColorSpace;
91
+ };
92
+ /**
93
+ * Resolve the software pixel format for a hardware mapping context.
94
+ *
95
+ * The mapping context's sw_format must be the *software* layout of the frames
96
+ * (e.g. NV12, BGRA), never a hardware wrapper format like AV_PIX_FMT_DRM_PRIME /
97
+ * D3D11 / VIDEOTOOLBOX (which is what `srcFrame.format` is for an imported GPU
98
+ * frame). Prefer the source frame's own hwframe context software format (set on
99
+ * macOS IOSurface imports), and fall back to the layout used at the last import
100
+ * for bare frames (Windows D3D11, Linux DMA-BUF) that carry no hwframe context.
101
+ *
102
+ * @param srcFrame - The source hardware frame being mapped
103
+ *
104
+ * @param fallback - Software format to use when the frame carries no hwframe context
105
+ *
106
+ * @returns The software pixel format to set on the mapping context
107
+ *
108
+ * @internal
109
+ */
110
+ export declare function resolveMappingSwFormat(srcFrame: Frame, fallback: AVPixelFormat): AVPixelFormat;
111
+ /**
112
+ * High-level GPU texture import for Electron shared textures.
113
+ *
114
+ * Handles platform detection (macOS IOSurface, Windows D3D11,
115
+ * Linux DMA-BUF), HardwareFramesContext lifecycle, and format mapping automatically.
116
+ *
117
+ * @example
118
+ * ```typescript
119
+ * import { HardwareContext, SharedTexture } from 'node-av/api';
120
+ *
121
+ * const hw = HardwareContext.auto();
122
+ * using sharedTexture = SharedTexture.create(hw);
123
+ *
124
+ * // In Electron paint event:
125
+ * offscreen.webContents.on('paint', (event) => {
126
+ * const texture = event.texture;
127
+ * if (!texture?.textureInfo) return;
128
+ *
129
+ * using frame = sharedTexture.importTexture(texture.textureInfo, { pts: 0n });
130
+ * // frame is a hardware Frame ready for encoding/filtering
131
+ *
132
+ * texture.release();
133
+ * });
134
+ * ```
135
+ *
136
+ * @see {@link HardwareContext} For hardware acceleration setup
137
+ * @see {@link Frame} For frame operations
138
+ */
139
+ export declare class SharedTexture implements Disposable {
140
+ private _hardware;
141
+ private _framesCtx;
142
+ private _currentWidth;
143
+ private _currentHeight;
144
+ private _swFormat;
145
+ private _importSwFormat;
146
+ private _isDisposed;
147
+ private _mappingCtx;
148
+ private _mappingHw;
149
+ private constructor();
150
+ /**
151
+ * Create a SharedTexture.
152
+ *
153
+ * @param hardware - Initialized hardware context (from HardwareContext.auto() or HardwareContext.create())
154
+ *
155
+ * @param options - Optional configuration overrides
156
+ *
157
+ * @returns SharedTexture instance
158
+ *
159
+ * @example
160
+ * ```typescript
161
+ * const hw = HardwareContext.auto();
162
+ * using sharedTexture = SharedTexture.create(hw);
163
+ * ```
164
+ *
165
+ * @example
166
+ * ```typescript
167
+ * // With explicit software format
168
+ * import { AV_PIX_FMT_NV12 } from 'node-av/constants';
169
+ *
170
+ * using sharedTexture = SharedTexture.create(hw, { swFormat: AV_PIX_FMT_NV12 });
171
+ * ```
172
+ */
173
+ static create(hardware: HardwareContext, options?: SharedTextureOptions): SharedTexture;
174
+ /**
175
+ * The hardware context used by this sharedTexture.
176
+ */
177
+ get hardware(): HardwareContext;
178
+ /**
179
+ * Current width of the cached HardwareFramesContext.
180
+ */
181
+ get width(): number;
182
+ /**
183
+ * Current height of the cached HardwareFramesContext.
184
+ */
185
+ get height(): number;
186
+ /**
187
+ * Whether this sharedTexture has been disposed.
188
+ */
189
+ get isDisposed(): boolean;
190
+ /**
191
+ * Import an Electron textureInfo as a hardware Frame.
192
+ *
193
+ * Automatically detects the platform from the handle contents,
194
+ * manages the HardwareFramesContext, and creates a zero-copy hardware frame.
195
+ *
196
+ * @param textureInfo - Electron's textureInfo object from paint event
197
+ *
198
+ * @param options - Per-frame options (pts, timeBase)
199
+ *
200
+ * @returns Hardware Frame referencing the GPU texture
201
+ *
202
+ * @throws {Error} If disposed, no valid handle found, or import fails
203
+ *
204
+ * @example
205
+ * ```typescript
206
+ * offscreen.webContents.on('paint', (event) => {
207
+ * const texture = event.texture;
208
+ * if (!texture?.textureInfo) return;
209
+ *
210
+ * using frame = sharedTexture.importTexture(texture.textureInfo, {
211
+ * pts: BigInt(Date.now()) * 1000n,
212
+ * timeBase: { num: 1, den: 1000000 },
213
+ * });
214
+ *
215
+ * texture.release();
216
+ * });
217
+ * ```
218
+ */
219
+ importTexture(textureInfo: TextureInfo, options?: TextureFrameOptions): Frame;
220
+ /**
221
+ * Import a raw SharedTextureHandle as a hardware Frame.
222
+ *
223
+ * Use this when you have the handle directly without the full textureInfo wrapper.
224
+ *
225
+ * @param handle - Platform-specific GPU texture handle
226
+ *
227
+ * @param props - Dimensions, format, and timing options
228
+ *
229
+ * @returns Hardware Frame referencing the GPU texture
230
+ *
231
+ * @throws {Error} If disposed, no valid handle found, or import fails
232
+ *
233
+ * @example
234
+ * ```typescript
235
+ * const frame = sharedTexture.importHandle(handle, {
236
+ * width: 1920,
237
+ * height: 1080,
238
+ * pixelFormat: 'BGRA',
239
+ * pts: 0n,
240
+ * });
241
+ * ```
242
+ */
243
+ importHandle(handle: SharedTextureHandle, props: ImportHandleProps): Frame;
244
+ /**
245
+ * Map a frame to a different hardware format.
246
+ *
247
+ * Handles HardwareFramesContext creation and caching automatically.
248
+ * The mapping context is cached and reused for subsequent calls with the
249
+ * same target hardware and frame dimensions.
250
+ *
251
+ * @param srcFrame - Source frame (e.g., DRM PRIME from importTexture on Linux)
252
+ *
253
+ * @param targetHw - Target hardware context (e.g., VAAPI, Vulkan)
254
+ *
255
+ * @param flags - Mapping flags
256
+ *
257
+ * @returns Mapped frame in target hardware format
258
+ *
259
+ * @throws {FFmpegError} If mapping fails (e.g., unsupported mapping, invalid frames)
260
+ *
261
+ * @example
262
+ * ```typescript
263
+ * import { HardwareContext, SharedTexture } from 'node-av/api';
264
+ * import { AV_HWDEVICE_TYPE_VAAPI } from 'node-av/constants';
265
+ *
266
+ * // Import DRM PRIME frame from Electron shared texture
267
+ * const drmFrame = sharedTexture.importTexture(textureInfo, { pts: 0n });
268
+ *
269
+ * // Map to VAAPI for encoding
270
+ * const vaapiHw = HardwareContext.create(AV_HWDEVICE_TYPE_VAAPI);
271
+ * const vaapiFrame = sharedTexture.mapTo(drmFrame, vaapiHw);
272
+ *
273
+ * // Encode with VAAPI encoder
274
+ * encoder.encode(vaapiFrame);
275
+ * ```
276
+ */
277
+ mapTo(srcFrame: Frame, targetHw: HardwareContext, flags?: number): Frame;
278
+ /**
279
+ * Ensure mapping context exists and matches the target hardware and frame dimensions.
280
+ *
281
+ * Re-creates the context if target hardware changes or dimensions change.
282
+ *
283
+ * @param srcFrame - Source frame to get dimensions from
284
+ *
285
+ * @param targetHw - Target hardware context
286
+ *
287
+ * @internal
288
+ */
289
+ private ensureMappingContext;
290
+ /**
291
+ * Release the cached HardwareFramesContext and mapping context.
292
+ *
293
+ * The HardwareContext is NOT disposed — it belongs to the caller.
294
+ * Safe to call multiple times.
295
+ *
296
+ * @example
297
+ * ```typescript
298
+ * sharedTexture.dispose();
299
+ * ```
300
+ */
301
+ dispose(): void;
302
+ /**
303
+ * Core import logic — dispatches to the correct Frame factory based on handle type.
304
+ *
305
+ * @param handle - Platform-specific GPU texture handle
306
+ *
307
+ * @param width - Texture width in pixels
308
+ *
309
+ * @param height - Texture height in pixels
310
+ *
311
+ * @param swFormat - Software pixel format for HardwareFramesContext
312
+ *
313
+ * @param options - Per-frame timing options
314
+ *
315
+ * @param colorSpace - Electron color space descriptor for mapping to FFmpeg color properties
316
+ *
317
+ * @returns Hardware Frame referencing the GPU texture
318
+ *
319
+ * @internal
320
+ */
321
+ private importFromHandle;
322
+ /**
323
+ * Ensure HardwareFramesContext is created and matches the requested dimensions/format.
324
+ *
325
+ * Re-creates the context only when dimensions or format change.
326
+ * Windows D3D11 does not use this — it passes HardwareDeviceContext directly.
327
+ *
328
+ * @param width - Frame width in pixels
329
+ *
330
+ * @param height - Frame height in pixels
331
+ *
332
+ * @param swFormat - Software pixel format
333
+ *
334
+ * @returns Initialized HardwareFramesContext matching the requested parameters
335
+ *
336
+ * @internal
337
+ */
338
+ private ensureFramesContext;
339
+ /**
340
+ * Resolve a pixel format string (e.g., 'BGRA') to an AVPixelFormat enum value.
341
+ *
342
+ * Falls back to the configured swFormat if the name is not recognized.
343
+ *
344
+ * @param name - Pixel format name string from Electron
345
+ *
346
+ * @returns Resolved AVPixelFormat enum value
347
+ *
348
+ * @internal
349
+ */
350
+ private resolvePixelFormat;
351
+ /**
352
+ * Dispose of the SharedTexture.
353
+ *
354
+ * Implements the Disposable interface for automatic cleanup.
355
+ * Equivalent to calling dispose().
356
+ *
357
+ * @example
358
+ * ```typescript
359
+ * {
360
+ * using sharedTexture = SharedTexture.create(hw);
361
+ * // Use sharedTexture...
362
+ * } // Automatically disposed
363
+ * ```
364
+ *
365
+ * @see {@link dispose} For manual cleanup
366
+ */
367
+ [Symbol.dispose](): void;
368
+ }