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

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