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,698 @@
1
+ import { OptionMember } from './option.js';
2
+ import type { AVIOFlag, AVSeekWhence } from '../constants/constants.js';
3
+ import type { NativeIOContext, NativeWrapper } from './native-types.js';
4
+ /**
5
+ * I/O context for custom input/output operations.
6
+ *
7
+ * Provides an abstraction layer for all I/O operations in FFmpeg.
8
+ * Enables reading from and writing to various sources including files,
9
+ * network streams, memory buffers, and custom callbacks. Essential for
10
+ * implementing custom protocols or handling non-standard I/O scenarios.
11
+ *
12
+ * Direct mapping to FFmpeg's AVIOContext.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { IOContext, FFmpegError } from 'node-av';
17
+ * import { AVIO_FLAG_READ, AVIO_FLAG_WRITE, AVSEEK_SET } from 'node-av/constants';
18
+ *
19
+ * // Open file for reading
20
+ * const io = new IOContext();
21
+ * const ret = await io.open2('input.mp4', AVIO_FLAG_READ);
22
+ * FFmpegError.throwIfError(ret, 'open2');
23
+ *
24
+ * // Read data
25
+ * const data = await io.read(4096);
26
+ * if (data instanceof Buffer) {
27
+ * console.log(`Read ${data.length} bytes`);
28
+ * }
29
+ *
30
+ * // Seek to position
31
+ * const pos = await io.seek(1024n, AVSEEK_SET);
32
+ * console.log(`Seeked to position ${pos}`);
33
+ *
34
+ * // Get file size
35
+ * const fileSize = await io.size();
36
+ * console.log(`File size: ${fileSize}`);
37
+ *
38
+ * // Close when done
39
+ * await io.closep();
40
+ *
41
+ * // Custom I/O with callbacks
42
+ * const customIO = new IOContext();
43
+ * let position = 0n;
44
+ * const buffer = Buffer.from('Hello World');
45
+ *
46
+ * customIO.allocContextWithCallbacks(
47
+ * 4096, // Buffer size
48
+ * 0, // Read mode
49
+ * (size) => {
50
+ * // Read callback
51
+ * const end = Number(position) + size;
52
+ * const chunk = buffer.subarray(Number(position), end);
53
+ * position = BigInt(end);
54
+ * return chunk;
55
+ * },
56
+ * null, // No write callback for read mode
57
+ * (offset, whence) => {
58
+ * // Seek callback
59
+ * if (whence === AVSEEK_SET) position = offset;
60
+ * else if (whence === AVSEEK_CUR) position += offset;
61
+ * else if (whence === AVSEEK_END) position = BigInt(buffer.length) + offset;
62
+ * return position;
63
+ * }
64
+ * );
65
+ * ```
66
+ *
67
+ * @see [AVIOContext](https://ffmpeg.org/doxygen/trunk/structAVIOContext.html) - FFmpeg Doxygen
68
+ * @see {@link FormatContext} For using with demuxing/muxing
69
+ */
70
+ export declare class IOContext extends OptionMember<NativeIOContext> implements Disposable, AsyncDisposable, NativeWrapper<NativeIOContext> {
71
+ constructor();
72
+ /**
73
+ * Find input format by short name.
74
+ *
75
+ * Creates an IOContext instance from a native binding object.
76
+ * Used internally for wrapping native I/O contexts.
77
+ *
78
+ * @param native - Native IOContext binding object
79
+ *
80
+ * @returns Wrapped IOContext instance
81
+ *
82
+ * @internal
83
+ */
84
+ static fromNative(native: NativeIOContext): IOContext;
85
+ /**
86
+ * End of file indicator.
87
+ *
88
+ * True if end of file has been reached during reading.
89
+ *
90
+ * Direct mapping to AVIOContext->eof_reached.
91
+ */
92
+ get eof(): boolean;
93
+ /**
94
+ * Error code.
95
+ *
96
+ * Contains the last error that occurred, or 0 if no error.
97
+ *
98
+ * Direct mapping to AVIOContext->error.
99
+ */
100
+ get error(): number;
101
+ /**
102
+ * Seekability indicator.
103
+ *
104
+ * Non-zero if the underlying resource supports seeking.
105
+ * Some protocols like pipes or network streams may not be seekable.
106
+ *
107
+ * Direct mapping to AVIOContext->seekable.
108
+ */
109
+ get seekable(): number;
110
+ /**
111
+ * Maximum packet size.
112
+ *
113
+ * Used to limit packet sizes in network protocols.
114
+ * 0 means no limit.
115
+ *
116
+ * Direct mapping to AVIOContext->max_packet_size.
117
+ */
118
+ get maxPacketSize(): number;
119
+ set maxPacketSize(value: number);
120
+ /**
121
+ * Direct mode flag.
122
+ *
123
+ * If set, the I/O context will attempt to avoid buffering.
124
+ *
125
+ * Direct mapping to AVIOContext->direct.
126
+ */
127
+ get direct(): number;
128
+ set direct(value: number);
129
+ /**
130
+ * Current position.
131
+ *
132
+ * Current byte position in the stream.
133
+ *
134
+ * Direct mapping to AVIOContext->pos.
135
+ */
136
+ get pos(): bigint;
137
+ /**
138
+ * Internal buffer size.
139
+ *
140
+ * Size of the internal buffer used for I/O operations.
141
+ *
142
+ * Direct mapping to AVIOContext->buffer_size.
143
+ */
144
+ get bufferSize(): number;
145
+ /**
146
+ * Write flag.
147
+ *
148
+ * True if opened for writing, false for reading.
149
+ *
150
+ * Direct mapping to AVIOContext->write_flag.
151
+ */
152
+ get writeFlag(): boolean;
153
+ /**
154
+ * Allocate I/O context with buffer.
155
+ *
156
+ * Allocates a basic I/O context with an internal buffer.
157
+ * For custom I/O, use allocContextWithCallbacks instead.
158
+ *
159
+ * Direct mapping to avio_alloc_context() without callbacks.
160
+ *
161
+ * @param bufferSize - Size of internal buffer
162
+ *
163
+ * @param writeFlag - 1 for write, 0 for read
164
+ *
165
+ * @example
166
+ * ```typescript
167
+ * const io = new IOContext();
168
+ * io.allocContext(4096, 0); // 4KB buffer for reading
169
+ * ```
170
+ *
171
+ * @see {@link allocContextWithCallbacks} For custom I/O
172
+ */
173
+ allocContext(bufferSize: number, writeFlag: number): void;
174
+ /**
175
+ * Allocate I/O context with custom callbacks.
176
+ *
177
+ * Creates an I/O context with custom read, write, and seek callbacks.
178
+ * Enables implementing custom protocols or data sources.
179
+ *
180
+ * NOTE: When using JavaScript callbacks, synchronous operations
181
+ * (e.g., readSync, seekSync) cannot be used on this context.
182
+ * This is because JavaScript callbacks require the event loop to be available,
183
+ * which is blocked during synchronous operations. Always use async methods
184
+ * (read, seek) when working with custom callbacks.
185
+ *
186
+ * Direct mapping to avio_alloc_context() with callbacks.
187
+ *
188
+ * @param bufferSize - Size of internal buffer
189
+ *
190
+ * @param writeFlag - 1 for write mode, 0 for read mode
191
+ *
192
+ * @param readCallback - Function to read data (null for write-only)
193
+ *
194
+ * @param writeCallback - Function to write data (null for read-only)
195
+ *
196
+ * @param seekCallback - Function to seek in stream (optional)
197
+ *
198
+ * @example
199
+ * ```typescript
200
+ * import { AVSEEK_SET, AVSEEK_CUR, AVSEEK_END, AVSEEK_SIZE } from 'node-av/constants';
201
+ *
202
+ * const data = Buffer.from('Custom data source');
203
+ * let position = 0;
204
+ *
205
+ * io.allocContextWithCallbacks(
206
+ * 4096,
207
+ * 0, // Read mode
208
+ * (size) => {
209
+ * // Read callback
210
+ * if (position >= data.length) return -541; // EOF
211
+ * const chunk = data.subarray(position, position + size);
212
+ * position += chunk.length;
213
+ * return chunk;
214
+ * },
215
+ * null,
216
+ * (offset, whence) => {
217
+ * // Seek callback
218
+ * if (whence === AVSEEK_SIZE) return BigInt(data.length);
219
+ * if (whence === AVSEEK_SET) position = Number(offset);
220
+ * else if (whence === AVSEEK_CUR) position += Number(offset);
221
+ * else if (whence === AVSEEK_END) position = data.length + Number(offset);
222
+ * return BigInt(position);
223
+ * }
224
+ * );
225
+ * ```
226
+ *
227
+ * @see {@link allocContext} For simple allocation
228
+ */
229
+ 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;
230
+ /**
231
+ * Free I/O context.
232
+ *
233
+ * Releases the I/O context and its resources.
234
+ * The context becomes invalid after calling this.
235
+ *
236
+ * Direct mapping to avio_context_free().
237
+ *
238
+ * @example
239
+ * ```typescript
240
+ * io.freeContext();
241
+ * // Context is now invalid
242
+ * ```
243
+ */
244
+ freeContext(): void;
245
+ /**
246
+ * Open resource for I/O.
247
+ *
248
+ * Opens a URL or file for reading or writing.
249
+ * Automatically selects the appropriate protocol handler.
250
+ *
251
+ * Direct mapping to avio_open2().
252
+ *
253
+ * @param url - URL or file path to open
254
+ *
255
+ * @param flags - Open flags (AVIO_FLAG_READ, AVIO_FLAG_WRITE, etc.)
256
+ *
257
+ * @returns 0 on success, negative AVERROR on error:
258
+ * - AVERROR_ENOENT: File not found
259
+ * - AVERROR_EACCES: Permission denied
260
+ * - AVERROR_ENOMEM: Memory allocation failure
261
+ *
262
+ * @example
263
+ * ```typescript
264
+ * import { FFmpegError } from 'node-av';
265
+ * import { AVIO_FLAG_READ, AVIO_FLAG_WRITE } from 'node-av/constants';
266
+ *
267
+ * // Open for reading
268
+ * const ret = await io.open2('input.mp4', AVIO_FLAG_READ);
269
+ * FFmpegError.throwIfError(ret, 'open2');
270
+ *
271
+ * // Open for writing
272
+ * const ret2 = await io.open2('output.mp4', AVIO_FLAG_WRITE);
273
+ * FFmpegError.throwIfError(ret2, 'open2');
274
+ * ```
275
+ *
276
+ * @see {@link closep} To close after use
277
+ */
278
+ open2(url: string, flags?: AVIOFlag): Promise<number>;
279
+ /**
280
+ * Open resource for I/O synchronously.
281
+ * Synchronous version of open2.
282
+ *
283
+ * Opens a URL or file for reading or writing.
284
+ * Automatically selects the appropriate protocol handler.
285
+ *
286
+ * Direct mapping to avio_open2().
287
+ *
288
+ * @param url - URL or file path to open
289
+ *
290
+ * @param flags - Open flags (AVIO_FLAG_READ, AVIO_FLAG_WRITE, etc.)
291
+ *
292
+ * @returns 0 on success, negative AVERROR on error:
293
+ * - AVERROR_ENOENT: File not found
294
+ * - AVERROR_EACCES: Permission denied
295
+ * - AVERROR_ENOMEM: Memory allocation failure
296
+ *
297
+ * @example
298
+ * ```typescript
299
+ * import { FFmpegError } from 'node-av';
300
+ * import { AVIO_FLAG_READ, AVIO_FLAG_WRITE } from 'node-av/constants';
301
+ *
302
+ * // Open for reading
303
+ * const ret = io.open2Sync('input.mp4', AVIO_FLAG_READ);
304
+ * FFmpegError.throwIfError(ret, 'open2');
305
+ *
306
+ * // Open for writing
307
+ * const ret2 = io.open2Sync('output.mp4', AVIO_FLAG_WRITE);
308
+ * FFmpegError.throwIfError(ret2, 'open2');
309
+ * ```
310
+ *
311
+ * @see {@link open2} For async version
312
+ */
313
+ open2Sync(url: string, flags?: AVIOFlag): number;
314
+ /**
315
+ * Close I/O context.
316
+ *
317
+ * Closes the I/O context and releases associated resources.
318
+ * Flushes any buffered data before closing.
319
+ * A context that was already closed or freed is a no-op, matching avio_close() on a null context.
320
+ *
321
+ * Direct mapping to avio_closep().
322
+ *
323
+ * @returns 0 on success or when there was nothing left to close, negative AVERROR on error
324
+ *
325
+ * @example
326
+ * ```typescript
327
+ * const ret = await io.closep();
328
+ * if (ret < 0) {
329
+ * console.error('Error closing I/O context');
330
+ * }
331
+ * ```
332
+ *
333
+ * @see {@link open2} To open resources
334
+ */
335
+ closep(): Promise<number>;
336
+ /**
337
+ * Close I/O context synchronously.
338
+ * Synchronous version of closep.
339
+ *
340
+ * Closes the I/O context and frees resources.
341
+ * Sets internal pointer to NULL.
342
+ * A context that was already closed or freed is a no-op, matching avio_close() on a null context.
343
+ *
344
+ * Direct mapping to avio_closep().
345
+ *
346
+ * @returns 0 on success or when there was nothing left to close, negative AVERROR on error
347
+ *
348
+ * @example
349
+ * ```typescript
350
+ * const ret = io.closepSync();
351
+ * if (ret < 0) {
352
+ * console.error(`Failed to close: ${ret}`);
353
+ * }
354
+ * ```
355
+ *
356
+ * @see {@link closep} For async version
357
+ */
358
+ closepSync(): number;
359
+ /**
360
+ * Read data from I/O context.
361
+ *
362
+ * Reads up to the specified number of bytes from the stream.
363
+ *
364
+ * Direct mapping to avio_read().
365
+ *
366
+ * @param size - Maximum number of bytes to read
367
+ *
368
+ * @returns Buffer with data, or error code if negative:
369
+ * - AVERROR_EOF: End of file reached
370
+ * - AVERROR_EIO: I/O error
371
+ *
372
+ * @example
373
+ * ```typescript
374
+ * const data = await io.read(4096);
375
+ * if (data instanceof Buffer) {
376
+ * console.log(`Read ${data.length} bytes`);
377
+ * } else {
378
+ * console.error(`Read error: ${data}`);
379
+ * }
380
+ * ```
381
+ *
382
+ * @see {@link write} For writing data
383
+ */
384
+ read(size: number): Promise<Buffer | number>;
385
+ /**
386
+ * Read data from I/O context synchronously.
387
+ * Synchronous version of read.
388
+ *
389
+ * Reads up to the specified number of bytes from the stream.
390
+ *
391
+ * Direct mapping to avio_read().
392
+ *
393
+ * @param size - Number of bytes to read
394
+ *
395
+ * @returns Buffer with data, or negative AVERROR on error
396
+ *
397
+ * @example
398
+ * ```typescript
399
+ * const result = io.readSync(4096);
400
+ * if (Buffer.isBuffer(result)) {
401
+ * console.log(`Read ${result.length} bytes`);
402
+ * } else {
403
+ * console.log(`Read error: ${result}`);
404
+ * }
405
+ * ```
406
+ *
407
+ * @see {@link read} For async version
408
+ */
409
+ readSync(size: number): Buffer | number;
410
+ /**
411
+ * Write data to I/O context.
412
+ *
413
+ * Writes buffer data to the stream.
414
+ *
415
+ * Direct mapping to avio_write().
416
+ *
417
+ * @param buffer - Data to write
418
+ *
419
+ * @example
420
+ * ```typescript
421
+ * const data = Buffer.from('Hello World');
422
+ * await io.write(data);
423
+ * ```
424
+ *
425
+ * @see {@link read} For reading data
426
+ * @see {@link flush} To flush buffers
427
+ */
428
+ write(buffer: Buffer): Promise<void>;
429
+ /**
430
+ * Write data to I/O context synchronously.
431
+ * Synchronous version of write.
432
+ *
433
+ * Writes buffer data to the stream.
434
+ *
435
+ * Direct mapping to avio_write().
436
+ *
437
+ * @param buffer - Data to write
438
+ *
439
+ * @example
440
+ * ```typescript
441
+ * const data = Buffer.from('Hello, World!');
442
+ * io.writeSync(data);
443
+ * ```
444
+ *
445
+ * @see {@link write} For async version
446
+ */
447
+ writeSync(buffer: Buffer): void;
448
+ /**
449
+ * Seek to position in stream.
450
+ *
451
+ * Changes the current position in the stream.
452
+ * Not all streams support seeking.
453
+ *
454
+ * Direct mapping to avio_seek().
455
+ *
456
+ * @param offset - Byte offset to seek to
457
+ *
458
+ * @param whence - Seek origin (AVSEEK_SET, AVSEEK_CUR, AVSEEK_END)
459
+ *
460
+ * @returns New position, or negative AVERROR on error:
461
+ * - AVERROR_EINVAL: Invalid arguments
462
+ * - AVERROR_ENOSYS: Seeking not supported
463
+ *
464
+ * @example
465
+ * ```typescript
466
+ * import { AVSEEK_SET, AVSEEK_CUR, AVSEEK_END } from 'node-av/constants';
467
+ *
468
+ * // Seek to absolute position
469
+ * const pos1 = await io.seek(1024n, AVSEEK_SET);
470
+ *
471
+ * // Seek relative to current position
472
+ * const pos2 = await io.seek(512n, AVSEEK_CUR);
473
+ *
474
+ * // Seek relative to end
475
+ * const pos3 = await io.seek(-1024n, AVSEEK_END);
476
+ * ```
477
+ *
478
+ * @see {@link tell} To get current position
479
+ * @see {@link skip} For relative seeking
480
+ */
481
+ seek(offset: bigint, whence: AVSeekWhence): Promise<bigint>;
482
+ /**
483
+ * Seek to position in stream synchronously.
484
+ * Synchronous version of seek.
485
+ *
486
+ * Changes the current position in the stream.
487
+ * Not all streams support seeking.
488
+ *
489
+ * Direct mapping to avio_seek().
490
+ *
491
+ * @param offset - Byte offset to seek to
492
+ *
493
+ * @param whence - Seek origin (AVSEEK_SET, AVSEEK_CUR, AVSEEK_END)
494
+ *
495
+ * @returns New position, or negative AVERROR on error:
496
+ * - AVERROR_EINVAL: Invalid arguments
497
+ * - AVERROR_ENOSYS: Seeking not supported
498
+ *
499
+ * @example
500
+ * ```typescript
501
+ * import { AVSEEK_SET, AVSEEK_CUR, AVSEEK_END } from 'node-av/constants';
502
+ *
503
+ * // Seek to absolute position
504
+ * const pos1 = io.seekSync(1024n, AVSEEK_SET);
505
+ *
506
+ * // Seek relative to current position
507
+ * const pos2 = io.seekSync(512n, AVSEEK_CUR);
508
+ *
509
+ * // Seek relative to end
510
+ * const pos3 = io.seekSync(-1024n, AVSEEK_END);
511
+ * ```
512
+ *
513
+ * @see {@link seek} For async version
514
+ */
515
+ seekSync(offset: bigint, whence: AVSeekWhence): bigint;
516
+ /**
517
+ * Get stream size.
518
+ *
519
+ * Returns the total size of the stream in bytes.
520
+ * Not all streams have a known size.
521
+ *
522
+ * Direct mapping to avio_size().
523
+ *
524
+ * @returns Size in bytes, or negative AVERROR if unknown:
525
+ * - AVERROR_ENOSYS: Size not available
526
+ *
527
+ * @example
528
+ * ```typescript
529
+ * const size = await io.size();
530
+ * if (size >= 0n) {
531
+ * console.log(`Stream size: ${size} bytes`);
532
+ * } else {
533
+ * console.log('Stream size unknown');
534
+ * }
535
+ * ```
536
+ */
537
+ size(): Promise<bigint>;
538
+ /**
539
+ * Get stream size synchronously.
540
+ * Synchronous version of size.
541
+ *
542
+ * Returns the total size of the stream in bytes.
543
+ * Not all streams have a known size.
544
+ *
545
+ * Direct mapping to avio_size().
546
+ *
547
+ * @returns Size in bytes, or negative AVERROR if unknown:
548
+ * - AVERROR_ENOSYS: Size not available
549
+ *
550
+ * @example
551
+ * ```typescript
552
+ * const size = io.sizeSync();
553
+ * if (size >= 0n) {
554
+ * console.log(`Stream size: ${size} bytes`);
555
+ * } else {
556
+ * console.log('Stream size unknown');
557
+ * }
558
+ * ```
559
+ *
560
+ * @see {@link size} For async version
561
+ */
562
+ sizeSync(): bigint;
563
+ /**
564
+ * Flush buffered data.
565
+ *
566
+ * Forces any buffered data to be written to the underlying resource.
567
+ *
568
+ * Direct mapping to avio_flush().
569
+ *
570
+ * @example
571
+ * ```typescript
572
+ * await io.write(data);
573
+ * await io.flush(); // Ensure data is written
574
+ * ```
575
+ *
576
+ * @see {@link write} For writing data
577
+ */
578
+ flush(): Promise<void>;
579
+ /**
580
+ * Flush buffered data synchronously.
581
+ * Synchronous version of flush.
582
+ *
583
+ * Forces any buffered data to be written to the underlying resource.
584
+ *
585
+ * Direct mapping to avio_flush().
586
+ *
587
+ * @example
588
+ * ```typescript
589
+ * io.writeSync(data);
590
+ * io.flushSync(); // Ensure data is written
591
+ * ```
592
+ *
593
+ * @see {@link flush} For async version
594
+ */
595
+ flushSync(): void;
596
+ /**
597
+ * Skip bytes in stream.
598
+ *
599
+ * Advances the position by the specified offset.
600
+ * More efficient than reading and discarding data.
601
+ *
602
+ * Direct mapping to avio_skip().
603
+ *
604
+ * @param offset - Number of bytes to skip
605
+ *
606
+ * @returns New position after skipping
607
+ *
608
+ * @example
609
+ * ```typescript
610
+ * // Skip 1024 bytes forward
611
+ * const newPos = await io.skip(1024n);
612
+ * console.log(`New position: ${newPos}`);
613
+ * ```
614
+ *
615
+ * @see {@link seek} For absolute positioning
616
+ */
617
+ skip(offset: bigint): Promise<bigint>;
618
+ /**
619
+ * Skip bytes in stream synchronously.
620
+ * Synchronous version of skip.
621
+ *
622
+ * Advances the position by the specified offset.
623
+ * More efficient than reading and discarding data.
624
+ *
625
+ * Direct mapping to avio_skip().
626
+ *
627
+ * @param offset - Number of bytes to skip
628
+ *
629
+ * @returns New position after skipping
630
+ *
631
+ * @example
632
+ * ```typescript
633
+ * // Skip 1024 bytes forward
634
+ * const newPos = io.skipSync(1024n);
635
+ * console.log(`New position: ${newPos}`);
636
+ * ```
637
+ *
638
+ * @see {@link skip} For async version
639
+ */
640
+ skipSync(offset: bigint): bigint;
641
+ /**
642
+ * Get current position.
643
+ *
644
+ * Returns the current byte position in the stream.
645
+ *
646
+ * Direct mapping to avio_tell().
647
+ *
648
+ * @returns Current position in bytes
649
+ *
650
+ * @example
651
+ * ```typescript
652
+ * const position = io.tell();
653
+ * console.log(`Current position: ${position}`);
654
+ * ```
655
+ *
656
+ * @see {@link seek} To change position
657
+ */
658
+ tell(): bigint;
659
+ /**
660
+ * Get the underlying native IOContext object.
661
+ *
662
+ * @returns The native IOContext binding object
663
+ *
664
+ * @internal
665
+ */
666
+ getNative(): NativeIOContext;
667
+ /**
668
+ * Dispose of the I/O context synchronously.
669
+ *
670
+ * Implements the Disposable interface for automatic cleanup.
671
+ * Closes the context and releases resources.
672
+ *
673
+ * @example
674
+ * ```typescript
675
+ * {
676
+ * using io = IOStream.create(buffer);
677
+ * // Use io...
678
+ * } // Automatically freed when leaving scope
679
+ * ```
680
+ */
681
+ [Symbol.dispose](): void;
682
+ /**
683
+ * Dispose of the I/O context asynchronously.
684
+ *
685
+ * Implements the AsyncDisposable interface for automatic cleanup.
686
+ * Closes the context and releases resources.
687
+ *
688
+ * @example
689
+ * ```typescript
690
+ * {
691
+ * await using io = new IOContext();
692
+ * await io.open2('input.mp4');
693
+ * // Use io...
694
+ * } // Automatically closed when leaving scope
695
+ * ```
696
+ */
697
+ [Symbol.asyncDispose](): Promise<void>;
698
+ }