@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 @@
1
+ {"version":3,"file":"fmp4-stream.js","sourceRoot":"","sources":["../../src/api/fmp4-stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,651 @@
1
+ import { Codec } from '../lib/codec.js';
2
+ import { HardwareDeviceContext } from '../lib/hardware-device-context.js';
3
+ import { Stream } from '../lib/stream.js';
4
+ import type { AVCodecID, AVHWDeviceType, AVPixelFormat, FFDecoderCodec, FFEncoderCodec, FFHWDeviceType } from '../constants/index.js';
5
+ /**
6
+ * Base codec names supported across different hardware types.
7
+ */
8
+ export type BaseCodecName = 'av1' | 'h264' | 'hevc' | 'h263' | 'mpeg2' | 'mpeg4' | 'vp8' | 'vp9' | 'mjpeg' | 'prores';
9
+ /**
10
+ * Hardware acceleration configuration options.
11
+ */
12
+ export interface HardwareOptions {
13
+ /**
14
+ * Device path or index (e.g., '0' for first GPU).
15
+ */
16
+ device?: string;
17
+ /**
18
+ * Device initialization options.
19
+ */
20
+ options?: Record<string, string>;
21
+ }
22
+ /**
23
+ * High-level hardware acceleration management.
24
+ *
25
+ * Provides automatic detection and configuration of hardware acceleration for media processing.
26
+ * Manages device contexts for GPU-accelerated encoding and decoding operations.
27
+ * Supports various hardware types including VideoToolbox, CUDA, VAAPI, D3D11VA, and more.
28
+ * Essential for high-performance video processing with reduced CPU usage.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * import { HardwareContext } from 'node-av/api';
33
+ * import { AV_HWDEVICE_TYPE_CUDA } from 'node-av/constants';
34
+ *
35
+ * // Auto-detect best available hardware
36
+ * const hw = HardwareContext.auto();
37
+ * if (hw) {
38
+ * console.log(`Using hardware: ${hw.deviceTypeName}`);
39
+ * const decoder = await Decoder.create(stream, { hardware: hw });
40
+ * }
41
+ * ```
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * // Use specific hardware type
46
+ * const hw = HardwareContext.create(AV_HWDEVICE_TYPE_CUDA);
47
+ * const encoderCodec = hw?.getEncoderCodec('h264') ?? FF_ENCODER_LIBX264;
48
+ * const encoder = await Encoder.create(encoderCodec, { ... });
49
+ * hw.dispose();
50
+ * ```
51
+ *
52
+ * @see {@link Decoder} For hardware-accelerated decoding
53
+ * @see {@link Encoder} For hardware-accelerated encoding
54
+ */
55
+ export declare class HardwareContext implements Disposable {
56
+ private static _autoTested;
57
+ private static _autoCachedType;
58
+ private _deviceContext;
59
+ private _deviceType;
60
+ private _deviceTypeName;
61
+ private _devicePixelFormat;
62
+ private _isDisposed;
63
+ /**
64
+ * @param deviceContext - Initialized hardware device context
65
+ *
66
+ * @param deviceType - Hardware device type enum
67
+ *
68
+ * @param deviceTypeName - Human-readable device type name
69
+ *
70
+ * @internal
71
+ */
72
+ private constructor();
73
+ /**
74
+ * Auto-detect and create the best available hardware context.
75
+ *
76
+ * Tries hardware types in order of preference based on platform.
77
+ * Returns null if no hardware acceleration is available.
78
+ * Platform-specific preference order ensures optimal performance.
79
+ *
80
+ * @param options - Optional hardware configuration
81
+ *
82
+ * @returns Hardware context or null if unavailable
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * const hw = HardwareContext.auto();
87
+ * if (hw) {
88
+ * console.log(`Auto-detected: ${hw.deviceTypeName}`);
89
+ * // Use for decoder/encoder
90
+ * }
91
+ * ```
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * // With specific device
96
+ * const hw = HardwareContext.auto({
97
+ * deviceName: '/dev/dri/renderD128'
98
+ * });
99
+ * ```
100
+ *
101
+ * @see {@link create} For specific hardware type
102
+ * @see {@link listAvailable} To check available types
103
+ */
104
+ static auto(options?: HardwareOptions): HardwareContext | null;
105
+ /**
106
+ * Reset the auto-detection cache.
107
+ *
108
+ * Forces the next call to auto() to re-test hardware availability.
109
+ * Useful for testing or if hardware availability may have changed.
110
+ *
111
+ * @example
112
+ * ```typescript
113
+ * HardwareContext.resetAutoCache();
114
+ * const hw = HardwareContext.auto(); // Will re-test
115
+ * ```
116
+ */
117
+ static resetAutoCache(): void;
118
+ /**
119
+ * Create a hardware context for a specific device type.
120
+ *
121
+ * Creates and initializes a hardware device context.
122
+ * Throws if the device type is not supported or initialization fails.
123
+ *
124
+ * Direct mapping to av_hwdevice_ctx_create().
125
+ *
126
+ * @param deviceType - Hardware device type from AVHWDeviceType
127
+ *
128
+ * @param device - Optional device specifier (e.g., GPU index, device path)
129
+ *
130
+ * @param options - Optional device initialization options
131
+ *
132
+ * @returns Initialized hardware context or null if HardwareContext could not be created
133
+ *
134
+ * @example
135
+ * ```typescript
136
+ * import { AV_HWDEVICE_TYPE_CUDA } from 'node-av/constants';
137
+ *
138
+ * // CUDA with specific GPU
139
+ * const cuda = HardwareContext.create(AV_HWDEVICE_TYPE_CUDA, '0');
140
+ * ```
141
+ *
142
+ * @example
143
+ * ```typescript
144
+ * import { AV_HWDEVICE_TYPE_VAAPI } from 'node-av/constants';
145
+ *
146
+ * // VAAPI with render device
147
+ * const vaapi = HardwareContext.create(
148
+ * AV_HWDEVICE_TYPE_VAAPI,
149
+ * '/dev/dri/renderD128'
150
+ * );
151
+ * ```
152
+ *
153
+ * @see {@link auto} For automatic detection
154
+ * @see {@link HardwareDeviceContext} For low-level API
155
+ */
156
+ static create(deviceType: AVHWDeviceType | FFHWDeviceType, device?: string, options?: Record<string, string>): HardwareContext | null;
157
+ /**
158
+ * Create a derived hardware device context.
159
+ *
160
+ * Creates a new hardware context derived from an existing one.
161
+ * Allows creating contexts on different device types that can share
162
+ * memory or resources with the source device. Useful for cross-device
163
+ * pipelines (e.g., VAAPI → OpenCL, CUDA → Vulkan).
164
+ *
165
+ * Direct mapping to av_hwdevice_ctx_create_derived().
166
+ *
167
+ * @param source - Source hardware context to derive from
168
+ *
169
+ * @param targetType - Target device type to create
170
+ *
171
+ * @returns New hardware context or null if derivation fails
172
+ *
173
+ * @example
174
+ * ```typescript
175
+ * import { AV_HWDEVICE_TYPE_VAAPI, AV_HWDEVICE_TYPE_OPENCL } from 'node-av/constants';
176
+ *
177
+ * // Create VAAPI device for decoding
178
+ * const vaapi = HardwareContext.create(AV_HWDEVICE_TYPE_VAAPI);
179
+ *
180
+ * // Derive OpenCL device for filtering (shares memory with VAAPI)
181
+ * const opencl = HardwareContext.derive(vaapi, AV_HWDEVICE_TYPE_OPENCL);
182
+ *
183
+ * if (opencl) {
184
+ * // Decode with VAAPI
185
+ * const decoder = await Decoder.create(stream, { hardware: vaapi });
186
+ *
187
+ * // Filter with OpenCL (overrides frame's VAAPI context)
188
+ * const filter = FilterAPI.create('program_opencl=...', { hardware: opencl });
189
+ *
190
+ * for await (const frame of decoder.frames()) {
191
+ * // frame has VAAPI context, but filter uses OpenCL
192
+ * const filtered = await filter.apply(frame);
193
+ * }
194
+ * }
195
+ * ```
196
+ *
197
+ * @example
198
+ * ```typescript
199
+ * // CUDA → Vulkan derivation
200
+ * const cuda = HardwareContext.create(AV_HWDEVICE_TYPE_CUDA);
201
+ * const vulkan = HardwareContext.derive(cuda, AV_HWDEVICE_TYPE_VULKAN);
202
+ * ```
203
+ *
204
+ * @see {@link create} For creating independent device
205
+ */
206
+ static derive(source: HardwareContext, targetType: AVHWDeviceType | FFHWDeviceType): HardwareContext | null;
207
+ /**
208
+ * List all available hardware device types.
209
+ *
210
+ * Enumerates all hardware types supported by the FFmpeg build.
211
+ * Useful for checking hardware capabilities at runtime.
212
+ *
213
+ * Direct mapping to av_hwdevice_iterate_types().
214
+ *
215
+ * @returns Array of available device type names
216
+ *
217
+ * @example
218
+ * ```typescript
219
+ * const available = HardwareContext.listAvailable();
220
+ * console.log('Available hardware:', available.join(', '));
221
+ * // Output: "cuda, vaapi, videotoolbox"
222
+ * ```
223
+ *
224
+ * @see {@link auto} For automatic selection
225
+ */
226
+ static listAvailable(): string[];
227
+ /**
228
+ * Get the hardware device context.
229
+ *
230
+ * Used internally by encoders and decoders for hardware acceleration.
231
+ * Can be assigned to CodecContext.hwDeviceCtx.
232
+ *
233
+ * @example
234
+ * ```typescript
235
+ * codecContext.hwDeviceCtx = hw.deviceContext;
236
+ * ```
237
+ */
238
+ get deviceContext(): HardwareDeviceContext;
239
+ /**
240
+ * Get the device type enum value.
241
+ *
242
+ * @example
243
+ * ```typescript
244
+ * if (hw.deviceType === AV_HWDEVICE_TYPE_CUDA) {
245
+ * console.log('Using NVIDIA GPU');
246
+ * }
247
+ * ```
248
+ */
249
+ get deviceType(): AVHWDeviceType;
250
+ /**
251
+ * Get the hardware device type name.
252
+ *
253
+ * Human-readable device type string.
254
+ *
255
+ * @example
256
+ * ```typescript
257
+ * console.log(`Hardware type: ${hw.deviceTypeName}`);
258
+ * // Output: "cuda" or "videotoolbox" etc.
259
+ * ```
260
+ */
261
+ get deviceTypeName(): FFHWDeviceType;
262
+ /**
263
+ * Get the device pixel format.
264
+ *
265
+ * Hardware-specific pixel format for frame allocation.
266
+ *
267
+ * @example
268
+ * ```typescript
269
+ * frame.format = hw.devicePixelFormat;
270
+ * ```
271
+ */
272
+ get devicePixelFormat(): AVPixelFormat;
273
+ /**
274
+ * Check if this hardware context has been disposed.
275
+ *
276
+ * @example
277
+ * ```typescript
278
+ * if (!hw.isDisposed) {
279
+ * hw.dispose();
280
+ * }
281
+ * ```
282
+ */
283
+ get isDisposed(): boolean;
284
+ /**
285
+ * Get hardware frame constraints.
286
+ *
287
+ * Returns the resolution limits and supported pixel formats for this hardware device.
288
+ * Essential for validating encoder/decoder parameters before initialization.
289
+ *
290
+ * Direct mapping to av_hwdevice_get_hwframe_constraints().
291
+ *
292
+ * @param hwconfig - Optional hardware configuration pointer
293
+ *
294
+ * @returns Constraints object with resolution limits and formats, or null if not available
295
+ *
296
+ * @example
297
+ * ```typescript
298
+ * const hw = HardwareContext.auto();
299
+ * if (hw) {
300
+ * const constraints = hw.getFrameConstraints();
301
+ * if (constraints) {
302
+ * console.log(`Resolution: ${constraints.minWidth}x${constraints.minHeight} to ${constraints.maxWidth}x${constraints.maxHeight}`);
303
+ * console.log('Hardware formats:', constraints.validHwFormats);
304
+ * console.log('Software formats:', constraints.validSwFormats);
305
+ * }
306
+ * }
307
+ * ```
308
+ *
309
+ * @example
310
+ * ```typescript
311
+ * import { AV_HWDEVICE_TYPE_VIDEOTOOLBOX } from 'node-av/constants';
312
+ *
313
+ * // VideoToolbox has resolution limits
314
+ * const hw = HardwareContext.create(AV_HWDEVICE_TYPE_VIDEOTOOLBOX);
315
+ * const constraints = hw?.getFrameConstraints();
316
+ * if (constraints && (width > constraints.maxWidth || height > constraints.maxHeight)) {
317
+ * console.log('Resolution exceeds hardware limits, falling back to software encoder');
318
+ * }
319
+ * ```
320
+ *
321
+ * @see {@link HardwareDeviceContext.getHwframeConstraints} For low-level API
322
+ */
323
+ getFrameConstraints(hwconfig?: bigint): {
324
+ validHwFormats?: number[];
325
+ validSwFormats?: number[];
326
+ minWidth: number;
327
+ minHeight: number;
328
+ maxWidth: number;
329
+ maxHeight: number;
330
+ } | null;
331
+ /**
332
+ * Check if this hardware type supports a specific codec.
333
+ *
334
+ * Queries FFmpeg's codec configurations to verify hardware support.
335
+ * Checks both decoder and encoder support based on parameters.
336
+ *
337
+ * Direct mapping to avcodec_get_hw_config().
338
+ *
339
+ * @param codecId - Codec ID from AVCodecID enum
340
+ *
341
+ * @param isEncoder - Check for encoder support (default: decoder)
342
+ *
343
+ * @returns true if codec is supported
344
+ *
345
+ * @example
346
+ * ```typescript
347
+ * import { AV_CODEC_ID_H264 } from 'node-av/constants';
348
+ *
349
+ * if (hw.supportsCodec(AV_CODEC_ID_H264, true)) {
350
+ * // Can use hardware H.264 encoder
351
+ * }
352
+ * ```
353
+ *
354
+ * @see {@link findSupportedCodecs} For all supported codecs
355
+ */
356
+ supportsCodec(codecId: AVCodecID, isEncoder?: boolean): boolean;
357
+ /**
358
+ * Check if this hardware supports a specific pixel format for a codec.
359
+ *
360
+ * Verifies pixel format compatibility with hardware codec.
361
+ * Important for ensuring format compatibility in pipelines.
362
+ *
363
+ * @param codecId - Codec ID from AVCodecID enum
364
+ *
365
+ * @param pixelFormat - Pixel format to check
366
+ *
367
+ * @param isEncoder - Check for encoder (default: decoder)
368
+ *
369
+ * @returns true if pixel format is supported
370
+ *
371
+ * @example
372
+ * ```typescript
373
+ * import { AV_CODEC_ID_H264, AV_PIX_FMT_NV12 } from 'node-av/constants';
374
+ *
375
+ * if (hw.supportsPixelFormat(AV_CODEC_ID_H264, AV_PIX_FMT_NV12)) {
376
+ * // Can use NV12 format with H.264
377
+ * }
378
+ * ```
379
+ *
380
+ * @see {@link supportsCodec} For basic codec support
381
+ */
382
+ supportsPixelFormat(codecId: AVCodecID, pixelFormat: AVPixelFormat, isEncoder?: boolean): boolean;
383
+ /**
384
+ * Get the appropriate encoder codec for a given base codec name.
385
+ *
386
+ * Maps generic codec names to hardware-specific encoder implementations.
387
+ * Returns null if no hardware encoder is available for the codec.
388
+ * Automatically tests encoder viability before returning.
389
+ *
390
+ * @param codecOrStream - Generic codec name (e.g., 'h264', 'hevc', 'av1'), AVCodecID or Stream
391
+ *
392
+ * @param validate - Whether to validate encoder by testing (default: false)
393
+ *
394
+ * @returns Hardware encoder codec or null if unsupported
395
+ *
396
+ * @example
397
+ * ```typescript
398
+ * const encoderCodec = hw.getEncoderCodec('h264');
399
+ * if (encoderCodec) {
400
+ * console.log(`Using encoder: ${encoderCodec.name}`);
401
+ * // e.g., "h264_nvenc" for CUDA
402
+ * }
403
+ * ```
404
+ *
405
+ * @example
406
+ * ```typescript
407
+ * // Use with Encoder.create
408
+ * const codec = hw.getEncoderCodec('hevc');
409
+ * if (codec) {
410
+ * const encoder = await Encoder.create(codec, { ... });
411
+ * }
412
+ * ```
413
+ *
414
+ * @see {@link Encoder.create} For using the codec
415
+ */
416
+ getEncoderCodec(codecOrStream: BaseCodecName | AVCodecID | Stream, validate?: boolean): Codec | null;
417
+ /**
418
+ * Get the appropriate decoder codec for a given base codec name.
419
+ *
420
+ * Maps generic codec names to hardware-specific decoder implementations.
421
+ * Returns null if no hardware decoder is available for the codec.
422
+ * Automatically searches for decoders that support this hardware device type.
423
+ *
424
+ * @param codec - Generic codec name (e.g., 'h264', 'hevc', 'av1') or AVCodecID
425
+ *
426
+ * @returns Hardware decoder codec or null if unsupported
427
+ *
428
+ * @example
429
+ * ```typescript
430
+ * const decoderCodec = hw.getDecoderCodec('hevc');
431
+ * if (decoderCodec) {
432
+ * console.log(`Using decoder: ${decoderCodec.name}`);
433
+ * // e.g., "hevc_qsv" for QSV
434
+ * }
435
+ * ```
436
+ *
437
+ * @example
438
+ * ```typescript
439
+ * // Use with Decoder.create
440
+ * const codec = hw.getDecoderCodec(AV_CODEC_ID_H264);
441
+ * if (codec) {
442
+ * const decoder = await Decoder.create(stream, { hardware: hw });
443
+ * }
444
+ * ```
445
+ *
446
+ * @see {@link Decoder.create} For using the codec
447
+ * @see {@link getEncoderCodec} For hardware encoders
448
+ */
449
+ getDecoderCodec(codec: BaseCodecName | AVCodecID): Codec | null;
450
+ /**
451
+ * Test if hardware acceleration is working by decoding a test frame.
452
+ *
453
+ * Creates a simple decoder and attempts to decode with hardware acceleration.
454
+ * Returns true if hardware decoding succeeds, false otherwise.
455
+ * Useful for validating hardware setup before processing.
456
+ *
457
+ * @param codecId - Codec ID to test (default: H.264)
458
+ *
459
+ * @returns Promise that resolves to true if hardware works
460
+ *
461
+ * @example
462
+ * ```typescript
463
+ * const hw = HardwareContext.auto();
464
+ * if (hw && await hw.testDecoder()) {
465
+ * console.log('Hardware acceleration working!');
466
+ * // Proceed with hardware decoding/encoding
467
+ * } else {
468
+ * console.log('Hardware acceleration not available');
469
+ * // Fall back to software
470
+ * }
471
+ * ```
472
+ *
473
+ * @example
474
+ * ```typescript
475
+ * // Test specific hardware
476
+ * const cuda = HardwareContext.create(AV_HWDEVICE_TYPE_CUDA);
477
+ * if (cuda && await cuda.testDecoder()) {
478
+ * console.log('CUDA acceleration works');
479
+ * }
480
+ * ```
481
+ *
482
+ * @see {@link supportsCodec} For checking codec support
483
+ */
484
+ testDecoder(codecId?: AVCodecID): boolean;
485
+ /**
486
+ * Test if hardware encoding works with a specific codec pair.
487
+ *
488
+ * Attempts to decode and re-encode a test frame using hardware acceleration.
489
+ * Validates both decoding and encoding paths for the given codecs.
490
+ *
491
+ * @param decoderCodec - Codec name, ID, or instance to use for decoding
492
+ *
493
+ * @param encoderCodec - Codec name or instance to use for encoding
494
+ *
495
+ * @returns true if both decoding and encoding succeed
496
+ *
497
+ * @example
498
+ * ```typescript
499
+ * import { AV_CODEC_ID_H264 } from 'node-av/constants';
500
+ *
501
+ * const hw = HardwareContext.auto();
502
+ * if (hw && hw.testEncoder(AV_CODEC_ID_H264, AV_CODEC_ID_H264)) {
503
+ * console.log('Hardware H.264 encoding works!');
504
+ * }
505
+ * ```
506
+ *
507
+ * @see {@link getEncoderCodec} For obtaining hardware encoder codec
508
+ */
509
+ testEncoder(decoderCodec: FFDecoderCodec | Codec | AVCodecID, encoderCodec: FFEncoderCodec | Codec): boolean;
510
+ /**
511
+ * Find all codecs that support this hardware device.
512
+ *
513
+ * Iterates through all available codecs and checks hardware compatibility.
514
+ * Useful for discovering available hardware acceleration options.
515
+ *
516
+ * Direct mapping to av_codec_iterate() with hardware config checks.
517
+ *
518
+ * @param isEncoder - Find encoders (true) or decoders (false)
519
+ *
520
+ * @returns Array of codec names that support this hardware
521
+ *
522
+ * @example
523
+ * ```typescript
524
+ * const decoders = hw.findSupportedCodecs(false);
525
+ * console.log('Hardware decoders:', decoders);
526
+ * // ["h264_cuvid", "hevc_cuvid", ...]
527
+ *
528
+ * const encoders = hw.findSupportedCodecs(true);
529
+ * console.log('Hardware encoders:', encoders);
530
+ * // ["h264_nvenc", "hevc_nvenc", ...]
531
+ * ```
532
+ *
533
+ * @see {@link supportsCodec} For checking specific codec
534
+ */
535
+ findSupportedCodecs(isEncoder?: boolean): string[];
536
+ /**
537
+ * Clean up and free hardware resources.
538
+ *
539
+ * Releases the hardware device context.
540
+ * Safe to call multiple times.
541
+ * Automatically called by Symbol.dispose.
542
+ *
543
+ * @example
544
+ * ```typescript
545
+ * const hw = HardwareContext.auto();
546
+ * try {
547
+ * // Use hardware
548
+ * } finally {
549
+ * hw?.dispose();
550
+ * }
551
+ * ```
552
+ *
553
+ * @see {@link Symbol.dispose} For automatic cleanup
554
+ */
555
+ dispose(): void;
556
+ /**
557
+ * Test hardware decoding with a specific codec.
558
+ *
559
+ * @param decoderCodec - Decoder codec name, ID, or instance to test
560
+ *
561
+ * @param encoderCodec - Optional encoder codec name or instance to test
562
+ *
563
+ * @param useFilter - Whether to test hwdownload filter (default: true)
564
+ *
565
+ * @returns true if decoding succeeds
566
+ *
567
+ * @internal
568
+ */
569
+ private testCodec;
570
+ /**
571
+ * Map AVCodecID to base codec name for hardware encoder lookup.
572
+ *
573
+ * Converts codec IDs to generic codec names used for encoder naming.
574
+ * Used internally to find hardware-specific encoder implementations.
575
+ *
576
+ * @param codecId - AVCodecID enum value
577
+ *
578
+ * @returns Base codec name or null if unsupported
579
+ *
580
+ * @internal
581
+ */
582
+ private getBaseCodecName;
583
+ /**
584
+ * Map base codec name to AVCodecID for internal use.
585
+ *
586
+ * Converts generic codec names to AVCodecID enum values.
587
+ * Used internally for codec testing and validation.
588
+ *
589
+ * @param codecBaseName - Base codec name string
590
+ *
591
+ * @returns Corresponding AVCodecID or null if unsupported
592
+ *
593
+ * @internal
594
+ */
595
+ private getCodecIDFromBaseName;
596
+ /**
597
+ * Get the hardware decoder pixel format for this device type.
598
+ *
599
+ * Maps device types to their corresponding pixel formats.
600
+ * Used internally for frame format configuration.
601
+ *
602
+ * @returns Hardware-specific pixel format
603
+ *
604
+ * @internal
605
+ */
606
+ private getHardwareDecoderPixelFormat;
607
+ /**
608
+ * Create hardware context from device type.
609
+ *
610
+ * Internal factory method using av_hwdevice_ctx_create().
611
+ *
612
+ * @param deviceType - AVHWDeviceType enum value
613
+ *
614
+ * @param device - Optional device specifier
615
+ *
616
+ * @param options - Optional device options
617
+ *
618
+ * @returns Hardware context or null if creation fails
619
+ *
620
+ * @internal
621
+ */
622
+ private static createFromType;
623
+ /**
624
+ * Get platform-specific preference order for hardware types.
625
+ *
626
+ * Returns available hardware types sorted by platform preference.
627
+ * Ensures optimal hardware selection for each platform.
628
+ *
629
+ * @returns Array of AVHWDeviceType values in preference order
630
+ *
631
+ * @internal
632
+ */
633
+ private static getPreferenceOrder;
634
+ /**
635
+ * Dispose of hardware context.
636
+ *
637
+ * Implements Disposable interface for automatic cleanup.
638
+ * Equivalent to calling dispose().
639
+ *
640
+ * @example
641
+ * ```typescript
642
+ * {
643
+ * using hw = HardwareContext.auto();
644
+ * // Use hardware context...
645
+ * } // Automatically disposed
646
+ * ```
647
+ *
648
+ * @see {@link dispose} For manual cleanup
649
+ */
650
+ [Symbol.dispose](): void;
651
+ }