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,418 @@
1
+ import { HardwareDeviceContext } from './hardware-device-context.js';
2
+ import type { AVHWFrameTransferDirection, AVPixelFormat } from '../constants/constants.js';
3
+ import type { Frame } from './frame.js';
4
+ import type { NativeHardwareFramesContext, NativeWrapper } from './native-types.js';
5
+ /**
6
+ * Hardware frames context for GPU memory management.
7
+ *
8
+ * Manages pools of hardware frames (textures/surfaces) on the GPU.
9
+ * Essential for zero-copy hardware acceleration, allowing frames to stay
10
+ * in GPU memory throughout the processing pipeline. Provides frame allocation,
11
+ * format conversion, and data transfer between hardware and system memory.
12
+ *
13
+ * Direct mapping to FFmpeg's AVHWFramesContext.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * import { HardwareFramesContext, HardwareDeviceContext, Frame, FFmpegError } from 'node-av';
18
+ * import { AV_PIX_FMT_NV12, AV_PIX_FMT_CUDA, AV_HWDEVICE_TYPE_CUDA } from 'node-av/constants';
19
+ *
20
+ * // Create hardware frames context
21
+ * const device = new HardwareDeviceContext();
22
+ * device.create(AV_HWDEVICE_TYPE_CUDA);
23
+ *
24
+ * const frames = new HardwareFramesContext();
25
+ * frames.format = AV_PIX_FMT_CUDA; // Hardware format
26
+ * frames.swFormat = AV_PIX_FMT_NV12; // Software format
27
+ * frames.width = 1920;
28
+ * frames.height = 1080;
29
+ * frames.initialPoolSize = 20; // Pre-allocate 20 frames
30
+ *
31
+ * frames.alloc(device);
32
+ * const ret = frames.init();
33
+ * FFmpegError.throwIfError(ret, 'init');
34
+ *
35
+ * // Allocate hardware frame
36
+ * const hwFrame = new Frame();
37
+ * const ret2 = frames.getBuffer(hwFrame, 0);
38
+ * FFmpegError.throwIfError(ret2, 'getBuffer');
39
+ *
40
+ * // Transfer from CPU to GPU
41
+ * const cpuFrame = new Frame();
42
+ * // ... fill cpuFrame with data ...
43
+ * await frames.transferData(hwFrame, cpuFrame);
44
+ *
45
+ * // Map hardware frame to CPU for access
46
+ * const mappedFrame = new Frame();
47
+ * const ret3 = frames.map(mappedFrame, hwFrame, AV_HWFRAME_MAP_READ);
48
+ * FFmpegError.throwIfError(ret3, 'map');
49
+ * ```
50
+ *
51
+ * @see [AVHWFramesContext](https://ffmpeg.org/doxygen/trunk/structAVHWFramesContext.html) - FFmpeg Doxygen
52
+ * @see {@link HardwareDeviceContext} For device management
53
+ * @see {@link Frame} For frame operations
54
+ */
55
+ export declare class HardwareFramesContext implements Disposable, NativeWrapper<NativeHardwareFramesContext> {
56
+ private native;
57
+ constructor();
58
+ /**
59
+ * Hardware pixel format.
60
+ *
61
+ * The pixel format used for frames in GPU memory.
62
+ * Hardware-specific format like AV_PIX_FMT_CUDA or AV_PIX_FMT_VAAPI.
63
+ *
64
+ * Direct mapping to AVHWFramesContext->format.
65
+ */
66
+ get format(): AVPixelFormat;
67
+ set format(value: AVPixelFormat);
68
+ /**
69
+ * Software pixel format.
70
+ *
71
+ * The pixel format frames are converted to when transferred
72
+ * to system memory. Standard format like AV_PIX_FMT_YUV420P.
73
+ *
74
+ * Direct mapping to AVHWFramesContext->sw_format.
75
+ */
76
+ get swFormat(): AVPixelFormat;
77
+ set swFormat(value: AVPixelFormat);
78
+ /**
79
+ * Frame width.
80
+ *
81
+ * Width of frames in pixels.
82
+ *
83
+ * Direct mapping to AVHWFramesContext->width.
84
+ */
85
+ get width(): number;
86
+ set width(value: number);
87
+ /**
88
+ * Frame height.
89
+ *
90
+ * Height of frames in pixels.
91
+ *
92
+ * Direct mapping to AVHWFramesContext->height.
93
+ */
94
+ get height(): number;
95
+ set height(value: number);
96
+ /**
97
+ * Initial pool size.
98
+ *
99
+ * Number of frames to pre-allocate in the pool.
100
+ * Set before calling init() for optimal performance.
101
+ *
102
+ * Direct mapping to AVHWFramesContext->initial_pool_size.
103
+ */
104
+ get initialPoolSize(): number;
105
+ set initialPoolSize(value: number);
106
+ /**
107
+ * Associated hardware device.
108
+ *
109
+ * Reference to the device context this frames context belongs to.
110
+ * Automatically set when calling alloc().
111
+ *
112
+ * Direct mapping to AVHWFramesContext->device_ref.
113
+ */
114
+ get deviceRef(): HardwareDeviceContext | null;
115
+ /**
116
+ * Allocate hardware frames context.
117
+ *
118
+ * Allocates the frames context and associates it with a device.
119
+ * Must be called before init().
120
+ *
121
+ * Direct mapping to av_hwframe_ctx_alloc().
122
+ *
123
+ * @param device - Hardware device context to use
124
+ *
125
+ * @throws {Error} If allocation fails (ENOMEM)
126
+ *
127
+ * @example
128
+ * ```typescript
129
+ * import { AV_PIX_FMT_CUDA, AV_PIX_FMT_NV12 } from 'node-av/constants';
130
+ *
131
+ * const frames = new HardwareFramesContext();
132
+ * frames.format = AV_PIX_FMT_CUDA;
133
+ * frames.swFormat = AV_PIX_FMT_NV12;
134
+ * frames.width = 1920;
135
+ * frames.height = 1080;
136
+ * frames.alloc(device);
137
+ * ```
138
+ *
139
+ * @see {@link init} To initialize after allocation
140
+ */
141
+ alloc(device: HardwareDeviceContext): void;
142
+ /**
143
+ * Initialize hardware frames context.
144
+ *
145
+ * Initializes the frame pool after configuration.
146
+ * Must be called after alloc() and property setup.
147
+ *
148
+ * Direct mapping to av_hwframe_ctx_init().
149
+ *
150
+ * @returns 0 on success, negative AVERROR on error:
151
+ * - AVERROR_EINVAL: Invalid parameters
152
+ * - AVERROR_ENOMEM: Memory allocation failure
153
+ * - AVERROR_ENOSYS: Operation not supported
154
+ * - Hardware-specific errors
155
+ *
156
+ * @example
157
+ * ```typescript
158
+ * import { FFmpegError } from 'node-av';
159
+ *
160
+ * frames.alloc(device);
161
+ * const ret = frames.init();
162
+ * FFmpegError.throwIfError(ret, 'init');
163
+ * ```
164
+ *
165
+ * @see {@link alloc} Must be called first
166
+ */
167
+ init(): number;
168
+ /**
169
+ * Free hardware frames context.
170
+ *
171
+ * Releases all frames and resources associated with the context.
172
+ * The context becomes invalid after calling this.
173
+ *
174
+ * Direct mapping to av_buffer_unref() on frames context.
175
+ *
176
+ * @example
177
+ * ```typescript
178
+ * frames.free();
179
+ * // Frames context is now invalid
180
+ * ```
181
+ *
182
+ * @see {@link Symbol.dispose} For automatic cleanup
183
+ */
184
+ free(): void;
185
+ /**
186
+ * Allocate hardware frame from pool.
187
+ *
188
+ * Gets a frame from the hardware frame pool.
189
+ * The frame will have hardware-backed storage.
190
+ *
191
+ * Direct mapping to av_hwframe_get_buffer().
192
+ *
193
+ * @param frame - Frame to allocate buffer for
194
+ *
195
+ * @param flags - Allocation flags (usually 0)
196
+ *
197
+ * @returns 0 on success, negative AVERROR on error:
198
+ * - AVERROR_ENOMEM: No frames available in pool
199
+ * - AVERROR_EINVAL: Invalid parameters
200
+ *
201
+ * @example
202
+ * ```typescript
203
+ * import { Frame, FFmpegError } from 'node-av';
204
+ *
205
+ * const hwFrame = new Frame();
206
+ * const ret = frames.getBuffer(hwFrame, 0);
207
+ * FFmpegError.throwIfError(ret, 'getBuffer');
208
+ * // hwFrame now has GPU memory allocated
209
+ * ```
210
+ *
211
+ * @see {@link transferData} To upload data to hardware frame
212
+ */
213
+ getBuffer(frame: Frame, flags?: number): number;
214
+ /**
215
+ * Transfer data between hardware and system memory.
216
+ *
217
+ * Copies frame data between GPU and CPU memory.
218
+ * Direction is determined by frame types.
219
+ *
220
+ * Direct mapping to av_hwframe_transfer_data().
221
+ *
222
+ * @param dst - Destination frame
223
+ *
224
+ * @param src - Source frame
225
+ *
226
+ * @param flags - Transfer flags (usually 0)
227
+ *
228
+ * @returns 0 on success, negative AVERROR on error:
229
+ * - AVERROR_EINVAL: Invalid parameters
230
+ * - AVERROR_ENOSYS: Transfer not supported
231
+ * - AVERROR_ENOMEM: Memory allocation failure
232
+ *
233
+ * @example
234
+ * ```typescript
235
+ * import { FFmpegError } from 'node-av';
236
+ *
237
+ * // Upload: CPU -> GPU
238
+ * const cpuFrame = new Frame();
239
+ * // ... fill cpuFrame with data ...
240
+ * const hwFrame = new Frame();
241
+ * frames.getBuffer(hwFrame, 0);
242
+ * const ret = await frames.transferData(hwFrame, cpuFrame);
243
+ * FFmpegError.throwIfError(ret, 'transferData');
244
+ *
245
+ * // Download: GPU -> CPU
246
+ * const downloadFrame = new Frame();
247
+ * const ret2 = await frames.transferData(downloadFrame, hwFrame);
248
+ * FFmpegError.throwIfError(ret2, 'transferData');
249
+ * ```
250
+ *
251
+ * @see {@link getBuffer} To allocate hardware frame
252
+ * @see {@link map} For zero-copy access
253
+ */
254
+ transferData(dst: Frame, src: Frame, flags?: number): Promise<number>;
255
+ /**
256
+ * Transfer frame between hardware and system memory synchronously.
257
+ * Synchronous version of transferData.
258
+ *
259
+ * Copies frame data between GPU and CPU memory.
260
+ * Direction depends on frame types (hardware vs software).
261
+ *
262
+ * Direct mapping to av_hwframe_transfer_data().
263
+ *
264
+ * @param dst - Destination frame
265
+ *
266
+ * @param src - Source frame
267
+ *
268
+ * @param flags - Transfer flags (currently unused, pass 0)
269
+ *
270
+ * @returns 0 on success, negative AVERROR on error:
271
+ * - AVERROR_EINVAL: Invalid frames
272
+ * - AVERROR_ENOSYS: Operation not supported
273
+ * - AVERROR_ENOMEM: Memory allocation failure
274
+ *
275
+ * @example
276
+ * ```typescript
277
+ * import { Frame, FFmpegError } from 'node-av';
278
+ *
279
+ * // Download from GPU to CPU
280
+ * const cpuFrame = new Frame();
281
+ * cpuFrame.format = frames.swFormat;
282
+ * cpuFrame.width = frames.width;
283
+ * cpuFrame.height = frames.height;
284
+ * cpuFrame.allocBuffer();
285
+ *
286
+ * const ret = frames.transferDataSync(cpuFrame, hwFrame);
287
+ * FFmpegError.throwIfError(ret, 'transferDataSync');
288
+ *
289
+ * // Upload from CPU to GPU
290
+ * const ret2 = frames.transferDataSync(hwFrame, cpuFrame);
291
+ * FFmpegError.throwIfError(ret2, 'transferDataSync');
292
+ * ```
293
+ *
294
+ * @see {@link transferData} For async version
295
+ */
296
+ transferDataSync(dst: Frame, src: Frame, flags?: number): number;
297
+ /**
298
+ * Get supported transfer formats.
299
+ *
300
+ * Returns pixel formats supported for frame transfer
301
+ * in the specified direction.
302
+ *
303
+ * Direct mapping to av_hwframe_transfer_get_formats().
304
+ *
305
+ * @param direction - Transfer direction (FROM/TO hardware)
306
+ *
307
+ * @returns Array of supported formats, or error code:
308
+ * - AVERROR_ENOSYS: Query not supported
309
+ * - AVERROR_ENOMEM: Memory allocation failure
310
+ *
311
+ * @example
312
+ * ```typescript
313
+ * import { AV_HWFRAME_TRANSFER_DIRECTION_FROM } from 'node-av/constants';
314
+ *
315
+ * const formats = frames.transferGetFormats(AV_HWFRAME_TRANSFER_DIRECTION_FROM);
316
+ * if (Array.isArray(formats)) {
317
+ * console.log('Supported download formats:', formats);
318
+ * } else {
319
+ * console.error('Error querying formats:', formats);
320
+ * }
321
+ * ```
322
+ */
323
+ transferGetFormats(direction: AVHWFrameTransferDirection): AVPixelFormat[] | number;
324
+ /**
325
+ * Map hardware frame to system memory.
326
+ *
327
+ * Creates a mapping of hardware frame data accessible from CPU.
328
+ * More efficient than transferData() for read-only access.
329
+ *
330
+ * Direct mapping to av_hwframe_map().
331
+ *
332
+ * @param dst - Destination frame for mapped data
333
+ *
334
+ * @param src - Hardware frame to map
335
+ *
336
+ * @param flags - Mapping flags (AV_HWFRAME_MAP_*)
337
+ *
338
+ * @returns 0 on success, negative AVERROR on error:
339
+ * - AVERROR_EINVAL: Invalid parameters
340
+ * - AVERROR_ENOSYS: Mapping not supported
341
+ *
342
+ * @example
343
+ * ```typescript
344
+ * import { FFmpegError } from 'node-av';
345
+ * import { AV_HWFRAME_MAP_READ } from 'node-av/constants';
346
+ *
347
+ * const mappedFrame = new Frame();
348
+ * const ret = frames.map(mappedFrame, hwFrame, AV_HWFRAME_MAP_READ);
349
+ * FFmpegError.throwIfError(ret, 'map');
350
+ * // Can now read hwFrame data through mappedFrame
351
+ * ```
352
+ *
353
+ * @see {@link transferData} For full data copy
354
+ */
355
+ map(dst: Frame, src: Frame, flags?: number): number;
356
+ /**
357
+ * Create derived frames context.
358
+ *
359
+ * Creates a new frames context derived from another,
360
+ * potentially on a different device.
361
+ *
362
+ * Direct mapping to av_hwframe_ctx_create_derived().
363
+ *
364
+ * @param format - Pixel format for derived frames
365
+ *
366
+ * @param derivedDevice - Target device context
367
+ *
368
+ * @param source - Source frames context
369
+ *
370
+ * @param flags - Creation flags
371
+ *
372
+ * @returns 0 on success, negative AVERROR on error:
373
+ * - AVERROR_EINVAL: Invalid parameters
374
+ * - AVERROR_ENOSYS: Derivation not supported
375
+ * - AVERROR_ENOMEM: Memory allocation failure
376
+ *
377
+ * @example
378
+ * ```typescript
379
+ * import { FFmpegError } from 'node-av';
380
+ * import { AV_PIX_FMT_VULKAN } from 'node-av/constants';
381
+ *
382
+ * const derivedFrames = new HardwareFramesContext();
383
+ * const ret = derivedFrames.createDerived(
384
+ * AV_PIX_FMT_VULKAN,
385
+ * vulkanDevice,
386
+ * cudaFrames,
387
+ * 0
388
+ * );
389
+ * FFmpegError.throwIfError(ret, 'createDerived');
390
+ * ```
391
+ */
392
+ createDerived(format: AVPixelFormat, derivedDevice: HardwareDeviceContext, source: HardwareFramesContext, flags?: number): number;
393
+ /**
394
+ * Get the underlying native HardwareFramesContext object.
395
+ *
396
+ * @returns The native HardwareFramesContext binding object
397
+ *
398
+ * @internal
399
+ */
400
+ getNative(): NativeHardwareFramesContext;
401
+ /**
402
+ * Dispose of the hardware frames context.
403
+ *
404
+ * Implements the Disposable interface for automatic cleanup.
405
+ * Equivalent to calling free().
406
+ *
407
+ * @example
408
+ * ```typescript
409
+ * {
410
+ * using frames = new HardwareFramesContext();
411
+ * frames.alloc(device);
412
+ * frames.init();
413
+ * // Use frames...
414
+ * } // Automatically freed when leaving scope
415
+ * ```
416
+ */
417
+ [Symbol.dispose](): void;
418
+ }