@revizly/node-av 5.2.2-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/BUILD_LINUX.md +61 -0
  2. package/LICENSE.md +22 -0
  3. package/README.md +662 -0
  4. package/build_mac_local.sh +69 -0
  5. package/dist/api/audio-frame-buffer.d.ts +205 -0
  6. package/dist/api/audio-frame-buffer.js +287 -0
  7. package/dist/api/audio-frame-buffer.js.map +1 -0
  8. package/dist/api/bitstream-filter.d.ts +820 -0
  9. package/dist/api/bitstream-filter.js +1242 -0
  10. package/dist/api/bitstream-filter.js.map +1 -0
  11. package/dist/api/constants.d.ts +44 -0
  12. package/dist/api/constants.js +45 -0
  13. package/dist/api/constants.js.map +1 -0
  14. package/dist/api/data/test_av1.ivf +0 -0
  15. package/dist/api/data/test_h264.h264 +0 -0
  16. package/dist/api/data/test_hevc.h265 +0 -0
  17. package/dist/api/data/test_mjpeg.mjpeg +0 -0
  18. package/dist/api/data/test_vp8.ivf +0 -0
  19. package/dist/api/data/test_vp9.ivf +0 -0
  20. package/dist/api/decoder.d.ts +1088 -0
  21. package/dist/api/decoder.js +1775 -0
  22. package/dist/api/decoder.js.map +1 -0
  23. package/dist/api/demuxer.d.ts +1219 -0
  24. package/dist/api/demuxer.js +2081 -0
  25. package/dist/api/demuxer.js.map +1 -0
  26. package/dist/api/device.d.ts +586 -0
  27. package/dist/api/device.js +961 -0
  28. package/dist/api/device.js.map +1 -0
  29. package/dist/api/encoder.d.ts +1132 -0
  30. package/dist/api/encoder.js +1988 -0
  31. package/dist/api/encoder.js.map +1 -0
  32. package/dist/api/filter-complex.d.ts +821 -0
  33. package/dist/api/filter-complex.js +1604 -0
  34. package/dist/api/filter-complex.js.map +1 -0
  35. package/dist/api/filter-presets.d.ts +1286 -0
  36. package/dist/api/filter-presets.js +2152 -0
  37. package/dist/api/filter-presets.js.map +1 -0
  38. package/dist/api/filter.d.ts +1234 -0
  39. package/dist/api/filter.js +1976 -0
  40. package/dist/api/filter.js.map +1 -0
  41. package/dist/api/fmp4-stream.d.ts +426 -0
  42. package/dist/api/fmp4-stream.js +739 -0
  43. package/dist/api/fmp4-stream.js.map +1 -0
  44. package/dist/api/hardware.d.ts +651 -0
  45. package/dist/api/hardware.js +1260 -0
  46. package/dist/api/hardware.js.map +1 -0
  47. package/dist/api/index.d.ts +17 -0
  48. package/dist/api/index.js +32 -0
  49. package/dist/api/index.js.map +1 -0
  50. package/dist/api/io-stream.d.ts +307 -0
  51. package/dist/api/io-stream.js +282 -0
  52. package/dist/api/io-stream.js.map +1 -0
  53. package/dist/api/muxer.d.ts +957 -0
  54. package/dist/api/muxer.js +2002 -0
  55. package/dist/api/muxer.js.map +1 -0
  56. package/dist/api/pipeline.d.ts +607 -0
  57. package/dist/api/pipeline.js +1145 -0
  58. package/dist/api/pipeline.js.map +1 -0
  59. package/dist/api/utilities/async-queue.d.ts +120 -0
  60. package/dist/api/utilities/async-queue.js +211 -0
  61. package/dist/api/utilities/async-queue.js.map +1 -0
  62. package/dist/api/utilities/audio-sample.d.ts +117 -0
  63. package/dist/api/utilities/audio-sample.js +112 -0
  64. package/dist/api/utilities/audio-sample.js.map +1 -0
  65. package/dist/api/utilities/channel-layout.d.ts +76 -0
  66. package/dist/api/utilities/channel-layout.js +80 -0
  67. package/dist/api/utilities/channel-layout.js.map +1 -0
  68. package/dist/api/utilities/electron-shared-texture.d.ts +328 -0
  69. package/dist/api/utilities/electron-shared-texture.js +503 -0
  70. package/dist/api/utilities/electron-shared-texture.js.map +1 -0
  71. package/dist/api/utilities/image.d.ts +207 -0
  72. package/dist/api/utilities/image.js +213 -0
  73. package/dist/api/utilities/image.js.map +1 -0
  74. package/dist/api/utilities/index.d.ts +12 -0
  75. package/dist/api/utilities/index.js +25 -0
  76. package/dist/api/utilities/index.js.map +1 -0
  77. package/dist/api/utilities/media-type.d.ts +49 -0
  78. package/dist/api/utilities/media-type.js +53 -0
  79. package/dist/api/utilities/media-type.js.map +1 -0
  80. package/dist/api/utilities/pixel-format.d.ts +89 -0
  81. package/dist/api/utilities/pixel-format.js +97 -0
  82. package/dist/api/utilities/pixel-format.js.map +1 -0
  83. package/dist/api/utilities/sample-format.d.ts +129 -0
  84. package/dist/api/utilities/sample-format.js +141 -0
  85. package/dist/api/utilities/sample-format.js.map +1 -0
  86. package/dist/api/utilities/scheduler.d.ts +138 -0
  87. package/dist/api/utilities/scheduler.js +98 -0
  88. package/dist/api/utilities/scheduler.js.map +1 -0
  89. package/dist/api/utilities/streaming.d.ts +186 -0
  90. package/dist/api/utilities/streaming.js +309 -0
  91. package/dist/api/utilities/streaming.js.map +1 -0
  92. package/dist/api/utilities/timestamp.d.ts +193 -0
  93. package/dist/api/utilities/timestamp.js +206 -0
  94. package/dist/api/utilities/timestamp.js.map +1 -0
  95. package/dist/api/utilities/whisper-model.d.ts +310 -0
  96. package/dist/api/utilities/whisper-model.js +528 -0
  97. package/dist/api/utilities/whisper-model.js.map +1 -0
  98. package/dist/api/utils.d.ts +19 -0
  99. package/dist/api/utils.js +39 -0
  100. package/dist/api/utils.js.map +1 -0
  101. package/dist/api/whisper.d.ts +324 -0
  102. package/dist/api/whisper.js +362 -0
  103. package/dist/api/whisper.js.map +1 -0
  104. package/dist/constants/channel-layouts.d.ts +53 -0
  105. package/dist/constants/channel-layouts.js +57 -0
  106. package/dist/constants/channel-layouts.js.map +1 -0
  107. package/dist/constants/constants.d.ts +2325 -0
  108. package/dist/constants/constants.js +1887 -0
  109. package/dist/constants/constants.js.map +1 -0
  110. package/dist/constants/decoders.d.ts +633 -0
  111. package/dist/constants/decoders.js +641 -0
  112. package/dist/constants/decoders.js.map +1 -0
  113. package/dist/constants/encoders.d.ts +295 -0
  114. package/dist/constants/encoders.js +308 -0
  115. package/dist/constants/encoders.js.map +1 -0
  116. package/dist/constants/hardware.d.ts +26 -0
  117. package/dist/constants/hardware.js +27 -0
  118. package/dist/constants/hardware.js.map +1 -0
  119. package/dist/constants/index.d.ts +5 -0
  120. package/dist/constants/index.js +6 -0
  121. package/dist/constants/index.js.map +1 -0
  122. package/dist/ffmpeg/index.d.ts +99 -0
  123. package/dist/ffmpeg/index.js +115 -0
  124. package/dist/ffmpeg/index.js.map +1 -0
  125. package/dist/ffmpeg/utils.d.ts +31 -0
  126. package/dist/ffmpeg/utils.js +68 -0
  127. package/dist/ffmpeg/utils.js.map +1 -0
  128. package/dist/ffmpeg/version.d.ts +6 -0
  129. package/dist/ffmpeg/version.js +7 -0
  130. package/dist/ffmpeg/version.js.map +1 -0
  131. package/dist/index.d.ts +4 -0
  132. package/dist/index.js +9 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/lib/audio-fifo.d.ts +399 -0
  135. package/dist/lib/audio-fifo.js +431 -0
  136. package/dist/lib/audio-fifo.js.map +1 -0
  137. package/dist/lib/binding.d.ts +228 -0
  138. package/dist/lib/binding.js +60 -0
  139. package/dist/lib/binding.js.map +1 -0
  140. package/dist/lib/bitstream-filter-context.d.ts +379 -0
  141. package/dist/lib/bitstream-filter-context.js +441 -0
  142. package/dist/lib/bitstream-filter-context.js.map +1 -0
  143. package/dist/lib/bitstream-filter.d.ts +140 -0
  144. package/dist/lib/bitstream-filter.js +154 -0
  145. package/dist/lib/bitstream-filter.js.map +1 -0
  146. package/dist/lib/codec-context.d.ts +1071 -0
  147. package/dist/lib/codec-context.js +1354 -0
  148. package/dist/lib/codec-context.js.map +1 -0
  149. package/dist/lib/codec-parameters.d.ts +616 -0
  150. package/dist/lib/codec-parameters.js +761 -0
  151. package/dist/lib/codec-parameters.js.map +1 -0
  152. package/dist/lib/codec-parser.d.ts +201 -0
  153. package/dist/lib/codec-parser.js +213 -0
  154. package/dist/lib/codec-parser.js.map +1 -0
  155. package/dist/lib/codec.d.ts +586 -0
  156. package/dist/lib/codec.js +713 -0
  157. package/dist/lib/codec.js.map +1 -0
  158. package/dist/lib/device.d.ts +291 -0
  159. package/dist/lib/device.js +324 -0
  160. package/dist/lib/device.js.map +1 -0
  161. package/dist/lib/dictionary.d.ts +333 -0
  162. package/dist/lib/dictionary.js +372 -0
  163. package/dist/lib/dictionary.js.map +1 -0
  164. package/dist/lib/error.d.ts +242 -0
  165. package/dist/lib/error.js +303 -0
  166. package/dist/lib/error.js.map +1 -0
  167. package/dist/lib/fifo.d.ts +416 -0
  168. package/dist/lib/fifo.js +453 -0
  169. package/dist/lib/fifo.js.map +1 -0
  170. package/dist/lib/filter-context.d.ts +712 -0
  171. package/dist/lib/filter-context.js +789 -0
  172. package/dist/lib/filter-context.js.map +1 -0
  173. package/dist/lib/filter-graph-segment.d.ts +160 -0
  174. package/dist/lib/filter-graph-segment.js +171 -0
  175. package/dist/lib/filter-graph-segment.js.map +1 -0
  176. package/dist/lib/filter-graph.d.ts +641 -0
  177. package/dist/lib/filter-graph.js +704 -0
  178. package/dist/lib/filter-graph.js.map +1 -0
  179. package/dist/lib/filter-inout.d.ts +198 -0
  180. package/dist/lib/filter-inout.js +257 -0
  181. package/dist/lib/filter-inout.js.map +1 -0
  182. package/dist/lib/filter.d.ts +243 -0
  183. package/dist/lib/filter.js +272 -0
  184. package/dist/lib/filter.js.map +1 -0
  185. package/dist/lib/format-context.d.ts +1254 -0
  186. package/dist/lib/format-context.js +1379 -0
  187. package/dist/lib/format-context.js.map +1 -0
  188. package/dist/lib/frame-utils.d.ts +116 -0
  189. package/dist/lib/frame-utils.js +98 -0
  190. package/dist/lib/frame-utils.js.map +1 -0
  191. package/dist/lib/frame.d.ts +1222 -0
  192. package/dist/lib/frame.js +1435 -0
  193. package/dist/lib/frame.js.map +1 -0
  194. package/dist/lib/hardware-device-context.d.ts +362 -0
  195. package/dist/lib/hardware-device-context.js +383 -0
  196. package/dist/lib/hardware-device-context.js.map +1 -0
  197. package/dist/lib/hardware-frames-context.d.ts +419 -0
  198. package/dist/lib/hardware-frames-context.js +477 -0
  199. package/dist/lib/hardware-frames-context.js.map +1 -0
  200. package/dist/lib/index.d.ts +35 -0
  201. package/dist/lib/index.js +60 -0
  202. package/dist/lib/index.js.map +1 -0
  203. package/dist/lib/input-format.d.ts +249 -0
  204. package/dist/lib/input-format.js +306 -0
  205. package/dist/lib/input-format.js.map +1 -0
  206. package/dist/lib/io-context.d.ts +696 -0
  207. package/dist/lib/io-context.js +769 -0
  208. package/dist/lib/io-context.js.map +1 -0
  209. package/dist/lib/log.d.ts +174 -0
  210. package/dist/lib/log.js +184 -0
  211. package/dist/lib/log.js.map +1 -0
  212. package/dist/lib/native-types.d.ts +946 -0
  213. package/dist/lib/native-types.js +2 -0
  214. package/dist/lib/native-types.js.map +1 -0
  215. package/dist/lib/option.d.ts +927 -0
  216. package/dist/lib/option.js +1583 -0
  217. package/dist/lib/option.js.map +1 -0
  218. package/dist/lib/output-format.d.ts +180 -0
  219. package/dist/lib/output-format.js +213 -0
  220. package/dist/lib/output-format.js.map +1 -0
  221. package/dist/lib/packet.d.ts +501 -0
  222. package/dist/lib/packet.js +590 -0
  223. package/dist/lib/packet.js.map +1 -0
  224. package/dist/lib/rational.d.ts +251 -0
  225. package/dist/lib/rational.js +278 -0
  226. package/dist/lib/rational.js.map +1 -0
  227. package/dist/lib/software-resample-context.d.ts +552 -0
  228. package/dist/lib/software-resample-context.js +592 -0
  229. package/dist/lib/software-resample-context.js.map +1 -0
  230. package/dist/lib/software-scale-context.d.ts +344 -0
  231. package/dist/lib/software-scale-context.js +366 -0
  232. package/dist/lib/software-scale-context.js.map +1 -0
  233. package/dist/lib/stream.d.ts +379 -0
  234. package/dist/lib/stream.js +526 -0
  235. package/dist/lib/stream.js.map +1 -0
  236. package/dist/lib/sync-queue.d.ts +179 -0
  237. package/dist/lib/sync-queue.js +197 -0
  238. package/dist/lib/sync-queue.js.map +1 -0
  239. package/dist/lib/types.d.ts +34 -0
  240. package/dist/lib/types.js +2 -0
  241. package/dist/lib/types.js.map +1 -0
  242. package/dist/lib/utilities.d.ts +1127 -0
  243. package/dist/lib/utilities.js +1225 -0
  244. package/dist/lib/utilities.js.map +1 -0
  245. package/dist/utils/electron.d.ts +49 -0
  246. package/dist/utils/electron.js +63 -0
  247. package/dist/utils/electron.js.map +1 -0
  248. package/dist/utils/index.d.ts +4 -0
  249. package/dist/utils/index.js +5 -0
  250. package/dist/utils/index.js.map +1 -0
  251. package/install/check.js +121 -0
  252. package/install/ffmpeg.js +66 -0
  253. package/jellyfin-ffmpeg.patch +181 -0
  254. package/package.json +129 -0
@@ -0,0 +1,383 @@
1
+ import { bindings } from './binding.js';
2
+ /**
3
+ * Hardware device context for GPU-accelerated processing.
4
+ *
5
+ * Manages hardware acceleration devices for video encoding, decoding, and filtering.
6
+ * Provides access to GPU resources like CUDA, VAAPI, VideoToolbox, and other
7
+ * hardware acceleration APIs. Essential for high-performance video processing
8
+ * and reduced CPU usage.
9
+ *
10
+ * Direct mapping to FFmpeg's AVHWDeviceContext.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { HardwareDeviceContext, FFmpegError } from 'node-av';
15
+ * import { AV_HWDEVICE_TYPE_CUDA, AV_HWDEVICE_TYPE_VIDEOTOOLBOX } from 'node-av/constants';
16
+ *
17
+ * // Create hardware device
18
+ * const device = new HardwareDeviceContext();
19
+ * const ret = device.create(AV_HWDEVICE_TYPE_CUDA);
20
+ * FFmpegError.throwIfError(ret, 'create');
21
+ *
22
+ * // List available hardware types
23
+ * const types = HardwareDeviceContext.iterateTypes();
24
+ * for (const type of types) {
25
+ * const name = HardwareDeviceContext.getTypeName(type);
26
+ * console.log(`Available: ${name}`);
27
+ * }
28
+ *
29
+ * // Use with decoder
30
+ * const codecContext = new CodecContext();
31
+ * codecContext.hwDeviceCtx = device;
32
+ *
33
+ * // Create derived context
34
+ * const derived = new HardwareDeviceContext();
35
+ * const ret2 = derived.createDerived(device, AV_HWDEVICE_TYPE_CUDA);
36
+ * FFmpegError.throwIfError(ret2, 'createDerived');
37
+ *
38
+ * // Cleanup
39
+ * device.free();
40
+ * ```
41
+ *
42
+ * @see [AVHWDeviceContext](https://ffmpeg.org/doxygen/trunk/structAVHWDeviceContext.html) - FFmpeg Doxygen
43
+ * @see {@link HardwareFramesContext} For hardware frame allocation
44
+ * @see {@link CodecContext} For hardware codec usage
45
+ */
46
+ export class HardwareDeviceContext {
47
+ native;
48
+ constructor() {
49
+ this.native = new bindings.HardwareDeviceContext();
50
+ }
51
+ /**
52
+ * Get human-readable name for hardware device type.
53
+ *
54
+ * Converts a hardware device type enum to its string representation.
55
+ *
56
+ * Direct mapping to av_hwdevice_get_type_name().
57
+ *
58
+ * @param type - Hardware device type
59
+ *
60
+ * @returns Type name string, or null if invalid
61
+ *
62
+ * @example
63
+ * ```typescript
64
+ * import { AV_HWDEVICE_TYPE_CUDA } from 'node-av/constants';
65
+ *
66
+ * const name = HardwareDeviceContext.getTypeName(AV_HWDEVICE_TYPE_CUDA);
67
+ * console.log(name); // "cuda"
68
+ * ```
69
+ *
70
+ * @see {@link findTypeByName} For reverse lookup
71
+ */
72
+ static getTypeName(type) {
73
+ return bindings.HardwareDeviceContext.getTypeName(type);
74
+ }
75
+ /**
76
+ * List all supported hardware device types.
77
+ *
78
+ * Returns an array of all hardware acceleration types available
79
+ * in the current FFmpeg build.
80
+ *
81
+ * Direct mapping to av_hwdevice_iterate_types().
82
+ *
83
+ * @returns Array of available hardware device types
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * const types = HardwareDeviceContext.iterateTypes();
88
+ * console.log('Available hardware acceleration:');
89
+ * for (const type of types) {
90
+ * const name = HardwareDeviceContext.getTypeName(type);
91
+ * console.log(` - ${name}`);
92
+ * }
93
+ * ```
94
+ */
95
+ static iterateTypes() {
96
+ return bindings.HardwareDeviceContext.iterateTypes();
97
+ }
98
+ /**
99
+ * Find hardware device type by name.
100
+ *
101
+ * Converts a string name to the corresponding hardware device type enum.
102
+ *
103
+ * Direct mapping to av_hwdevice_find_type_by_name().
104
+ *
105
+ * @param name - Hardware type name (e.g., 'cuda', 'vaapi', 'videotoolbox')
106
+ *
107
+ * @returns Hardware device type enum, or AV_HWDEVICE_TYPE_NONE if not found
108
+ *
109
+ * @example
110
+ * ```typescript
111
+ * const type = HardwareDeviceContext.findTypeByName('cuda');
112
+ * if (type !== AV_HWDEVICE_TYPE_NONE) {
113
+ * console.log('CUDA is available');
114
+ * }
115
+ * ```
116
+ *
117
+ * @see {@link getTypeName} For type to name conversion
118
+ */
119
+ static findTypeByName(name) {
120
+ return bindings.HardwareDeviceContext.findTypeByName(name);
121
+ }
122
+ /**
123
+ * Hardware device type.
124
+ *
125
+ * The type of hardware acceleration in use.
126
+ *
127
+ * Direct mapping to AVHWDeviceContext->type.
128
+ */
129
+ get type() {
130
+ return this.native.type;
131
+ }
132
+ /**
133
+ * Hardware context pointer.
134
+ *
135
+ * Opaque pointer to the underlying hardware-specific context.
136
+ * Type depends on the hardware device type.
137
+ *
138
+ * Direct mapping to AVHWDeviceContext->hwctx.
139
+ */
140
+ get hwctx() {
141
+ return this.native.hwctx;
142
+ }
143
+ /**
144
+ * Allocate hardware device context.
145
+ *
146
+ * Allocates memory for the specified hardware device type.
147
+ * Must be followed by init() to initialize the device.
148
+ *
149
+ * Direct mapping to av_hwdevice_ctx_alloc().
150
+ *
151
+ * @param type - Hardware device type to allocate
152
+ *
153
+ * @throws {Error} If allocation fails (ENOMEM)
154
+ *
155
+ * @example
156
+ * ```typescript
157
+ * import { AV_HWDEVICE_TYPE_CUDA } from 'node-av/constants';
158
+ *
159
+ * const device = new HardwareDeviceContext();
160
+ * device.alloc(AV_HWDEVICE_TYPE_CUDA);
161
+ * const ret = device.init();
162
+ * FFmpegError.throwIfError(ret, 'init');
163
+ * ```
164
+ *
165
+ * @see {@link init} To initialize after allocation
166
+ * @see {@link create} For combined alloc and init
167
+ */
168
+ alloc(type) {
169
+ this.native.alloc(type);
170
+ }
171
+ /**
172
+ * Initialize allocated hardware device.
173
+ *
174
+ * Initializes a previously allocated hardware device context.
175
+ * Must be called after alloc() and before using the device.
176
+ *
177
+ * Direct mapping to av_hwdevice_ctx_init().
178
+ *
179
+ * @returns 0 on success, negative AVERROR on error:
180
+ * - AVERROR_EINVAL: Invalid parameters
181
+ * - AVERROR_ENOMEM: Memory allocation failure
182
+ * - Device-specific errors
183
+ *
184
+ * @example
185
+ * ```typescript
186
+ * import { FFmpegError } from 'node-av';
187
+ *
188
+ * device.alloc(type);
189
+ * const ret = device.init();
190
+ * FFmpegError.throwIfError(ret, 'init');
191
+ * ```
192
+ *
193
+ * @see {@link alloc} Must be called first
194
+ * @see {@link create} For combined operation
195
+ */
196
+ init() {
197
+ return this.native.init();
198
+ }
199
+ /**
200
+ * Create and initialize hardware device.
201
+ *
202
+ * Combined allocation and initialization of a hardware device.
203
+ * This is the preferred method for creating hardware contexts.
204
+ *
205
+ * Direct mapping to av_hwdevice_ctx_create().
206
+ *
207
+ * @param type - Hardware device type
208
+ *
209
+ * @param device - Device name/path (null for default)
210
+ *
211
+ * @param options - Device-specific options
212
+ *
213
+ * @returns 0 on success, negative AVERROR on error:
214
+ * - AVERROR_EINVAL: Invalid type or parameters
215
+ * - AVERROR_ENOMEM: Memory allocation failure
216
+ * - AVERROR_ENOSYS: Type not supported
217
+ * - Device-specific errors
218
+ *
219
+ * @example
220
+ * ```typescript
221
+ * import { FFmpegError, Dictionary } from 'node-av';
222
+ * import { AV_HWDEVICE_TYPE_CUDA } from 'node-av/constants';
223
+ *
224
+ * // Create with default device
225
+ * const device = new HardwareDeviceContext();
226
+ * let ret = device.create(AV_HWDEVICE_TYPE_CUDA);
227
+ * FFmpegError.throwIfError(ret, 'create');
228
+ *
229
+ * // Create with specific device
230
+ * const device2 = new HardwareDeviceContext();
231
+ * ret = device2.create(AV_HWDEVICE_TYPE_VAAPI, '/dev/dri/renderD128');
232
+ * FFmpegError.throwIfError(ret, 'create');
233
+ *
234
+ * // Create with options
235
+ * const opts = Dictionary.fromObject({ 'device_idx': '1' });
236
+ * ret = device.create(AV_HWDEVICE_TYPE_CUDA, null, opts);
237
+ * FFmpegError.throwIfError(ret, 'create');
238
+ * ```
239
+ *
240
+ * @see {@link createDerived} To create from existing device
241
+ */
242
+ create(type, device = null, options = null) {
243
+ return this.native.create(type, device, options?.getNative() ?? null);
244
+ }
245
+ /**
246
+ * Create derived hardware device.
247
+ *
248
+ * Creates a new device context derived from an existing one.
249
+ * Used for interoperability between different hardware APIs.
250
+ *
251
+ * Direct mapping to av_hwdevice_ctx_create_derived().
252
+ *
253
+ * @param source - Source device context to derive from
254
+ *
255
+ * @param type - Target hardware device type
256
+ *
257
+ * @returns 0 on success, negative AVERROR on error:
258
+ * - AVERROR_EINVAL: Invalid parameters
259
+ * - AVERROR_ENOSYS: Derivation not supported
260
+ * - AVERROR_ENOMEM: Memory allocation failure
261
+ *
262
+ * @example
263
+ * ```typescript
264
+ * import { FFmpegError } from 'node-av';
265
+ * import { AV_HWDEVICE_TYPE_CUDA, AV_HWDEVICE_TYPE_VULKAN } from 'node-av/constants';
266
+ *
267
+ * // Create CUDA device from Vulkan
268
+ * const vulkan = new HardwareDeviceContext();
269
+ * vulkan.create(AV_HWDEVICE_TYPE_VULKAN);
270
+ *
271
+ * const cuda = new HardwareDeviceContext();
272
+ * const ret = cuda.createDerived(vulkan, AV_HWDEVICE_TYPE_CUDA);
273
+ * FFmpegError.throwIfError(ret, 'createDerived');
274
+ * ```
275
+ *
276
+ * @see {@link create} For creating independent device
277
+ */
278
+ createDerived(source, type) {
279
+ return this.native.createDerived(source.native, type);
280
+ }
281
+ /**
282
+ * Free hardware device context.
283
+ *
284
+ * Releases all resources associated with the hardware device.
285
+ * The context becomes invalid after calling this.
286
+ *
287
+ * Direct mapping to av_buffer_unref() on device context.
288
+ *
289
+ * @example
290
+ * ```typescript
291
+ * device.free();
292
+ * // Device is now invalid
293
+ * ```
294
+ *
295
+ * @see {@link Symbol.dispose} For automatic cleanup
296
+ */
297
+ free() {
298
+ this.native.free();
299
+ }
300
+ /**
301
+ * Allocate hardware configuration.
302
+ *
303
+ * Allocates a hardware-specific configuration structure.
304
+ * Used for codec configuration with hardware acceleration.
305
+ *
306
+ * Direct mapping to av_hwdevice_hwconfig_alloc().
307
+ *
308
+ * @returns Configuration pointer, or null on failure
309
+ *
310
+ * @example
311
+ * ```typescript
312
+ * const hwconfig = device.hwconfigAlloc();
313
+ * if (hwconfig) {
314
+ * // Use with codec context
315
+ * codecContext.hwConfig = hwconfig;
316
+ * }
317
+ * ```
318
+ *
319
+ * @see {@link getHwframeConstraints} To get constraints
320
+ */
321
+ hwconfigAlloc() {
322
+ return this.native.hwconfigAlloc();
323
+ }
324
+ /**
325
+ * Get hardware frame constraints.
326
+ *
327
+ * Returns the constraints on frames that can be allocated
328
+ * with this hardware device.
329
+ *
330
+ * Direct mapping to av_hwdevice_get_hwframe_constraints().
331
+ *
332
+ * @param hwconfig - Optional hardware configuration
333
+ *
334
+ * @returns Frame constraints, or null if not available
335
+ *
336
+ * @example
337
+ * ```typescript
338
+ * const constraints = device.getHwframeConstraints();
339
+ * if (constraints) {
340
+ * console.log(`Min size: ${constraints.minWidth}x${constraints.minHeight}`);
341
+ * console.log(`Max size: ${constraints.maxWidth}x${constraints.maxHeight}`);
342
+ * if (constraints.validSwFormats) {
343
+ * console.log('Software formats:', constraints.validSwFormats);
344
+ * }
345
+ * if (constraints.validHwFormats) {
346
+ * console.log('Hardware formats:', constraints.validHwFormats);
347
+ * }
348
+ * }
349
+ * ```
350
+ */
351
+ getHwframeConstraints(hwconfig) {
352
+ return this.native.getHwframeConstraints(hwconfig);
353
+ }
354
+ /**
355
+ * Get the underlying native HardwareDeviceContext object.
356
+ *
357
+ * @returns The native HardwareDeviceContext binding object
358
+ *
359
+ * @internal
360
+ */
361
+ getNative() {
362
+ return this.native;
363
+ }
364
+ /**
365
+ * Dispose of the hardware device context.
366
+ *
367
+ * Implements the Disposable interface for automatic cleanup.
368
+ * Equivalent to calling free().
369
+ *
370
+ * @example
371
+ * ```typescript
372
+ * {
373
+ * using device = new HardwareDeviceContext();
374
+ * device.create(AV_HWDEVICE_TYPE_CUDA);
375
+ * // Use device...
376
+ * } // Automatically freed when leaving scope
377
+ * ```
378
+ */
379
+ [Symbol.dispose]() {
380
+ this.native[Symbol.dispose]();
381
+ }
382
+ }
383
+ //# sourceMappingURL=hardware-device-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hardware-device-context.js","sourceRoot":"","sources":["../../src/lib/hardware-device-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAOxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,OAAO,qBAAqB;IACxB,MAAM,CAA8B;IAE5C;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,CAAC,qBAAqB,EAAE,CAAC;IACrD,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,CAAC,WAAW,CAAC,IAAoB;QACrC,OAAO,QAAQ,CAAC,qBAAqB,CAAC,WAAW,CAAC,IAAI,CAA0B,CAAC;IACnF,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,YAAY;QACjB,OAAO,QAAQ,CAAC,qBAAqB,CAAC,YAAY,EAAE,CAAC;IACvD,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,CAAC,cAAc,CAAC,IAAoB;QACxC,OAAO,QAAQ,CAAC,qBAAqB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED;;;;;;OAMG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,KAAK,CAAC,IAAoB;QACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CG;IACH,MAAM,CAAC,IAAoB,EAAE,SAAwB,IAAI,EAAE,UAA6B,IAAI;QAC1F,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC;IACxE,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,aAAa,CAAC,MAA6B,EAAE,IAAoB;QAC/D,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,IAAI;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;IACrC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,qBAAqB,CAAC,QAAiB;QAQrC,OAAO,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED;;;;;;OAMG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,CAAC,MAAM,CAAC,OAAO,CAAC;QACd,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAChC,CAAC;CACF"}