node-av-light 0.0.0 → 7.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. package/LICENSE.md +22 -0
  2. package/README.md +711 -0
  3. package/dist/api/audio-frame-buffer.d.ts +636 -0
  4. package/dist/api/audio-frame-buffer.js +1027 -0
  5. package/dist/api/audio-frame-buffer.js.map +1 -0
  6. package/dist/api/bitstream-filter.d.ts +938 -0
  7. package/dist/api/bitstream-filter.js +1427 -0
  8. package/dist/api/bitstream-filter.js.map +1 -0
  9. package/dist/api/constants.d.ts +44 -0
  10. package/dist/api/constants.js +45 -0
  11. package/dist/api/constants.js.map +1 -0
  12. package/dist/api/data/test_av1.ivf +0 -0
  13. package/dist/api/data/test_h264.h264 +0 -0
  14. package/dist/api/data/test_hevc.h265 +0 -0
  15. package/dist/api/data/test_mjpeg.mjpeg +0 -0
  16. package/dist/api/data/test_vp8.ivf +0 -0
  17. package/dist/api/data/test_vp9.ivf +0 -0
  18. package/dist/api/decoder.d.ts +1413 -0
  19. package/dist/api/decoder.js +2367 -0
  20. package/dist/api/decoder.js.map +1 -0
  21. package/dist/api/demuxer.d.ts +1295 -0
  22. package/dist/api/demuxer.js +2344 -0
  23. package/dist/api/demuxer.js.map +1 -0
  24. package/dist/api/device.d.ts +589 -0
  25. package/dist/api/device.js +964 -0
  26. package/dist/api/device.js.map +1 -0
  27. package/dist/api/encoder-pool.d.ts +262 -0
  28. package/dist/api/encoder-pool.js +397 -0
  29. package/dist/api/encoder-pool.js.map +1 -0
  30. package/dist/api/encoder.d.ts +1509 -0
  31. package/dist/api/encoder.js +2619 -0
  32. package/dist/api/encoder.js.map +1 -0
  33. package/dist/api/filter-complex.d.ts +828 -0
  34. package/dist/api/filter-complex.js +1661 -0
  35. package/dist/api/filter-complex.js.map +1 -0
  36. package/dist/api/filter-presets.d.ts +800 -0
  37. package/dist/api/filter-presets.js +1554 -0
  38. package/dist/api/filter-presets.js.map +1 -0
  39. package/dist/api/filter.d.ts +1339 -0
  40. package/dist/api/filter.js +2075 -0
  41. package/dist/api/filter.js.map +1 -0
  42. package/dist/api/fmp4-stream.d.ts +797 -0
  43. package/dist/api/fmp4-stream.js +1428 -0
  44. package/dist/api/fmp4-stream.js.map +1 -0
  45. package/dist/api/hardware.d.ts +677 -0
  46. package/dist/api/hardware.js +1300 -0
  47. package/dist/api/hardware.js.map +1 -0
  48. package/dist/api/index.d.ts +21 -0
  49. package/dist/api/index.js +38 -0
  50. package/dist/api/index.js.map +1 -0
  51. package/dist/api/io-stream.d.ts +308 -0
  52. package/dist/api/io-stream.js +358 -0
  53. package/dist/api/io-stream.js.map +1 -0
  54. package/dist/api/muxer.d.ts +1311 -0
  55. package/dist/api/muxer.js +2672 -0
  56. package/dist/api/muxer.js.map +1 -0
  57. package/dist/api/pipeline.d.ts +801 -0
  58. package/dist/api/pipeline.js +1344 -0
  59. package/dist/api/pipeline.js.map +1 -0
  60. package/dist/api/probe.d.ts +128 -0
  61. package/dist/api/probe.js +227 -0
  62. package/dist/api/probe.js.map +1 -0
  63. package/dist/api/rtp-stream.d.ts +497 -0
  64. package/dist/api/rtp-stream.js +1131 -0
  65. package/dist/api/rtp-stream.js.map +1 -0
  66. package/dist/api/scaler.d.ts +561 -0
  67. package/dist/api/scaler.js +918 -0
  68. package/dist/api/scaler.js.map +1 -0
  69. package/dist/api/types.d.ts +17 -0
  70. package/dist/api/types.js +2 -0
  71. package/dist/api/types.js.map +1 -0
  72. package/dist/api/utilities/async-queue.d.ts +149 -0
  73. package/dist/api/utilities/async-queue.js +254 -0
  74. package/dist/api/utilities/async-queue.js.map +1 -0
  75. package/dist/api/utilities/audio-sample.d.ts +117 -0
  76. package/dist/api/utilities/audio-sample.js +112 -0
  77. package/dist/api/utilities/audio-sample.js.map +1 -0
  78. package/dist/api/utilities/audio-transcode.d.ts +20 -0
  79. package/dist/api/utilities/audio-transcode.js +27 -0
  80. package/dist/api/utilities/audio-transcode.js.map +1 -0
  81. package/dist/api/utilities/channel-layout.d.ts +76 -0
  82. package/dist/api/utilities/channel-layout.js +80 -0
  83. package/dist/api/utilities/channel-layout.js.map +1 -0
  84. package/dist/api/utilities/codec-format.d.ts +87 -0
  85. package/dist/api/utilities/codec-format.js +117 -0
  86. package/dist/api/utilities/codec-format.js.map +1 -0
  87. package/dist/api/utilities/context-options.d.ts +25 -0
  88. package/dist/api/utilities/context-options.js +23 -0
  89. package/dist/api/utilities/context-options.js.map +1 -0
  90. package/dist/api/utilities/electron-shared-texture.d.ts +368 -0
  91. package/dist/api/utilities/electron-shared-texture.js +540 -0
  92. package/dist/api/utilities/electron-shared-texture.js.map +1 -0
  93. package/dist/api/utilities/image.d.ts +207 -0
  94. package/dist/api/utilities/image.js +213 -0
  95. package/dist/api/utilities/image.js.map +1 -0
  96. package/dist/api/utilities/index.d.ts +14 -0
  97. package/dist/api/utilities/index.js +27 -0
  98. package/dist/api/utilities/index.js.map +1 -0
  99. package/dist/api/utilities/live-decoding.d.ts +15 -0
  100. package/dist/api/utilities/live-decoding.js +32 -0
  101. package/dist/api/utilities/live-decoding.js.map +1 -0
  102. package/dist/api/utilities/media-type.d.ts +49 -0
  103. package/dist/api/utilities/media-type.js +53 -0
  104. package/dist/api/utilities/media-type.js.map +1 -0
  105. package/dist/api/utilities/packet-age-watchdog.d.ts +198 -0
  106. package/dist/api/utilities/packet-age-watchdog.js +594 -0
  107. package/dist/api/utilities/packet-age-watchdog.js.map +1 -0
  108. package/dist/api/utilities/pixel-format.d.ts +89 -0
  109. package/dist/api/utilities/pixel-format.js +97 -0
  110. package/dist/api/utilities/pixel-format.js.map +1 -0
  111. package/dist/api/utilities/sample-format.d.ts +129 -0
  112. package/dist/api/utilities/sample-format.js +141 -0
  113. package/dist/api/utilities/sample-format.js.map +1 -0
  114. package/dist/api/utilities/scale-size.d.ts +51 -0
  115. package/dist/api/utilities/scale-size.js +55 -0
  116. package/dist/api/utilities/scale-size.js.map +1 -0
  117. package/dist/api/utilities/scheduler.d.ts +138 -0
  118. package/dist/api/utilities/scheduler.js +98 -0
  119. package/dist/api/utilities/scheduler.js.map +1 -0
  120. package/dist/api/utilities/streaming.d.ts +186 -0
  121. package/dist/api/utilities/streaming.js +309 -0
  122. package/dist/api/utilities/streaming.js.map +1 -0
  123. package/dist/api/utilities/timestamp.d.ts +193 -0
  124. package/dist/api/utilities/timestamp.js +206 -0
  125. package/dist/api/utilities/timestamp.js.map +1 -0
  126. package/dist/api/utilities/video-transcode.d.ts +218 -0
  127. package/dist/api/utilities/video-transcode.js +624 -0
  128. package/dist/api/utilities/video-transcode.js.map +1 -0
  129. package/dist/api/utilities/whisper-model.d.ts +330 -0
  130. package/dist/api/utilities/whisper-model.js +587 -0
  131. package/dist/api/utilities/whisper-model.js.map +1 -0
  132. package/dist/api/utils.d.ts +19 -0
  133. package/dist/api/utils.js +39 -0
  134. package/dist/api/utils.js.map +1 -0
  135. package/dist/api/webrtc-stream.d.ts +294 -0
  136. package/dist/api/webrtc-stream.js +546 -0
  137. package/dist/api/webrtc-stream.js.map +1 -0
  138. package/dist/api/whisper.d.ts +326 -0
  139. package/dist/api/whisper.js +402 -0
  140. package/dist/api/whisper.js.map +1 -0
  141. package/dist/constants/bsf-options.d.ts +364 -0
  142. package/dist/constants/bsf-options.js +7 -0
  143. package/dist/constants/bsf-options.js.map +1 -0
  144. package/dist/constants/channel-layouts.d.ts +53 -0
  145. package/dist/constants/channel-layouts.js +57 -0
  146. package/dist/constants/channel-layouts.js.map +1 -0
  147. package/dist/constants/constants.d.ts +2435 -0
  148. package/dist/constants/constants.js +1989 -0
  149. package/dist/constants/constants.js.map +1 -0
  150. package/dist/constants/decoders.d.ts +651 -0
  151. package/dist/constants/decoders.js +641 -0
  152. package/dist/constants/decoders.js.map +1 -0
  153. package/dist/constants/encoders.d.ts +314 -0
  154. package/dist/constants/encoders.js +309 -0
  155. package/dist/constants/encoders.js.map +1 -0
  156. package/dist/constants/filter-options.d.ts +12099 -0
  157. package/dist/constants/filter-options.js +7 -0
  158. package/dist/constants/filter-options.js.map +1 -0
  159. package/dist/constants/format-options.d.ts +4319 -0
  160. package/dist/constants/format-options.js +7 -0
  161. package/dist/constants/format-options.js.map +1 -0
  162. package/dist/constants/formats.d.ts +18 -0
  163. package/dist/constants/formats.js +7 -0
  164. package/dist/constants/formats.js.map +1 -0
  165. package/dist/constants/hardware.d.ts +26 -0
  166. package/dist/constants/hardware.js +27 -0
  167. package/dist/constants/hardware.js.map +1 -0
  168. package/dist/constants/index.d.ts +10 -0
  169. package/dist/constants/index.js +6 -0
  170. package/dist/constants/index.js.map +1 -0
  171. package/dist/constants/options.d.ts +6217 -0
  172. package/dist/constants/options.js +7 -0
  173. package/dist/constants/options.js.map +1 -0
  174. package/dist/ffmpeg/index.d.ts +101 -0
  175. package/dist/ffmpeg/index.js +161 -0
  176. package/dist/ffmpeg/index.js.map +1 -0
  177. package/dist/ffmpeg/version.d.ts +6 -0
  178. package/dist/ffmpeg/version.js +7 -0
  179. package/dist/ffmpeg/version.js.map +1 -0
  180. package/dist/index.d.ts +4 -0
  181. package/dist/index.js +9 -0
  182. package/dist/index.js.map +1 -0
  183. package/dist/lib/audio-fifo.d.ts +399 -0
  184. package/dist/lib/audio-fifo.js +431 -0
  185. package/dist/lib/audio-fifo.js.map +1 -0
  186. package/dist/lib/binding.d.ts +242 -0
  187. package/dist/lib/binding.js +102 -0
  188. package/dist/lib/binding.js.map +1 -0
  189. package/dist/lib/bitstream-filter-context.d.ts +381 -0
  190. package/dist/lib/bitstream-filter-context.js +443 -0
  191. package/dist/lib/bitstream-filter-context.js.map +1 -0
  192. package/dist/lib/bitstream-filter.d.ts +140 -0
  193. package/dist/lib/bitstream-filter.js +154 -0
  194. package/dist/lib/bitstream-filter.js.map +1 -0
  195. package/dist/lib/codec-context.d.ts +1069 -0
  196. package/dist/lib/codec-context.js +1336 -0
  197. package/dist/lib/codec-context.js.map +1 -0
  198. package/dist/lib/codec-parameters.d.ts +664 -0
  199. package/dist/lib/codec-parameters.js +813 -0
  200. package/dist/lib/codec-parameters.js.map +1 -0
  201. package/dist/lib/codec-parser.d.ts +201 -0
  202. package/dist/lib/codec-parser.js +213 -0
  203. package/dist/lib/codec-parser.js.map +1 -0
  204. package/dist/lib/codec.d.ts +617 -0
  205. package/dist/lib/codec.js +746 -0
  206. package/dist/lib/codec.js.map +1 -0
  207. package/dist/lib/device.d.ts +294 -0
  208. package/dist/lib/device.js +326 -0
  209. package/dist/lib/device.js.map +1 -0
  210. package/dist/lib/dictionary.d.ts +333 -0
  211. package/dist/lib/dictionary.js +372 -0
  212. package/dist/lib/dictionary.js.map +1 -0
  213. package/dist/lib/error.d.ts +311 -0
  214. package/dist/lib/error.js +395 -0
  215. package/dist/lib/error.js.map +1 -0
  216. package/dist/lib/fifo.d.ts +416 -0
  217. package/dist/lib/fifo.js +453 -0
  218. package/dist/lib/fifo.js.map +1 -0
  219. package/dist/lib/filter-context.d.ts +714 -0
  220. package/dist/lib/filter-context.js +783 -0
  221. package/dist/lib/filter-context.js.map +1 -0
  222. package/dist/lib/filter-graph-segment.d.ts +161 -0
  223. package/dist/lib/filter-graph-segment.js +172 -0
  224. package/dist/lib/filter-graph-segment.js.map +1 -0
  225. package/dist/lib/filter-graph.d.ts +641 -0
  226. package/dist/lib/filter-graph.js +704 -0
  227. package/dist/lib/filter-graph.js.map +1 -0
  228. package/dist/lib/filter-inout.d.ts +202 -0
  229. package/dist/lib/filter-inout.js +261 -0
  230. package/dist/lib/filter-inout.js.map +1 -0
  231. package/dist/lib/filter.d.ts +243 -0
  232. package/dist/lib/filter.js +272 -0
  233. package/dist/lib/filter.js.map +1 -0
  234. package/dist/lib/format-context.d.ts +1335 -0
  235. package/dist/lib/format-context.js +1455 -0
  236. package/dist/lib/format-context.js.map +1 -0
  237. package/dist/lib/frame-utils.d.ts +116 -0
  238. package/dist/lib/frame-utils.js +98 -0
  239. package/dist/lib/frame-utils.js.map +1 -0
  240. package/dist/lib/frame.d.ts +1315 -0
  241. package/dist/lib/frame.js +1535 -0
  242. package/dist/lib/frame.js.map +1 -0
  243. package/dist/lib/hardware-device-context.d.ts +362 -0
  244. package/dist/lib/hardware-device-context.js +383 -0
  245. package/dist/lib/hardware-device-context.js.map +1 -0
  246. package/dist/lib/hardware-frames-context.d.ts +418 -0
  247. package/dist/lib/hardware-frames-context.js +471 -0
  248. package/dist/lib/hardware-frames-context.js.map +1 -0
  249. package/dist/lib/index.d.ts +35 -0
  250. package/dist/lib/index.js +60 -0
  251. package/dist/lib/index.js.map +1 -0
  252. package/dist/lib/input-format.d.ts +249 -0
  253. package/dist/lib/input-format.js +306 -0
  254. package/dist/lib/input-format.js.map +1 -0
  255. package/dist/lib/io-context.d.ts +698 -0
  256. package/dist/lib/io-context.js +771 -0
  257. package/dist/lib/io-context.js.map +1 -0
  258. package/dist/lib/log.d.ts +174 -0
  259. package/dist/lib/log.js +184 -0
  260. package/dist/lib/log.js.map +1 -0
  261. package/dist/lib/native-types.d.ts +1024 -0
  262. package/dist/lib/native-types.js +2 -0
  263. package/dist/lib/native-types.js.map +1 -0
  264. package/dist/lib/option.d.ts +953 -0
  265. package/dist/lib/option.js +1607 -0
  266. package/dist/lib/option.js.map +1 -0
  267. package/dist/lib/output-format.d.ts +222 -0
  268. package/dist/lib/output-format.js +259 -0
  269. package/dist/lib/output-format.js.map +1 -0
  270. package/dist/lib/packet.d.ts +521 -0
  271. package/dist/lib/packet.js +613 -0
  272. package/dist/lib/packet.js.map +1 -0
  273. package/dist/lib/rational.d.ts +251 -0
  274. package/dist/lib/rational.js +278 -0
  275. package/dist/lib/rational.js.map +1 -0
  276. package/dist/lib/software-resample-context.d.ts +552 -0
  277. package/dist/lib/software-resample-context.js +592 -0
  278. package/dist/lib/software-resample-context.js.map +1 -0
  279. package/dist/lib/software-scale-context.d.ts +344 -0
  280. package/dist/lib/software-scale-context.js +366 -0
  281. package/dist/lib/software-scale-context.js.map +1 -0
  282. package/dist/lib/stream.d.ts +383 -0
  283. package/dist/lib/stream.js +524 -0
  284. package/dist/lib/stream.js.map +1 -0
  285. package/dist/lib/sync-queue.d.ts +179 -0
  286. package/dist/lib/sync-queue.js +197 -0
  287. package/dist/lib/sync-queue.js.map +1 -0
  288. package/dist/lib/types.d.ts +34 -0
  289. package/dist/lib/types.js +2 -0
  290. package/dist/lib/types.js.map +1 -0
  291. package/dist/lib/utilities.d.ts +1198 -0
  292. package/dist/lib/utilities.js +1302 -0
  293. package/dist/lib/utilities.js.map +1 -0
  294. package/dist/utils/electron.d.ts +49 -0
  295. package/dist/utils/electron.js +63 -0
  296. package/dist/utils/electron.js.map +1 -0
  297. package/dist/utils/index.d.ts +6 -0
  298. package/dist/utils/index.js +7 -0
  299. package/dist/utils/index.js.map +1 -0
  300. package/dist/utils/libc.d.ts +11 -0
  301. package/dist/utils/libc.js +35 -0
  302. package/dist/utils/libc.js.map +1 -0
  303. package/dist/utils/variant.d.ts +26 -0
  304. package/dist/utils/variant.js +31 -0
  305. package/dist/utils/variant.js.map +1 -0
  306. package/dist/webrtc/index.d.ts +4 -0
  307. package/dist/webrtc/index.js +7 -0
  308. package/dist/webrtc/index.js.map +1 -0
  309. package/install/check.js +124 -0
  310. package/install/ffmpeg.js +66 -0
  311. package/package.json +165 -3
@@ -0,0 +1,1024 @@
1
+ import type { AVAlphaMode, AVBufferSrcFlag, AVChromaLocation, AVCodecCap, AVCodecFlag, AVCodecFlag2, AVCodecID, AVCodecProp, AVColorPrimaries, AVColorRange, AVColorSpace, AVColorTransferCharacteristic, AVDictFlag, AVDiscard, AVDisposition, AVFifoFlag, AVFilterCmdFlag, AVFilterConstants, AVFilterFlag, AVFormatFlag, AVFrameSideDataType, AVHWDeviceType, AVHWFrameTransferDirection, AVIOFlag, AVMediaType, AVOptionFlag, AVOptionType, AVPacketFlag, AVPacketSideDataType, AVPictureType, AVPixelFormat, AVProfile, AVSampleFormat, AVSeekFlag, AVSeekWhence, AVStreamEventFlag, AVThreadType, SwsFlags } from '../constants/index.js';
2
+ import type { CodecProfile } from './codec.js';
3
+ import type { FilterPad } from './filter.js';
4
+ import type { RTSPStreamInfo } from './format-context.js';
5
+ import type { ImageOptions } from './frame-utils.js';
6
+ import type { ChannelLayout, IRational } from './types.js';
7
+ /**
8
+ * Native AVPacket binding interface
9
+ *
10
+ * Represents compressed audio/video data.
11
+ * Must be allocated before use and properly disposed after.
12
+ *
13
+ * @internal
14
+ */
15
+ export interface NativePacket extends Disposable {
16
+ readonly __brand: 'NativePacket';
17
+ /**
18
+ * Test hook: bytes currently reported to V8 via napi_adjust_external_memory.
19
+ *
20
+ * @internal
21
+ */
22
+ readonly reportedExternalMemory: number;
23
+ readonly size: number;
24
+ streamIndex: number;
25
+ pts: bigint;
26
+ dts: bigint;
27
+ duration: bigint;
28
+ timeBase: IRational;
29
+ pos: bigint;
30
+ flags: AVPacketFlag;
31
+ data: Buffer | null;
32
+ isKeyframe: boolean;
33
+ alloc(): void;
34
+ free(): void;
35
+ ref(src: NativePacket): number;
36
+ unref(): void;
37
+ clone(): NativePacket | null;
38
+ rescaleTs(srcTb: IRational, dstTb: IRational): void;
39
+ makeRefcounted(): number;
40
+ makeWritable(): number;
41
+ getSideData(type: AVPacketSideDataType): Buffer | null;
42
+ addSideData(type: AVPacketSideDataType, data: Buffer): number;
43
+ newSideData(type: AVPacketSideDataType, size: number): Buffer;
44
+ freeSideData(): void;
45
+ [Symbol.dispose](): void;
46
+ }
47
+ /**
48
+ * Native AVFrame binding interface
49
+ *
50
+ * Represents uncompressed audio/video data.
51
+ * Must be allocated before use and properly disposed after.
52
+ *
53
+ * @internal
54
+ */
55
+ export interface NativeFrame extends Disposable {
56
+ readonly __brand: 'NativeFrame';
57
+ /**
58
+ * Test hook: bytes currently reported to V8 via napi_adjust_external_memory.
59
+ *
60
+ * @internal
61
+ */
62
+ readonly reportedExternalMemory: number;
63
+ readonly channels: number;
64
+ readonly linesize: number[];
65
+ readonly data: Buffer[] | null;
66
+ readonly extendedData: Buffer[] | null;
67
+ readonly isWritable: boolean;
68
+ format: AVPixelFormat | AVSampleFormat;
69
+ width: number;
70
+ height: number;
71
+ nbSamples: number;
72
+ pts: bigint;
73
+ pktDts: bigint;
74
+ bestEffortTimestamp: bigint;
75
+ timeBase: IRational;
76
+ keyFrame: number;
77
+ pictType: AVPictureType;
78
+ quality: number;
79
+ sampleAspectRatio: IRational;
80
+ sampleRate: number;
81
+ channelLayout: ChannelLayout;
82
+ colorRange: AVColorRange;
83
+ colorPrimaries: AVColorPrimaries;
84
+ colorTrc: AVColorTransferCharacteristic;
85
+ colorSpace: AVColorSpace;
86
+ chromaLocation: AVChromaLocation;
87
+ alphaMode: AVAlphaMode;
88
+ hwFramesCtx: NativeHardwareFramesContext | null;
89
+ flags: number;
90
+ decodeErrorFlags: number;
91
+ duration: bigint;
92
+ repeatPict: number;
93
+ alloc(): void;
94
+ free(): void;
95
+ ref(src: NativeFrame): number;
96
+ unref(): void;
97
+ clone(): NativeFrame | null;
98
+ getBuffer(align?: number): number;
99
+ allocBuffer(): number;
100
+ makeWritable(): number;
101
+ copyProps(src: NativeFrame): number;
102
+ copy(src: NativeFrame): number;
103
+ fromBuffer(buffer: Buffer): number;
104
+ toBuffer(output?: Buffer): Buffer;
105
+ hwframeTransferData(dst: NativeFrame, flags?: number): Promise<number>;
106
+ hwframeTransferDataSync(dst: NativeFrame, flags?: number): number;
107
+ isHwFrame(): boolean;
108
+ isSwFrame(): boolean;
109
+ getSideData(type: AVFrameSideDataType): Buffer | null;
110
+ newSideData(type: AVFrameSideDataType, size: number): Buffer;
111
+ removeSideData(type: AVFrameSideDataType): void;
112
+ getMetadata(): NativeDictionary;
113
+ applyCropping(flags?: number): number;
114
+ importIOSurface(handleData: Buffer, hwFramesCtx: NativeHardwareFramesContext): number;
115
+ exportIOSurface(): Buffer | null;
116
+ importNSImage(handleData: Buffer): number;
117
+ importD3D11Texture(handleData: Buffer, hwDeviceCtx: NativeHardwareDeviceContext): number;
118
+ importDmaBuf(planes: {
119
+ fd: number;
120
+ stride: number;
121
+ offset: number;
122
+ size: number;
123
+ }[], width: number, height: number, modifier: bigint, swFormat: AVPixelFormat): number;
124
+ [Symbol.dispose](): void;
125
+ }
126
+ /**
127
+ * Native AVCodec binding interface
128
+ *
129
+ * Represents a codec (encoder or decoder) definition.
130
+ * This is an immutable descriptor - actual encoding/decoding happens via CodecContext.
131
+ *
132
+ * @internal
133
+ */
134
+ export interface NativeCodec {
135
+ readonly __brand: 'NativeCodec';
136
+ readonly name: string | null;
137
+ readonly longName: string | null;
138
+ readonly type: AVMediaType;
139
+ readonly id: AVCodecID;
140
+ readonly capabilities: AVCodecCap;
141
+ readonly maxLowres: number;
142
+ readonly profiles: CodecProfile[] | null;
143
+ readonly wrapper: string | null;
144
+ readonly supportedFramerates: IRational[] | null;
145
+ readonly pixelFormats: AVPixelFormat[] | null;
146
+ readonly supportedSamplerates: number[] | null;
147
+ readonly sampleFormats: AVSampleFormat[] | null;
148
+ readonly channelLayouts: ChannelLayout[] | null;
149
+ isEncoder(): boolean;
150
+ isDecoder(): boolean;
151
+ isExperimental(): boolean;
152
+ getHwConfig(index: number): {
153
+ pixFmt: AVPixelFormat;
154
+ methods: number;
155
+ deviceType: AVHWDeviceType;
156
+ } | null;
157
+ getOptions(): NativeCodecOption[];
158
+ }
159
+ /**
160
+ * A single private (codec-specific) AVOption entry, as returned by
161
+ * {@link NativeCodec.getOptions}.
162
+ */
163
+ export interface NativeCodecOption {
164
+ name: string;
165
+ help: string | null;
166
+ type: AVOptionType;
167
+ flags: number;
168
+ unit: string | null;
169
+ min: number;
170
+ max: number;
171
+ default: number | string | {
172
+ num: number;
173
+ den: number;
174
+ } | null;
175
+ }
176
+ /**
177
+ * Native AVCodecContext binding interface
178
+ *
179
+ * The main interface for encoding and decoding operations.
180
+ * Must be opened before use and properly disposed after.
181
+ *
182
+ * @internal
183
+ */
184
+ export interface NativeCodecContext extends Disposable {
185
+ readonly __brand: 'NativeCodecContext';
186
+ readonly delay: number;
187
+ readonly hasBFrames: number;
188
+ readonly frameNumber: number;
189
+ readonly isOpen: boolean;
190
+ readonly codecTagString: string | null;
191
+ codecType: AVMediaType;
192
+ codecId: AVCodecID;
193
+ codecTag: number;
194
+ bitRate: bigint;
195
+ timeBase: IRational;
196
+ pktTimebase: IRational;
197
+ flags: AVCodecFlag;
198
+ flags2: AVCodecFlag2;
199
+ extraData: Buffer | null;
200
+ profile: AVProfile;
201
+ level: number;
202
+ threadCount: number;
203
+ threadType: AVThreadType;
204
+ width: number;
205
+ height: number;
206
+ gopSize: number;
207
+ pixelFormat: AVPixelFormat;
208
+ maxBFrames: number;
209
+ mbDecision: number;
210
+ sampleAspectRatio: IRational;
211
+ framerate: IRational;
212
+ colorRange: AVColorRange;
213
+ colorPrimaries: AVColorPrimaries;
214
+ colorTrc: AVColorTransferCharacteristic;
215
+ colorSpace: AVColorSpace;
216
+ chromaLocation: AVChromaLocation;
217
+ sampleRate: number;
218
+ channels: number;
219
+ sampleFormat: AVSampleFormat;
220
+ frameSize: number;
221
+ bitsPerCodedSample: number;
222
+ bitsPerRawSample: number;
223
+ channelLayout: ChannelLayout;
224
+ qMin: number;
225
+ qMax: number;
226
+ globalQuality: number;
227
+ rcBufferSize: number;
228
+ rcMaxRate: bigint;
229
+ rcMinRate: bigint;
230
+ hwDeviceCtx: NativeHardwareDeviceContext | null;
231
+ hwFramesCtx: NativeHardwareFramesContext | null;
232
+ extraHWFrames: number;
233
+ allocContext3(codec?: NativeCodec | null): void;
234
+ freeContext(): void;
235
+ open2(codec?: NativeCodec | null, options?: NativeDictionary | null): Promise<number>;
236
+ open2Sync(codec?: NativeCodec | null, options?: NativeDictionary | null): number;
237
+ close(): number;
238
+ parametersToContext(params: NativeCodecParameters): number;
239
+ parametersFromContext(params: NativeCodecParameters): number;
240
+ flushBuffers(): void;
241
+ sendPacket(packet: NativePacket | null): Promise<number>;
242
+ sendPacketSync(packet: NativePacket | null): number;
243
+ receiveFrame(frame: NativeFrame): Promise<number>;
244
+ receiveFrameSync(frame: NativeFrame): number;
245
+ sendFrame(frame: NativeFrame | null): Promise<number>;
246
+ sendFrameSync(frame: NativeFrame | null): number;
247
+ receivePacket(packet: NativePacket): Promise<number>;
248
+ receivePacketSync(packet: NativePacket): number;
249
+ setHardwarePixelFormat(hwFormat: AVPixelFormat, swFormat?: AVPixelFormat): void;
250
+ [Symbol.dispose](): void;
251
+ }
252
+ /**
253
+ * Native AVCodecParserContext binding interface
254
+ *
255
+ * Parser for splitting elementary streams into frames.
256
+ * Used when decoding raw streams without a container.
257
+ *
258
+ * @internal
259
+ */
260
+ export interface NativeCodecParser {
261
+ readonly __brand: 'NativeCodecParser';
262
+ repeatPict: number;
263
+ init(codecId: AVCodecID): void;
264
+ parse2(codecContext: NativeCodecContext, packet: NativePacket, data: Buffer, pts: bigint, dts: bigint, pos: number): number;
265
+ close(): void;
266
+ }
267
+ /**
268
+ * Native AVCodecParameters binding interface
269
+ *
270
+ * This struct describes the properties of an encoded stream.
271
+ * All fields are read/write.
272
+ *
273
+ * @internal
274
+ */
275
+ export interface NativeCodecParameters extends Disposable {
276
+ readonly __brand: 'NativeCodecParameters';
277
+ readonly codecTagString: string | null;
278
+ readonly extradataSize: number;
279
+ readonly nbCodedSideData: number;
280
+ readonly codecProperties: AVCodecProp;
281
+ codecType: AVMediaType;
282
+ codecId: AVCodecID;
283
+ codecTag: number;
284
+ extradata: Buffer | null;
285
+ format: AVPixelFormat | AVSampleFormat;
286
+ bitRate: bigint;
287
+ bitsPerCodedSample: number;
288
+ bitsPerRawSample: number;
289
+ profile: AVProfile;
290
+ level: number;
291
+ width: number;
292
+ height: number;
293
+ sampleAspectRatio: IRational;
294
+ frameRate: IRational;
295
+ colorRange: AVColorRange;
296
+ colorPrimaries: AVColorPrimaries;
297
+ colorTrc: AVColorTransferCharacteristic;
298
+ colorSpace: AVColorSpace;
299
+ chromaLocation: AVChromaLocation;
300
+ channelLayout: ChannelLayout;
301
+ channels: number;
302
+ sampleRate: number;
303
+ frameSize: number;
304
+ initialPadding: number;
305
+ videoDelay: number;
306
+ alloc(): void;
307
+ free(): void;
308
+ copy(dst: NativeCodecParameters): number;
309
+ fromContext(codecContext: NativeCodecContext): number;
310
+ toContext(codecContext: NativeCodecContext): number;
311
+ parseExtradata(): number;
312
+ getCodecString(): string | null;
313
+ getDecoderConfigurationRecord(): Buffer | null;
314
+ getCodedSideData(type: AVPacketSideDataType): Buffer | null;
315
+ addCodedSideData(type: AVPacketSideDataType, data: Buffer): number;
316
+ getAllCodedSideData(): {
317
+ type: AVPacketSideDataType;
318
+ data: Buffer;
319
+ }[];
320
+ toJSON(): Record<string, any>;
321
+ [Symbol.dispose](): void;
322
+ }
323
+ /**
324
+ * Native AVDictionary binding interface
325
+ *
326
+ * Key-value store for options and metadata.
327
+ * Used throughout FFmpeg for configuration and metadata.
328
+ * Direct mapping to FFmpeg's AVDictionary.
329
+ *
330
+ * @internal
331
+ */
332
+ export interface NativeDictionary extends Disposable {
333
+ readonly __brand: 'NativeDictionary';
334
+ alloc(): void;
335
+ free(): void;
336
+ copy(dst: NativeDictionary, flags: AVDictFlag): number;
337
+ set(key: string, value: string, flags: AVDictFlag): number;
338
+ get(key: string, flags: AVDictFlag): string | null;
339
+ count(): number;
340
+ getAll(): Record<string, string>;
341
+ parseString(str: string, keyValSep: string, pairsSep: string, flags: AVDictFlag): number;
342
+ getString(keyValSep: string, pairsSep: string): string | null;
343
+ [Symbol.dispose](): void;
344
+ }
345
+ /**
346
+ * Native AVIOContext binding interface
347
+ *
348
+ * Bytestream I/O context for custom I/O.
349
+ * Used for reading/writing data from/to files, network, memory, etc.
350
+ *
351
+ * @internal
352
+ */
353
+ export interface NativeIOContext extends Disposable, AsyncDisposable {
354
+ readonly __brand: 'NativeIOContext';
355
+ allocContext(bufferSize: number, writeFlag: number): void;
356
+ allocContextWithCallbacks(bufferSize: number, writeFlag: 0 | 1, readCallback?: ((size: number) => Buffer | null | number | Promise<Buffer | null | number>) | null, writeCallback?: ((buffer: Buffer) => number | void | Promise<number | void>) | null, seekCallback?: ((offset: bigint, whence: AVSeekWhence) => bigint | number | Promise<bigint | number>) | null): void;
357
+ freeContext(): void;
358
+ open2(url: string, flags: AVIOFlag): Promise<number>;
359
+ open2Sync(url: string, flags: AVIOFlag): number;
360
+ closep(): Promise<number>;
361
+ closepSync(): number;
362
+ read(size: number): Promise<Buffer | number>;
363
+ readSync(size: number): Buffer | number;
364
+ write(buffer: Buffer): Promise<void>;
365
+ writeSync(buffer: Buffer): void;
366
+ seek(offset: bigint, whence: AVSeekWhence): Promise<bigint>;
367
+ seekSync(offset: bigint, whence: AVSeekWhence): bigint;
368
+ size(): Promise<bigint>;
369
+ sizeSync(): bigint;
370
+ flush(): Promise<void>;
371
+ flushSync(): void;
372
+ skip(offset: bigint): Promise<bigint>;
373
+ skipSync(offset: bigint): bigint;
374
+ tell(): bigint;
375
+ readonly eof: boolean;
376
+ readonly error: number;
377
+ readonly seekable: number;
378
+ readonly pos: bigint;
379
+ readonly bufferSize: number;
380
+ readonly writeFlag: boolean;
381
+ maxPacketSize: number;
382
+ direct: number;
383
+ [Symbol.dispose](): void;
384
+ [Symbol.asyncDispose](): Promise<void>;
385
+ }
386
+ /**
387
+ * Native AVInputFormat binding interface
388
+ *
389
+ * Demuxer definition.
390
+ * Describes a supported input container format.
391
+ *
392
+ * @internal
393
+ */
394
+ export interface NativeInputFormat {
395
+ readonly __brand: 'NativeInputFormat';
396
+ readonly name: string | null;
397
+ readonly longName: string | null;
398
+ readonly extensions: string | null;
399
+ readonly mimeType: string | null;
400
+ readonly flags: AVFormatFlag;
401
+ }
402
+ /**
403
+ * Native AVOutputFormat binding interface
404
+ *
405
+ * Muxer definition.
406
+ * Describes a supported output container format.
407
+ *
408
+ * @internal
409
+ */
410
+ export interface NativeOutputFormat {
411
+ readonly __brand: 'NativeOutputFormat';
412
+ readonly name: string | null;
413
+ readonly longName: string | null;
414
+ readonly extensions: string | null;
415
+ readonly mimeType: string | null;
416
+ readonly audioCodec: AVCodecID;
417
+ readonly videoCodec: AVCodecID;
418
+ readonly subtitleCodec: AVCodecID;
419
+ readonly flags: AVFormatFlag;
420
+ getCodecTag(codecId: AVCodecID): number | null;
421
+ getCodecId(tag: number): AVCodecID;
422
+ }
423
+ /**
424
+ * Native AVStream binding interface
425
+ *
426
+ * Stream structure.
427
+ * Contains information about one stream in a format context.
428
+ * Note: Streams are created and managed by FormatContext - no lifecycle methods.
429
+ *
430
+ * @internal
431
+ */
432
+ export interface NativeStream {
433
+ readonly __brand: 'NativeStream';
434
+ readonly parser: NativeCodecParser | null;
435
+ readonly index: number;
436
+ readonly attachedPic: NativePacket | null;
437
+ id: number;
438
+ codecpar: NativeCodecParameters;
439
+ timeBase: IRational;
440
+ startTime: bigint;
441
+ duration: bigint;
442
+ nbFrames: bigint;
443
+ disposition: AVDisposition;
444
+ discard: AVDiscard;
445
+ sampleAspectRatio: IRational;
446
+ avgFrameRate: IRational;
447
+ rFrameRate: IRational;
448
+ ptsWrapBits: number;
449
+ metadata: NativeDictionary | null;
450
+ eventFlags: AVStreamEventFlag;
451
+ }
452
+ /**
453
+ * Native AVFormatContext binding interface
454
+ *
455
+ * Main interface for demuxing and muxing operations.
456
+ * Must be allocated before use and properly disposed after.
457
+ *
458
+ * @internal
459
+ */
460
+ export interface NativeFormatContext extends AsyncDisposable {
461
+ readonly __brand: 'NativeFormatContext';
462
+ readonly startTime: bigint;
463
+ readonly duration: bigint;
464
+ readonly bitRate: bigint;
465
+ readonly iformat: NativeInputFormat | null;
466
+ readonly nbStreams: number;
467
+ readonly streams: NativeStream[] | null;
468
+ readonly nbPrograms: number;
469
+ readonly pbBytes: bigint;
470
+ readonly probeScore: number;
471
+ url: string | null;
472
+ flags: AVFormatFlag;
473
+ probesize: bigint;
474
+ maxAnalyzeDuration: bigint;
475
+ maxInterleaveDelta: bigint;
476
+ metadata: NativeDictionary | null;
477
+ oformat: NativeOutputFormat | null;
478
+ pb: NativeIOContext | null;
479
+ strictStdCompliance: number;
480
+ maxStreams: number;
481
+ allocContext(): void;
482
+ allocOutputContext2(oformat: NativeOutputFormat | null, formatName: string | null, filename: string | null): number;
483
+ freeContext(): void;
484
+ openInput(url: string, fmt: NativeInputFormat | null, options: NativeDictionary | null): Promise<number>;
485
+ openInputSync(url: string, fmt: NativeInputFormat | null, options: NativeDictionary | null): number;
486
+ closeInput(detachPb?: boolean): Promise<void>;
487
+ closeInputSync(detachPb?: boolean): void;
488
+ findStreamInfo(options: NativeDictionary[] | null): Promise<number>;
489
+ findStreamInfoSync(options: NativeDictionary[] | null): number;
490
+ readFrame(pkt: NativePacket): Promise<number>;
491
+ readFrameSync(pkt: NativePacket): number;
492
+ seekFrame(streamIndex: number, timestamp: bigint, flags: AVSeekFlag): Promise<number>;
493
+ seekFrameSync(streamIndex: number, timestamp: bigint, flags: AVSeekFlag): number;
494
+ seekFile(streamIndex: number, minTs: bigint, ts: bigint, maxTs: bigint, flags: AVSeekFlag): Promise<number>;
495
+ seekFileSync(streamIndex: number, minTs: bigint, ts: bigint, maxTs: bigint, flags: AVSeekFlag): number;
496
+ openOutput(): Promise<number>;
497
+ openOutputSync(): number;
498
+ closeOutput(): Promise<void>;
499
+ closeOutputSync(): void;
500
+ writeHeader(options: NativeDictionary | null): Promise<number>;
501
+ writeHeaderSync(options: NativeDictionary | null): number;
502
+ writeFrame(pkt: NativePacket | null): Promise<number>;
503
+ writeFrameSync(pkt: NativePacket | null): number;
504
+ interleavedWriteFrame(pkt: NativePacket | null): Promise<number>;
505
+ interleavedWriteFrameSync(pkt: NativePacket | null): number;
506
+ writeTrailer(): Promise<number>;
507
+ writeTrailerSync(): number;
508
+ flush(): Promise<void>;
509
+ flushSync(): void;
510
+ newStream(c: NativeCodec | null): NativeStream;
511
+ dumpFormat(index: number, url: string, isOutput: boolean): void;
512
+ findBestStream(type: AVMediaType, wantedStreamNb: number, relatedStream: number, wantDecoder: boolean, flags: number): number | {
513
+ streamIndex: number;
514
+ decoder: NativeCodec | null;
515
+ };
516
+ getRTSPStreamInfo(): RTSPStreamInfo[] | null;
517
+ sendRTSPPacket(streamIndex: number, rtpData: Buffer): Promise<number>;
518
+ sendRTSPPacketSync(streamIndex: number, rtpData: Buffer): number;
519
+ interrupt(): void;
520
+ }
521
+ /**
522
+ * Native FFmpegError binding interface
523
+ *
524
+ * Provides error code translation and string representation.
525
+ * Maps FFmpeg error codes to human-readable messages.
526
+ *
527
+ * @internal
528
+ */
529
+ export interface NativeFFmpegError {
530
+ readonly __brand: 'NativeFFmpegError';
531
+ readonly code: number;
532
+ readonly message: string;
533
+ }
534
+ /**
535
+ * Native AudioFifo binding interface
536
+ *
537
+ * Audio FIFO buffer for sample storage and buffering.
538
+ * Provides thread-safe audio sample buffering with automatic reallocation.
539
+ *
540
+ * @internal
541
+ */
542
+ export interface NativeAudioFifo extends Disposable {
543
+ readonly __brand: 'NativeAudioFifo';
544
+ readonly size: number;
545
+ readonly space: number;
546
+ alloc(sampleFmt: AVSampleFormat, channels: number, nbSamples: number): void;
547
+ free(): void;
548
+ write(data: Buffer | Buffer[], nbSamples: number): Promise<number>;
549
+ writeSync(data: Buffer | Buffer[], nbSamples: number): number;
550
+ read(data: Buffer | Buffer[], nbSamples: number): Promise<number>;
551
+ readSync(data: Buffer | Buffer[], nbSamples: number): number;
552
+ peek(data: Buffer | Buffer[], nbSamples: number): Promise<number>;
553
+ peekSync(data: Buffer | Buffer[], nbSamples: number): number;
554
+ drain(nbSamples: number): void;
555
+ reset(): void;
556
+ realloc(nbSamples: number): number;
557
+ }
558
+ /**
559
+ * Native AVFifo binding interface
560
+ *
561
+ * Generic FIFO buffer for arbitrary data types.
562
+ * Provides queue functionality for any fixed-size elements.
563
+ *
564
+ * @internal
565
+ */
566
+ export interface NativeFifo extends Disposable {
567
+ readonly __brand: 'NativeFifo';
568
+ readonly size: number;
569
+ readonly canRead: number;
570
+ readonly canWrite: number;
571
+ readonly elemSize: number;
572
+ alloc(nbElems: number, elemSize: number, flags: AVFifoFlag): void;
573
+ free(): void;
574
+ write(buf: Buffer, nbElems: number): Promise<number>;
575
+ writeSync(buf: Buffer, nbElems: number): number;
576
+ read(buf: Buffer, nbElems: number): Promise<number>;
577
+ readSync(buf: Buffer, nbElems: number): number;
578
+ peek(buf: Buffer, nbElems: number, offset: number): Promise<number>;
579
+ peekSync(buf: Buffer, nbElems: number, offset: number): number;
580
+ grow(inc: number): number;
581
+ reset(): void;
582
+ setAutoGrowLimit(maxElems: number): void;
583
+ }
584
+ /**
585
+ * Native SwsContext binding interface
586
+ *
587
+ * Software scaling and format conversion context.
588
+ * Provides pixel format conversion and image scaling capabilities.
589
+ *
590
+ * @internal
591
+ */
592
+ export interface NativeSoftwareScaleContext extends Disposable {
593
+ readonly __brand: 'NativeSoftwareScaleContext';
594
+ allocContext(): void;
595
+ getContext(srcW: number, srcH: number, srcFormat: AVPixelFormat, dstW: number, dstH: number, dstFormat: AVPixelFormat, flags: SwsFlags): void;
596
+ initContext(): number;
597
+ freeContext(): void;
598
+ scale(srcSlice: Buffer[], srcStride: number[], srcSliceY: number, srcSliceH: number, dst: Buffer[], dstStride: number[]): Promise<number>;
599
+ scaleSync(srcSlice: Buffer[], srcStride: number[], srcSliceY: number, srcSliceH: number, dst: Buffer[], dstStride: number[]): number;
600
+ scaleFrame(dst: NativeFrame, src: NativeFrame): Promise<number>;
601
+ scaleFrameSync(dst: NativeFrame, src: NativeFrame): number;
602
+ [Symbol.dispose](): void;
603
+ }
604
+ /**
605
+ * Native FrameUtils binding interface
606
+ *
607
+ * Frame processing utilities with persistent frame pools.
608
+ * Provides crop, scale, and format conversion operations.
609
+ *
610
+ * @internal
611
+ */
612
+ export interface NativeFrameUtils extends Disposable {
613
+ readonly __brand: 'NativeFrameUtils';
614
+ process(buffer: Buffer, options: ImageOptions): Buffer;
615
+ close(): void;
616
+ }
617
+ /**
618
+ * Native Scaler binding interface.
619
+ *
620
+ * AVFrame scaler/cropper/converter with pooled SwsContexts.
621
+ *
622
+ * @internal
623
+ */
624
+ export interface NativeScaler {
625
+ readonly __brand: 'NativeScaler';
626
+ process(frame: NativeFrame, options: {
627
+ crop?: {
628
+ x: number;
629
+ y: number;
630
+ width: number;
631
+ height: number;
632
+ };
633
+ resize?: {
634
+ width: number;
635
+ height: number;
636
+ };
637
+ format?: string;
638
+ output?: Buffer;
639
+ }): Promise<Buffer>;
640
+ processSync(frame: NativeFrame, options: {
641
+ crop?: {
642
+ x: number;
643
+ y: number;
644
+ width: number;
645
+ height: number;
646
+ };
647
+ resize?: {
648
+ width: number;
649
+ height: number;
650
+ };
651
+ format?: string;
652
+ output?: Buffer;
653
+ }): Buffer;
654
+ close(): void;
655
+ }
656
+ /**
657
+ * Native SwrContext binding interface
658
+ *
659
+ * Audio resampling, sample format conversion and mixing context.
660
+ * Provides audio format conversion, resampling and channel remapping.
661
+ *
662
+ * @internal
663
+ */
664
+ export interface NativeSoftwareResampleContext extends Disposable {
665
+ readonly __brand: 'NativeSoftwareResampleContext';
666
+ alloc(): void;
667
+ allocSetOpts2(outChLayout: ChannelLayout, outSampleFmt: AVSampleFormat, outSampleRate: number, inChLayout: ChannelLayout, inSampleFmt: AVSampleFormat, inSampleRate: number): number;
668
+ init(): number;
669
+ free(): void;
670
+ close(): void;
671
+ convert(outBuffer: Buffer[] | null, outCount: number, inBuffer: Buffer[] | null, inCount: number): Promise<number>;
672
+ convertSync(outBuffer: Buffer[] | null, outCount: number, inBuffer: Buffer[] | null, inCount: number): number;
673
+ convertFrame(outFrame: NativeFrame | null, inFrame: NativeFrame | null): number;
674
+ configFrame(outFrame: NativeFrame | null, inFrame: NativeFrame | null): number;
675
+ isInitialized(): boolean;
676
+ getDelay(base: bigint): bigint;
677
+ getOutSamples(inSamples: number): number;
678
+ nextPts(pts: bigint): bigint;
679
+ setCompensation(sampleDelta: number, compensationDistance: number): number;
680
+ setChannelMapping(channelMap: number[]): number;
681
+ setMatrix(matrix: number[], stride: number): number;
682
+ dropOutput(count: number): number;
683
+ injectSilence(count: number): number;
684
+ [Symbol.dispose](): void;
685
+ }
686
+ /**
687
+ * Native AVFilter binding interface
688
+ *
689
+ * Represents a filter definition (e.g., "scale", "overlay", etc.).
690
+ * Filters are static definitions - actual processing happens via FilterContext.
691
+ *
692
+ * @internal
693
+ */
694
+ export interface NativeFilter {
695
+ readonly __brand: 'NativeFilter';
696
+ readonly name: string | null;
697
+ readonly description: string | null;
698
+ readonly inputs: FilterPad[];
699
+ readonly outputs: FilterPad[];
700
+ readonly flags: AVFilterFlag;
701
+ }
702
+ /**
703
+ * Native AVFilterContext binding interface
704
+ *
705
+ * An instance of a filter in a filter graph.
706
+ * Must be created through FilterGraph.createFilter() and properly disposed after.
707
+ *
708
+ * @internal
709
+ */
710
+ export interface NativeFilterContext extends Disposable {
711
+ readonly __brand: 'NativeFilterContext';
712
+ readonly filter: NativeFilter | null;
713
+ readonly graph: NativeFilterGraph | null;
714
+ readonly nbInputs: number;
715
+ readonly nbOutputs: number;
716
+ name: string | null;
717
+ hwDeviceCtx: NativeHardwareDeviceContext | null;
718
+ extraHWFrames: number;
719
+ init(options?: NativeDictionary | null): number;
720
+ initStr(args?: string | null): number;
721
+ link(srcPad: number, dst: NativeFilterContext, dstPad: number): number;
722
+ unlink(pad: number): void;
723
+ buffersrcAddFrame(frame: NativeFrame | null, flags?: AVBufferSrcFlag): Promise<number>;
724
+ buffersrcAddFrameSync(frame: NativeFrame | null, flags?: AVBufferSrcFlag): number;
725
+ buffersrcParametersSet(params: {
726
+ width?: number;
727
+ height?: number;
728
+ format?: number;
729
+ timeBase?: IRational;
730
+ frameRate?: IRational;
731
+ sampleAspectRatio?: IRational;
732
+ hwFramesCtx?: NativeHardwareFramesContext | null;
733
+ sampleRate?: number;
734
+ channelLayout?: bigint;
735
+ }): number;
736
+ buffersinkGetFrame(frame: NativeFrame): Promise<number>;
737
+ buffersinkGetFrameSync(frame: NativeFrame): number;
738
+ buffersinkGetWidth(): number;
739
+ buffersinkGetHeight(): number;
740
+ buffersinkGetFormat(): AVPixelFormat | AVSampleFormat;
741
+ buffersinkGetTimeBase(): IRational;
742
+ buffersinkGetFrameRate(): IRational;
743
+ buffersinkGetSampleRate(): number;
744
+ buffersinkGetChannelLayout(): ChannelLayout;
745
+ buffersinkGetSampleAspectRatio(): IRational;
746
+ buffersinkGetColorspace(): AVColorSpace;
747
+ buffersinkGetColorRange(): AVColorRange;
748
+ free(): void;
749
+ [Symbol.dispose](): void;
750
+ }
751
+ /**
752
+ * Native AVFilterGraph binding interface
753
+ *
754
+ * Container for all filters and their connections.
755
+ * Must be allocated before use and properly disposed after.
756
+ *
757
+ * @internal
758
+ */
759
+ export interface NativeFilterGraph extends Disposable {
760
+ readonly __brand: 'NativeFilterGraph';
761
+ readonly nbFilters: number;
762
+ readonly filters: NativeFilterContext[] | null;
763
+ threadType: AVFilterConstants;
764
+ nbThreads: number;
765
+ scaleSwsOpts: string | null;
766
+ aresampleSwrOpts: string | null;
767
+ alloc(): void;
768
+ free(): void;
769
+ createFilter(filter: NativeFilter, name: string, args?: string | null): NativeFilterContext | null;
770
+ allocFilter(filter: NativeFilter, name: string): NativeFilterContext | null;
771
+ getFilter(name: string): NativeFilterContext | null;
772
+ config(): Promise<number>;
773
+ configSync(): number;
774
+ parse(filters: string, inputs: NativeFilterInOut | null, outputs: NativeFilterInOut | null): number;
775
+ parse2(filters: string): number;
776
+ parsePtr(filters: string, inputs?: NativeFilterInOut | null, outputs?: NativeFilterInOut | null): number;
777
+ segmentParse(filters: string, flags?: number): NativeFilterGraphSegment | null;
778
+ validate(): number;
779
+ requestOldest(): Promise<number>;
780
+ requestOldestSync(): number;
781
+ dump(): string | null;
782
+ sendCommand(target: string, cmd: string, arg: string, flags?: AVFilterCmdFlag): number | {
783
+ response: string | null;
784
+ };
785
+ queueCommand(target: string, cmd: string, arg: string, ts: number, flags?: AVFilterCmdFlag): number;
786
+ [Symbol.dispose](): void;
787
+ }
788
+ /**
789
+ * Native AVFilterGraphSegment binding interface
790
+ *
791
+ * Represents a parsed filtergraph segment.
792
+ * Separates filter parsing from initialization.
793
+ *
794
+ * @internal
795
+ */
796
+ export interface NativeFilterGraphSegment extends Disposable {
797
+ readonly __brand: 'NativeFilterGraphSegment';
798
+ free(): void;
799
+ createFilters(flags?: number): number;
800
+ applyOpts(flags?: number): number;
801
+ apply(inputs: NativeFilterInOut, outputs: NativeFilterInOut, flags?: number): number;
802
+ [Symbol.dispose](): void;
803
+ }
804
+ /**
805
+ * Native AVFilterInOut binding interface
806
+ *
807
+ * Helper structure for parsing filter graphs.
808
+ * Used with FilterGraph.parse() to define inputs/outputs.
809
+ *
810
+ * @internal
811
+ */
812
+ export interface NativeFilterInOut extends Disposable {
813
+ readonly __brand: 'NativeFilterInOut';
814
+ name: string | null;
815
+ filterCtx: NativeFilterContext | null;
816
+ padIdx: number;
817
+ next: NativeFilterInOut | null;
818
+ alloc(): void;
819
+ free(): void;
820
+ [Symbol.dispose](): void;
821
+ }
822
+ /**
823
+ * Native AVHWDeviceContext binding interface
824
+ *
825
+ * Hardware device context for hardware acceleration.
826
+ * Direct mapping to FFmpeg's AVHWDeviceContext.
827
+ *
828
+ * @internal
829
+ */
830
+ export interface NativeHardwareDeviceContext extends Disposable {
831
+ readonly __brand: 'NativeHardwareDeviceContext';
832
+ readonly type: AVHWDeviceType;
833
+ readonly hwctx: bigint | null;
834
+ alloc(type: AVHWDeviceType): void;
835
+ init(): number;
836
+ create(type: AVHWDeviceType, device: string | null, options: any | null): number;
837
+ createDerived(source: NativeHardwareDeviceContext, type: AVHWDeviceType): number;
838
+ hwconfigAlloc(): bigint | null;
839
+ getHwframeConstraints(hwconfig?: bigint): {
840
+ validHwFormats?: AVPixelFormat[];
841
+ validSwFormats?: AVPixelFormat[];
842
+ minWidth: number;
843
+ minHeight: number;
844
+ maxWidth: number;
845
+ maxHeight: number;
846
+ } | null;
847
+ free(): void;
848
+ [Symbol.dispose](): void;
849
+ }
850
+ /**
851
+ * Native AVHWFramesContext binding interface
852
+ *
853
+ * Hardware frames context for hardware acceleration.
854
+ * Direct mapping to FFmpeg's AVHWFramesContext.
855
+ *
856
+ * @internal
857
+ */
858
+ export interface NativeHardwareFramesContext extends Disposable {
859
+ readonly __brand: 'NativeHardwareFramesContext';
860
+ readonly deviceRef: NativeHardwareDeviceContext | null;
861
+ format: AVPixelFormat;
862
+ swFormat: AVPixelFormat;
863
+ width: number;
864
+ height: number;
865
+ initialPoolSize: number;
866
+ alloc(device: NativeHardwareDeviceContext): void;
867
+ init(): number;
868
+ getBuffer(frame: NativeFrame, flags?: number): number;
869
+ transferData(dst: NativeFrame, src: NativeFrame, flags?: number): Promise<number>;
870
+ transferDataSync(dst: NativeFrame, src: NativeFrame, flags?: number): number;
871
+ transferGetFormats(direction: AVHWFrameTransferDirection): AVPixelFormat[] | number;
872
+ map(dst: NativeFrame, src: NativeFrame, flags?: number): number;
873
+ createDerived(format: AVPixelFormat, derivedDevice: NativeHardwareDeviceContext, source: NativeHardwareFramesContext, flags?: number): number;
874
+ free(): void;
875
+ [Symbol.dispose](): void;
876
+ }
877
+ /**
878
+ * Native AVBitStreamFilter binding interface
879
+ *
880
+ * Represents a bitstream filter definition for modifying packet data.
881
+ * This is an immutable descriptor - actual filtering happens via BitStreamFilterContext.
882
+ * Used for tasks like H.264 annexb conversion, adding/removing metadata, or format adjustments.
883
+ *
884
+ * @internal
885
+ */
886
+ export interface NativeBitStreamFilter {
887
+ readonly __brand: 'NativeBitStreamFilter';
888
+ readonly name: string | null;
889
+ readonly codecIds: number[] | null;
890
+ }
891
+ /**
892
+ * Native AVBSFContext binding interface
893
+ *
894
+ * The main interface for bitstream filtering operations.
895
+ * Processes packets without full decode/encode, modifying headers, metadata, or format.
896
+ * Must be allocated with a filter, initialized, and properly disposed after use.
897
+ *
898
+ * @internal
899
+ */
900
+ export interface NativeBitStreamFilterContext extends Disposable {
901
+ readonly __brand: 'NativeBitStreamFilterContext';
902
+ readonly inputCodecParameters: NativeCodecParameters | null;
903
+ readonly outputCodecParameters: NativeCodecParameters | null;
904
+ readonly outputTimeBase: IRational | null;
905
+ readonly filter: NativeBitStreamFilter | null;
906
+ inputTimeBase: IRational;
907
+ alloc(filter: NativeBitStreamFilter): number;
908
+ init(): number;
909
+ free(): void;
910
+ flush(): void;
911
+ sendPacket(packet: NativePacket | null): Promise<number>;
912
+ sendPacketSync(packet: NativePacket | null): number;
913
+ receivePacket(packet: NativePacket): Promise<number>;
914
+ receivePacketSync(packet: NativePacket): number;
915
+ isInitialized(): boolean;
916
+ [Symbol.dispose](): void;
917
+ }
918
+ /**
919
+ * Native Log binding interface
920
+ *
921
+ * Static-only class for controlling FFmpeg's logging.
922
+ * Direct mapping to av_log functions.
923
+ *
924
+ * @internal
925
+ */
926
+ export interface NativeLog {
927
+ readonly __brand: 'NativeLog';
928
+ }
929
+ /**
930
+ * Native AVOption
931
+ *
932
+ * Represents a single option metadata from FFmpeg's AVOption system.
933
+ * Retrieved via Option.next() or Option.find().
934
+ *
935
+ * @internal
936
+ */
937
+ export interface NativeOption {
938
+ readonly __brand: 'NativeOption';
939
+ readonly name: string | null;
940
+ readonly help: string | null;
941
+ readonly type: AVOptionType;
942
+ readonly defaultValue: unknown;
943
+ readonly min: number;
944
+ readonly max: number;
945
+ readonly flags: AVOptionFlag;
946
+ readonly unit: string | null;
947
+ }
948
+ /**
949
+ * Native sync queue interface
950
+ *
951
+ * FFmpeg's native sync_queue from fftools for packet synchronization.
952
+ *
953
+ * @internal
954
+ */
955
+ export interface NativeSyncQueue extends Disposable {
956
+ addStream(limiting: number): number;
957
+ send(streamIdx: number, packet: NativePacket | null): number;
958
+ receive(streamIdx: number, packet: NativePacket): number;
959
+ free(): void;
960
+ }
961
+ /**
962
+ * Device information returned by device enumeration
963
+ *
964
+ * @internal
965
+ */
966
+ export interface NativeDeviceInfo {
967
+ name: string;
968
+ description: string;
969
+ type: 'video' | 'audio' | 'screen';
970
+ isDefault: boolean;
971
+ screenX?: number;
972
+ screenY?: number;
973
+ screenWidth?: number;
974
+ screenHeight?: number;
975
+ }
976
+ /**
977
+ * Device capture mode (resolution + frame rate range)
978
+ *
979
+ * @internal
980
+ */
981
+ export interface NativeDeviceMode {
982
+ width: number;
983
+ height: number;
984
+ minFrameRate: number;
985
+ maxFrameRate: number;
986
+ pixelFormat: AVPixelFormat;
987
+ codecId: AVCodecID;
988
+ }
989
+ /**
990
+ * Audio device capture mode (sample rate + channels + sample format)
991
+ *
992
+ * @internal
993
+ */
994
+ export interface NativeAudioDeviceMode {
995
+ sampleRate: number;
996
+ channels: number;
997
+ sampleFormat: AVSampleFormat;
998
+ }
999
+ /**
1000
+ * Device module static methods
1001
+ *
1002
+ * @internal
1003
+ */
1004
+ export interface NativeDeviceModule {
1005
+ listDevices(): Promise<NativeDeviceInfo[]>;
1006
+ listDevicesSync(): NativeDeviceInfo[];
1007
+ listDeviceModes(deviceName: string): Promise<NativeDeviceMode[]>;
1008
+ listDeviceModesSync(deviceName: string): NativeDeviceMode[];
1009
+ listAudioDeviceModes(deviceName: string): Promise<NativeAudioDeviceMode[]>;
1010
+ listAudioDeviceModesSync(deviceName: string): NativeAudioDeviceMode[];
1011
+ getVideoFormat(): string;
1012
+ getAudioFormat(): string;
1013
+ getScreenFormat(): string;
1014
+ hasScreenCapturePermission(): boolean;
1015
+ requestScreenCaptureAccess(): boolean;
1016
+ }
1017
+ /**
1018
+ * Interface for classes that wrap native objects
1019
+ *
1020
+ * @internal
1021
+ */
1022
+ export interface NativeWrapper<T> {
1023
+ getNative(): T;
1024
+ }