node-av-light 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,540 @@
1
+ import { AVCOL_PRI_BT2020, AVCOL_PRI_BT470BG, AVCOL_PRI_BT470M, AVCOL_PRI_BT709, AVCOL_PRI_EBU3213, AVCOL_PRI_FILM, AVCOL_PRI_SMPTE170M, AVCOL_PRI_SMPTE240M, AVCOL_PRI_SMPTE428, AVCOL_PRI_SMPTE431, AVCOL_PRI_SMPTE432, AVCOL_PRI_UNSPECIFIED, AVCOL_RANGE_JPEG, AVCOL_RANGE_MPEG, AVCOL_RANGE_UNSPECIFIED, AVCOL_SPC_BT2020_NCL, AVCOL_SPC_BT470BG, AVCOL_SPC_BT709, AVCOL_SPC_FCC, AVCOL_SPC_RGB, AVCOL_SPC_SMPTE170M, AVCOL_SPC_SMPTE240M, AVCOL_SPC_UNSPECIFIED, AVCOL_SPC_YCGCO, AVCOL_TRC_ARIB_STD_B67, AVCOL_TRC_BT1361_ECG, AVCOL_TRC_BT2020_10, AVCOL_TRC_BT2020_12, AVCOL_TRC_BT709, AVCOL_TRC_GAMMA22, AVCOL_TRC_GAMMA28, AVCOL_TRC_IEC61966_2_1, AVCOL_TRC_IEC61966_2_4, AVCOL_TRC_LINEAR, AVCOL_TRC_LOG, AVCOL_TRC_LOG_SQRT, AVCOL_TRC_SMPTE170M, AVCOL_TRC_SMPTE2084, AVCOL_TRC_SMPTE240M, AVCOL_TRC_SMPTE428, AVCOL_TRC_UNSPECIFIED, AV_HWFRAME_MAP_READ, AV_HWFRAME_MAP_WRITE, AV_PIX_FMT_BGRA, AV_PIX_FMT_NONE, } from '../../constants/constants.js';
2
+ import { FFmpegError } from '../../lib/error.js';
3
+ import { Frame } from '../../lib/frame.js';
4
+ import { HardwareFramesContext } from '../../lib/hardware-frames-context.js';
5
+ import { PixelFormatUtils } from './pixel-format.js';
6
+ const RANGE_MAP = {
7
+ full: AVCOL_RANGE_JPEG,
8
+ limited: AVCOL_RANGE_MPEG,
9
+ };
10
+ const PRIMARIES_MAP = {
11
+ bt709: AVCOL_PRI_BT709,
12
+ bt470m: AVCOL_PRI_BT470M,
13
+ bt470bg: AVCOL_PRI_BT470BG,
14
+ smpte170m: AVCOL_PRI_SMPTE170M,
15
+ smpte240m: AVCOL_PRI_SMPTE240M,
16
+ film: AVCOL_PRI_FILM,
17
+ bt2020: AVCOL_PRI_BT2020,
18
+ 'smptest428-1': AVCOL_PRI_SMPTE428,
19
+ 'smptest431-2': AVCOL_PRI_SMPTE431,
20
+ p3: AVCOL_PRI_SMPTE432,
21
+ 'ebu-3213-e': AVCOL_PRI_EBU3213,
22
+ };
23
+ const TRANSFER_MAP = {
24
+ bt709: AVCOL_TRC_BT709,
25
+ 'bt709-apple': AVCOL_TRC_BT709,
26
+ gamma22: AVCOL_TRC_GAMMA22,
27
+ gamma28: AVCOL_TRC_GAMMA28,
28
+ smpte170m: AVCOL_TRC_SMPTE170M,
29
+ smpte240m: AVCOL_TRC_SMPTE240M,
30
+ linear: AVCOL_TRC_LINEAR,
31
+ log: AVCOL_TRC_LOG,
32
+ 'log-sqrt': AVCOL_TRC_LOG_SQRT,
33
+ 'iec61966-2-4': AVCOL_TRC_IEC61966_2_4,
34
+ 'bt1361-ecg': AVCOL_TRC_BT1361_ECG,
35
+ srgb: AVCOL_TRC_IEC61966_2_1,
36
+ 'bt2020-10': AVCOL_TRC_BT2020_10,
37
+ 'bt2020-12': AVCOL_TRC_BT2020_12,
38
+ pq: AVCOL_TRC_SMPTE2084,
39
+ 'smptest428-1': AVCOL_TRC_SMPTE428,
40
+ hlg: AVCOL_TRC_ARIB_STD_B67,
41
+ };
42
+ const MATRIX_MAP = {
43
+ rgb: AVCOL_SPC_RGB,
44
+ gbr: AVCOL_SPC_RGB,
45
+ bt709: AVCOL_SPC_BT709,
46
+ fcc: AVCOL_SPC_FCC,
47
+ bt470bg: AVCOL_SPC_BT470BG,
48
+ smpte170m: AVCOL_SPC_SMPTE170M,
49
+ smpte240m: AVCOL_SPC_SMPTE240M,
50
+ ycocg: AVCOL_SPC_YCGCO,
51
+ 'bt2020-ncl': AVCOL_SPC_BT2020_NCL,
52
+ };
53
+ /**
54
+ * Map an Electron color space descriptor to FFmpeg color properties.
55
+ *
56
+ * Translates Electron's `textureInfo.colorSpace` strings (range, primaries,
57
+ * transfer, matrix) to the corresponding `AVCOL_*` enums. Unknown values map to
58
+ * the `UNSPECIFIED` variants; a missing descriptor falls back to the BGRA/sRGB
59
+ * defaults typical of Electron textures.
60
+ *
61
+ * @param colorSpace - Electron color space descriptor from textureInfo.colorSpace
62
+ *
63
+ * @returns Mapped FFmpeg color properties (colorRange, colorPrimaries, colorTrc, colorSpace) with fallbacks
64
+ *
65
+ * @internal
66
+ */
67
+ export function mapColorSpace(colorSpace) {
68
+ if (!colorSpace) {
69
+ // Fallback: Electron textures are typically BGRA (full range, sRGB)
70
+ return {
71
+ colorRange: AVCOL_RANGE_JPEG,
72
+ colorPrimaries: AVCOL_PRI_BT709,
73
+ colorTrc: AVCOL_TRC_IEC61966_2_1,
74
+ colorSpace: AVCOL_SPC_RGB,
75
+ };
76
+ }
77
+ return {
78
+ colorRange: RANGE_MAP[colorSpace.range ?? ''] ?? AVCOL_RANGE_UNSPECIFIED,
79
+ colorPrimaries: PRIMARIES_MAP[colorSpace.primaries ?? ''] ?? AVCOL_PRI_UNSPECIFIED,
80
+ colorTrc: TRANSFER_MAP[colorSpace.transfer ?? ''] ?? AVCOL_TRC_UNSPECIFIED,
81
+ colorSpace: MATRIX_MAP[colorSpace.matrix ?? ''] ?? AVCOL_SPC_UNSPECIFIED,
82
+ };
83
+ }
84
+ /**
85
+ * Resolve the software pixel format for a hardware mapping context.
86
+ *
87
+ * The mapping context's sw_format must be the *software* layout of the frames
88
+ * (e.g. NV12, BGRA), never a hardware wrapper format like AV_PIX_FMT_DRM_PRIME /
89
+ * D3D11 / VIDEOTOOLBOX (which is what `srcFrame.format` is for an imported GPU
90
+ * frame). Prefer the source frame's own hwframe context software format (set on
91
+ * macOS IOSurface imports), and fall back to the layout used at the last import
92
+ * for bare frames (Windows D3D11, Linux DMA-BUF) that carry no hwframe context.
93
+ *
94
+ * @param srcFrame - The source hardware frame being mapped
95
+ *
96
+ * @param fallback - Software format to use when the frame carries no hwframe context
97
+ *
98
+ * @returns The software pixel format to set on the mapping context
99
+ *
100
+ * @internal
101
+ */
102
+ export function resolveMappingSwFormat(srcFrame, fallback) {
103
+ return srcFrame.hwFramesCtx?.swFormat ?? fallback;
104
+ }
105
+ /**
106
+ * High-level GPU texture import for Electron shared textures.
107
+ *
108
+ * Handles platform detection (macOS IOSurface, Windows D3D11,
109
+ * Linux DMA-BUF), HardwareFramesContext lifecycle, and format mapping automatically.
110
+ *
111
+ * @example
112
+ * ```typescript
113
+ * import { HardwareContext, SharedTexture } from 'node-av/api';
114
+ *
115
+ * const hw = HardwareContext.auto();
116
+ * using sharedTexture = SharedTexture.create(hw);
117
+ *
118
+ * // In Electron paint event:
119
+ * offscreen.webContents.on('paint', (event) => {
120
+ * const texture = event.texture;
121
+ * if (!texture?.textureInfo) return;
122
+ *
123
+ * using frame = sharedTexture.importTexture(texture.textureInfo, { pts: 0n });
124
+ * // frame is a hardware Frame ready for encoding/filtering
125
+ *
126
+ * texture.release();
127
+ * });
128
+ * ```
129
+ *
130
+ * @see {@link HardwareContext} For hardware acceleration setup
131
+ * @see {@link Frame} For frame operations
132
+ */
133
+ export class SharedTexture {
134
+ _hardware;
135
+ _framesCtx = null;
136
+ _currentWidth = 0;
137
+ _currentHeight = 0;
138
+ _swFormat;
139
+ _importSwFormat;
140
+ _isDisposed = false;
141
+ // Mapping context cache for mapTo() helper
142
+ _mappingCtx = null;
143
+ _mappingHw = null;
144
+ constructor(hardware, options) {
145
+ this._hardware = hardware;
146
+ this._swFormat = options.swFormat ?? AV_PIX_FMT_BGRA;
147
+ this._importSwFormat = this._swFormat;
148
+ if (options.width)
149
+ this._currentWidth = options.width;
150
+ if (options.height)
151
+ this._currentHeight = options.height;
152
+ }
153
+ /**
154
+ * Create a SharedTexture.
155
+ *
156
+ * @param hardware - Initialized hardware context (from HardwareContext.auto() or HardwareContext.create())
157
+ *
158
+ * @param options - Optional configuration overrides
159
+ *
160
+ * @returns SharedTexture instance
161
+ *
162
+ * @example
163
+ * ```typescript
164
+ * const hw = HardwareContext.auto();
165
+ * using sharedTexture = SharedTexture.create(hw);
166
+ * ```
167
+ *
168
+ * @example
169
+ * ```typescript
170
+ * // With explicit software format
171
+ * import { AV_PIX_FMT_NV12 } from 'node-av/constants';
172
+ *
173
+ * using sharedTexture = SharedTexture.create(hw, { swFormat: AV_PIX_FMT_NV12 });
174
+ * ```
175
+ */
176
+ static create(hardware, options = {}) {
177
+ if (!hardware || hardware.isDisposed) {
178
+ throw new Error('SharedTexture requires a valid, non-disposed HardwareContext');
179
+ }
180
+ return new SharedTexture(hardware, options);
181
+ }
182
+ /**
183
+ * The hardware context used by this sharedTexture.
184
+ */
185
+ get hardware() {
186
+ return this._hardware;
187
+ }
188
+ /**
189
+ * Current width of the cached HardwareFramesContext.
190
+ */
191
+ get width() {
192
+ return this._currentWidth;
193
+ }
194
+ /**
195
+ * Current height of the cached HardwareFramesContext.
196
+ */
197
+ get height() {
198
+ return this._currentHeight;
199
+ }
200
+ /**
201
+ * Whether this sharedTexture has been disposed.
202
+ */
203
+ get isDisposed() {
204
+ return this._isDisposed;
205
+ }
206
+ /**
207
+ * Import an Electron textureInfo as a hardware Frame.
208
+ *
209
+ * Automatically detects the platform from the handle contents,
210
+ * manages the HardwareFramesContext, and creates a zero-copy hardware frame.
211
+ *
212
+ * @param textureInfo - Electron's textureInfo object from paint event
213
+ *
214
+ * @param options - Per-frame options (pts, timeBase)
215
+ *
216
+ * @returns Hardware Frame referencing the GPU texture
217
+ *
218
+ * @throws {Error} If disposed, no valid handle found, or import fails
219
+ *
220
+ * @example
221
+ * ```typescript
222
+ * offscreen.webContents.on('paint', (event) => {
223
+ * const texture = event.texture;
224
+ * if (!texture?.textureInfo) return;
225
+ *
226
+ * using frame = sharedTexture.importTexture(texture.textureInfo, {
227
+ * pts: BigInt(Date.now()) * 1000n,
228
+ * timeBase: { num: 1, den: 1000000 },
229
+ * });
230
+ *
231
+ * texture.release();
232
+ * });
233
+ * ```
234
+ */
235
+ importTexture(textureInfo, options = {}) {
236
+ if (this._isDisposed) {
237
+ throw new Error('SharedTexture has been disposed');
238
+ }
239
+ const { width, height } = textureInfo.codedSize;
240
+ const swFormat = this.resolvePixelFormat(textureInfo.pixelFormat);
241
+ const handle = textureInfo.handle;
242
+ return this.importFromHandle(handle, width, height, swFormat, options, textureInfo.colorSpace);
243
+ }
244
+ /**
245
+ * Import a raw SharedTextureHandle as a hardware Frame.
246
+ *
247
+ * Use this when you have the handle directly without the full textureInfo wrapper.
248
+ *
249
+ * @param handle - Platform-specific GPU texture handle
250
+ *
251
+ * @param props - Dimensions, format, and timing options
252
+ *
253
+ * @returns Hardware Frame referencing the GPU texture
254
+ *
255
+ * @throws {Error} If disposed, no valid handle found, or import fails
256
+ *
257
+ * @example
258
+ * ```typescript
259
+ * const frame = sharedTexture.importHandle(handle, {
260
+ * width: 1920,
261
+ * height: 1080,
262
+ * pixelFormat: 'BGRA',
263
+ * pts: 0n,
264
+ * });
265
+ * ```
266
+ */
267
+ importHandle(handle, props) {
268
+ if (this._isDisposed) {
269
+ throw new Error('SharedTexture has been disposed');
270
+ }
271
+ let swFormat = this._swFormat;
272
+ if (props.pixelFormat !== undefined) {
273
+ swFormat = typeof props.pixelFormat === 'string' ? this.resolvePixelFormat(props.pixelFormat) : props.pixelFormat;
274
+ }
275
+ return this.importFromHandle(handle, props.width, props.height, swFormat, {
276
+ pts: props.pts,
277
+ timeBase: props.timeBase,
278
+ });
279
+ }
280
+ /**
281
+ * Map a frame to a different hardware format.
282
+ *
283
+ * Handles HardwareFramesContext creation and caching automatically.
284
+ * The mapping context is cached and reused for subsequent calls with the
285
+ * same target hardware and frame dimensions.
286
+ *
287
+ * @param srcFrame - Source frame (e.g., DRM PRIME from importTexture on Linux)
288
+ *
289
+ * @param targetHw - Target hardware context (e.g., VAAPI, Vulkan)
290
+ *
291
+ * @param flags - Mapping flags
292
+ *
293
+ * @returns Mapped frame in target hardware format
294
+ *
295
+ * @throws {FFmpegError} If mapping fails (e.g., unsupported mapping, invalid frames)
296
+ *
297
+ * @example
298
+ * ```typescript
299
+ * import { HardwareContext, SharedTexture } from 'node-av/api';
300
+ * import { AV_HWDEVICE_TYPE_VAAPI } from 'node-av/constants';
301
+ *
302
+ * // Import DRM PRIME frame from Electron shared texture
303
+ * const drmFrame = sharedTexture.importTexture(textureInfo, { pts: 0n });
304
+ *
305
+ * // Map to VAAPI for encoding
306
+ * const vaapiHw = HardwareContext.create(AV_HWDEVICE_TYPE_VAAPI);
307
+ * const vaapiFrame = sharedTexture.mapTo(drmFrame, vaapiHw);
308
+ *
309
+ * // Encode with VAAPI encoder
310
+ * encoder.encode(vaapiFrame);
311
+ * ```
312
+ */
313
+ mapTo(srcFrame, targetHw, flags) {
314
+ if (this._isDisposed) {
315
+ throw new Error('SharedTexture has been disposed');
316
+ }
317
+ // Ensure mapping context exists and matches target hardware + dimensions
318
+ this.ensureMappingContext(srcFrame, targetHw);
319
+ // Create destination frame
320
+ const dstFrame = new Frame();
321
+ dstFrame.alloc();
322
+ // Allocate buffer from target hardware frames context
323
+ const allocRet = this._mappingCtx.getBuffer(dstFrame);
324
+ FFmpegError.throwIfError(allocRet, 'Failed to allocate target hardware frame');
325
+ // Copy timing properties
326
+ dstFrame.pts = srcFrame.pts;
327
+ dstFrame.timeBase = srcFrame.timeBase;
328
+ // Perform mapping
329
+ const mapFlags = flags ?? AV_HWFRAME_MAP_READ | AV_HWFRAME_MAP_WRITE;
330
+ const ret = this._mappingCtx.map(dstFrame, srcFrame, mapFlags);
331
+ FFmpegError.throwIfError(ret, 'Failed to map frame to target hardware format');
332
+ return dstFrame;
333
+ }
334
+ /**
335
+ * Ensure mapping context exists and matches the target hardware and frame dimensions.
336
+ *
337
+ * Re-creates the context if target hardware changes or dimensions change.
338
+ *
339
+ * @param srcFrame - Source frame to get dimensions from
340
+ *
341
+ * @param targetHw - Target hardware context
342
+ *
343
+ * @internal
344
+ */
345
+ ensureMappingContext(srcFrame, targetHw) {
346
+ const swFormat = resolveMappingSwFormat(srcFrame, this._importSwFormat);
347
+ // Re-create if target hardware, dimensions, or software format changed
348
+ if (this._mappingHw !== targetHw ||
349
+ this._mappingCtx?.width !== srcFrame.width ||
350
+ this._mappingCtx?.height !== srcFrame.height ||
351
+ this._mappingCtx?.swFormat !== swFormat) {
352
+ // Free previous context
353
+ if (this._mappingCtx) {
354
+ this._mappingCtx.free();
355
+ this._mappingCtx = null;
356
+ }
357
+ // Create new mapping context for target hardware
358
+ const ctx = new HardwareFramesContext();
359
+ ctx.alloc(targetHw.deviceContext);
360
+ ctx.format = targetHw.devicePixelFormat;
361
+ ctx.swFormat = swFormat;
362
+ ctx.width = srcFrame.width;
363
+ ctx.height = srcFrame.height;
364
+ const ret = ctx.init();
365
+ FFmpegError.throwIfError(ret, 'Failed to initialize mapping HardwareFramesContext');
366
+ this._mappingCtx = ctx;
367
+ this._mappingHw = targetHw;
368
+ }
369
+ }
370
+ /**
371
+ * Release the cached HardwareFramesContext and mapping context.
372
+ *
373
+ * The HardwareContext is NOT disposed — it belongs to the caller.
374
+ * Safe to call multiple times.
375
+ *
376
+ * @example
377
+ * ```typescript
378
+ * sharedTexture.dispose();
379
+ * ```
380
+ */
381
+ dispose() {
382
+ if (this._isDisposed) {
383
+ return;
384
+ }
385
+ this._isDisposed = true;
386
+ if (this._framesCtx) {
387
+ this._framesCtx.free();
388
+ this._framesCtx = null;
389
+ }
390
+ if (this._mappingCtx) {
391
+ this._mappingCtx.free();
392
+ this._mappingCtx = null;
393
+ }
394
+ this._mappingHw = null;
395
+ }
396
+ /**
397
+ * Core import logic — dispatches to the correct Frame factory based on handle type.
398
+ *
399
+ * @param handle - Platform-specific GPU texture handle
400
+ *
401
+ * @param width - Texture width in pixels
402
+ *
403
+ * @param height - Texture height in pixels
404
+ *
405
+ * @param swFormat - Software pixel format for HardwareFramesContext
406
+ *
407
+ * @param options - Per-frame timing options
408
+ *
409
+ * @param colorSpace - Electron color space descriptor for mapping to FFmpeg color properties
410
+ *
411
+ * @returns Hardware Frame referencing the GPU texture
412
+ *
413
+ * @internal
414
+ */
415
+ importFromHandle(handle, width, height, swFormat, options, colorSpace) {
416
+ // Remember the layout actually used, so mapTo() can fall back to it for
417
+ // bare hardware frames (D3D11/DMA-BUF) that carry no hw_frames_ctx.
418
+ this._importSwFormat = swFormat;
419
+ let frame;
420
+ if (handle.ioSurface && handle.ioSurface.length > 0) {
421
+ // macOS — IOSurface
422
+ const framesCtx = this.ensureFramesContext(width, height, swFormat);
423
+ frame = Frame.fromIOSurface(handle.ioSurface, {
424
+ hwFramesCtx: framesCtx,
425
+ pts: options.pts,
426
+ timeBase: options.timeBase,
427
+ });
428
+ }
429
+ else if (handle.ntHandle && handle.ntHandle.length > 0) {
430
+ // Windows — D3D11 shared texture
431
+ frame = Frame.fromD3D11Texture(handle.ntHandle, {
432
+ hwDeviceCtx: this._hardware.deviceContext,
433
+ pts: options.pts,
434
+ timeBase: options.timeBase,
435
+ });
436
+ }
437
+ else if (handle.nativePixmap) {
438
+ // Linux — DMA-BUF
439
+ const dmaBuf = {
440
+ planes: handle.nativePixmap.planes,
441
+ modifier: handle.nativePixmap.modifier,
442
+ };
443
+ frame = Frame.fromDmaBuf(dmaBuf, {
444
+ width,
445
+ height,
446
+ swFormat,
447
+ pts: options.pts,
448
+ timeBase: options.timeBase,
449
+ });
450
+ }
451
+ else {
452
+ throw new Error('SharedTexture: no valid handle found (expected ioSurface, ntHandle, or nativePixmap)');
453
+ }
454
+ // Map Electron's colorSpace to FFmpeg color properties.
455
+ const colors = mapColorSpace(colorSpace);
456
+ frame.colorRange = colors.colorRange;
457
+ frame.colorPrimaries = colors.colorPrimaries;
458
+ frame.colorTrc = colors.colorTrc;
459
+ frame.colorSpace = colors.colorSpace;
460
+ return frame;
461
+ }
462
+ /**
463
+ * Ensure HardwareFramesContext is created and matches the requested dimensions/format.
464
+ *
465
+ * Re-creates the context only when dimensions or format change.
466
+ * Windows D3D11 does not use this — it passes HardwareDeviceContext directly.
467
+ *
468
+ * @param width - Frame width in pixels
469
+ *
470
+ * @param height - Frame height in pixels
471
+ *
472
+ * @param swFormat - Software pixel format
473
+ *
474
+ * @returns Initialized HardwareFramesContext matching the requested parameters
475
+ *
476
+ * @internal
477
+ */
478
+ ensureFramesContext(width, height, swFormat) {
479
+ if (this._framesCtx && this._currentWidth === width && this._currentHeight === height && this._swFormat === swFormat) {
480
+ return this._framesCtx;
481
+ }
482
+ // Free previous context if dimensions/format changed
483
+ if (this._framesCtx) {
484
+ this._framesCtx.free();
485
+ this._framesCtx = null;
486
+ }
487
+ const framesCtx = new HardwareFramesContext();
488
+ framesCtx.alloc(this._hardware.deviceContext);
489
+ framesCtx.format = this._hardware.devicePixelFormat;
490
+ framesCtx.swFormat = swFormat;
491
+ framesCtx.width = width;
492
+ framesCtx.height = height;
493
+ const ret = framesCtx.init();
494
+ FFmpegError.throwIfError(ret, 'Failed to initialize HardwareFramesContext');
495
+ this._framesCtx = framesCtx;
496
+ this._currentWidth = width;
497
+ this._currentHeight = height;
498
+ this._swFormat = swFormat;
499
+ return framesCtx;
500
+ }
501
+ /**
502
+ * Resolve a pixel format string (e.g., 'BGRA') to an AVPixelFormat enum value.
503
+ *
504
+ * Falls back to the configured swFormat if the name is not recognized.
505
+ *
506
+ * @param name - Pixel format name string from Electron
507
+ *
508
+ * @returns Resolved AVPixelFormat enum value
509
+ *
510
+ * @internal
511
+ */
512
+ resolvePixelFormat(name) {
513
+ // Electron reports formats in uppercase (e.g., 'BGRA'), FFmpeg uses lowercase
514
+ const fmt = PixelFormatUtils.fromName(name.toLowerCase());
515
+ if (fmt === AV_PIX_FMT_NONE) {
516
+ return this._swFormat;
517
+ }
518
+ return fmt;
519
+ }
520
+ /**
521
+ * Dispose of the SharedTexture.
522
+ *
523
+ * Implements the Disposable interface for automatic cleanup.
524
+ * Equivalent to calling dispose().
525
+ *
526
+ * @example
527
+ * ```typescript
528
+ * {
529
+ * using sharedTexture = SharedTexture.create(hw);
530
+ * // Use sharedTexture...
531
+ * } // Automatically disposed
532
+ * ```
533
+ *
534
+ * @see {@link dispose} For manual cleanup
535
+ */
536
+ [Symbol.dispose]() {
537
+ this.dispose();
538
+ }
539
+ }
540
+ //# sourceMappingURL=electron-shared-texture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"electron-shared-texture.js","sourceRoot":"","sources":["../../../src/api/utilities/electron-shared-texture.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,eAAe,GAChB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAwErD,MAAM,SAAS,GAAiC;IAC9C,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,gBAAgB;CAC1B,CAAC;AAEF,MAAM,aAAa,GAAqC;IACtD,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,gBAAgB;IACxB,OAAO,EAAE,iBAAiB;IAC1B,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,mBAAmB;IAC9B,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,gBAAgB;IACxB,cAAc,EAAE,kBAAkB;IAClC,cAAc,EAAE,kBAAkB;IAClC,EAAE,EAAE,kBAAkB;IACtB,YAAY,EAAE,iBAAiB;CAChC,CAAC;AAEF,MAAM,YAAY,GAAkD;IAClE,KAAK,EAAE,eAAe;IACtB,aAAa,EAAE,eAAe;IAC9B,OAAO,EAAE,iBAAiB;IAC1B,OAAO,EAAE,iBAAiB;IAC1B,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,mBAAmB;IAC9B,MAAM,EAAE,gBAAgB;IACxB,GAAG,EAAE,aAAa;IAClB,UAAU,EAAE,kBAAkB;IAC9B,cAAc,EAAE,sBAAsB;IACtC,YAAY,EAAE,oBAAoB;IAClC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,mBAAmB;IAChC,WAAW,EAAE,mBAAmB;IAChC,EAAE,EAAE,mBAAmB;IACvB,cAAc,EAAE,kBAAkB;IAClC,GAAG,EAAE,sBAAsB;CAC5B,CAAC;AAEF,MAAM,UAAU,GAAiC;IAC/C,GAAG,EAAE,aAAa;IAClB,GAAG,EAAE,aAAa;IAClB,KAAK,EAAE,eAAe;IACtB,GAAG,EAAE,aAAa;IAClB,OAAO,EAAE,iBAAiB;IAC1B,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,mBAAmB;IAC9B,KAAK,EAAE,eAAe;IACtB,YAAY,EAAE,oBAAoB;CACnC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAAC,UAA8B;IAM1D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,oEAAoE;QACpE,OAAO;YACL,UAAU,EAAE,gBAAgB;YAC5B,cAAc,EAAE,eAAe;YAC/B,QAAQ,EAAE,sBAAsB;YAChC,UAAU,EAAE,aAAa;SAC1B,CAAC;IACJ,CAAC;IAED,OAAO;QACL,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,uBAAuB;QACxE,cAAc,EAAE,aAAa,CAAC,UAAU,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,qBAAqB;QAClF,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC,IAAI,qBAAqB;QAC1E,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,qBAAqB;KACzE,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAe,EAAE,QAAuB;IAC7E,OAAO,QAAQ,CAAC,WAAW,EAAE,QAAQ,IAAI,QAAQ,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,OAAO,aAAa;IAChB,SAAS,CAAkB;IAC3B,UAAU,GAAiC,IAAI,CAAC;IAChD,aAAa,GAAG,CAAC,CAAC;IAClB,cAAc,GAAG,CAAC,CAAC;IACnB,SAAS,CAAgB;IACzB,eAAe,CAAgB;IAC/B,WAAW,GAAG,KAAK,CAAC;IAE5B,2CAA2C;IACnC,WAAW,GAAiC,IAAI,CAAC;IACjD,UAAU,GAA2B,IAAI,CAAC;IAElD,YAAoB,QAAyB,EAAE,OAA6B;QAC1E,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC;QACrD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;QACtC,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;QACtD,IAAI,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3D,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM,CAAC,MAAM,CAAC,QAAyB,EAAE,UAAgC,EAAE;QACzE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,IAAI,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,aAAa,CAAC,WAAwB,EAAE,UAA+B,EAAE;QACvE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;QAElC,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IACjG,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,YAAY,CAAC,MAA2B,EAAE,KAAwB;QAChE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9B,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACpC,QAAQ,GAAG,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;QACpH,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE;YACxE,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,KAAK,CAAC,QAAe,EAAE,QAAyB,EAAE,KAAc;QAC9D,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,yEAAyE;QACzE,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE9C,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAE,CAAC;QAC7B,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEjB,sDAAsD;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvD,WAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,0CAA0C,CAAC,CAAC;QAE/E,yBAAyB;QACzB,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;QAC5B,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAEtC,kBAAkB;QAClB,MAAM,QAAQ,GAAG,KAAK,IAAI,mBAAmB,GAAG,oBAAoB,CAAC;QACrE,MAAM,GAAG,GAAG,IAAI,CAAC,WAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChE,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,+CAA+C,CAAC,CAAC;QAE/E,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;;;;;OAUG;IACK,oBAAoB,CAAC,QAAe,EAAE,QAAyB;QACrE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAExE,uEAAuE;QACvE,IACE,IAAI,CAAC,UAAU,KAAK,QAAQ;YAC5B,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,QAAQ,CAAC,KAAK;YAC1C,IAAI,CAAC,WAAW,EAAE,MAAM,KAAK,QAAQ,CAAC,MAAM;YAC5C,IAAI,CAAC,WAAW,EAAE,QAAQ,KAAK,QAAQ,EACvC,CAAC;YACD,wBAAwB;YACxB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;gBACxB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,CAAC;YAED,iDAAiD;YACjD,MAAM,GAAG,GAAG,IAAI,qBAAqB,EAAE,CAAC;YACxC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAClC,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,iBAAiB,CAAC;YACxC,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACxB,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC3B,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YAE7B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACvB,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,oDAAoD,CAAC,CAAC;YAEpF,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;YACvB,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACK,gBAAgB,CACtB,MAA2B,EAC3B,KAAa,EACb,MAAc,EACd,QAAuB,EACvB,OAA4B,EAC5B,UAA8B;QAE9B,wEAAwE;QACxE,oEAAoE;QACpE,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;QAEhC,IAAI,KAAY,CAAC;QAEjB,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,oBAAoB;YACpB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YACpE,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE;gBAC5C,WAAW,EAAE,SAAS;gBACtB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,iCAAiC;YACjC,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC9C,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa;gBACzC,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YAC/B,kBAAkB;YAClB,MAAM,MAAM,GAAiB;gBAC3B,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM;gBAClC,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,QAAQ;aACvC,CAAC;YACF,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE;gBAC/B,KAAK;gBACL,MAAM;gBACN,QAAQ;gBACR,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;QAC1G,CAAC;QAED,wDAAwD;QACxD,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QACzC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACrC,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC7C,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAErC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACK,mBAAmB,CAAC,KAAa,EAAE,MAAc,EAAE,QAAuB;QAChF,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,IAAI,IAAI,CAAC,cAAc,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACrH,OAAO,IAAI,CAAC,UAAU,CAAC;QACzB,CAAC;QAED,qDAAqD;QACrD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC9C,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC9C,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;QACpD,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC9B,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;QACxB,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC;QAE1B,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QAC7B,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,4CAA4C,CAAC,CAAC;QAE5E,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAE1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;;;;;;OAUG;IACK,kBAAkB,CAAC,IAAY;QACrC,8EAA8E;QAC9E,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1D,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,CAAC,MAAM,CAAC,OAAO,CAAC;QACd,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;CACF"}