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,443 @@
1
+ import { bindings } from './binding.js';
2
+ import { BitStreamFilter } from './bitstream-filter.js';
3
+ import { CodecParameters } from './codec-parameters.js';
4
+ import { OptionMember } from './option.js';
5
+ import { Rational } from './rational.js';
6
+ /**
7
+ * Bitstream filter context for processing compressed video/audio streams.
8
+ *
9
+ * Applies bitstream filters to modify or analyze compressed packets without
10
+ * full decoding/encoding. Common uses include format conversion (e.g., H.264 MP4 to Annex B),
11
+ * metadata extraction, parameter set manipulation, and packet splitting/merging.
12
+ * Essential for stream compatibility between different containers and decoders.
13
+ *
14
+ * Direct mapping to FFmpeg's AVBSFContext.
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * import { BitStreamFilterContext, BitStreamFilter, Packet, FFmpegError } from 'node-av';
19
+ *
20
+ * // Create and initialize H.264 stream format converter
21
+ * const ctx = new BitStreamFilterContext();
22
+ * const filter = BitStreamFilter.getByName('h264_mp4toannexb');
23
+ * if (!filter) {
24
+ * throw new Error('H.264 filter not available');
25
+ * }
26
+ *
27
+ * let ret = ctx.alloc(filter);
28
+ * FFmpegError.throwIfError(ret, 'alloc');
29
+ *
30
+ * ret = ctx.init();
31
+ * FFmpegError.throwIfError(ret, 'init');
32
+ *
33
+ * // Process packets
34
+ * const inputPacket = new Packet();
35
+ * const outputPacket = new Packet();
36
+ *
37
+ * ret = await ctx.sendPacket(inputPacket);
38
+ * FFmpegError.throwIfError(ret, 'sendPacket');
39
+ *
40
+ * ret = await ctx.receivePacket(outputPacket);
41
+ * if (ret >= 0) {
42
+ * // Process filtered packet
43
+ * }
44
+ *
45
+ * // Cleanup
46
+ * ctx.free();
47
+ * ```
48
+ *
49
+ * @see {@link BitStreamFilter} For available filter types
50
+ * @see {@link Packet} For packet manipulation
51
+ */
52
+ export class BitStreamFilterContext extends OptionMember {
53
+ _filter; // Cache for filter wrapper
54
+ constructor() {
55
+ super(new bindings.BitStreamFilterContext());
56
+ }
57
+ /**
58
+ * Check if the context has been initialized.
59
+ *
60
+ * Returns true if init() has been successfully called.
61
+ * The context must be initialized before sending/receiving packets.
62
+ */
63
+ get isInitialized() {
64
+ return this.native.isInitialized();
65
+ }
66
+ /**
67
+ * Input codec parameters.
68
+ *
69
+ * Parameters describing the input stream format.
70
+ * These are automatically configured from the input packets in most cases.
71
+ * Reads defaults once the context is freed.
72
+ *
73
+ * Direct mapping to AVBSFContext->par_in.
74
+ */
75
+ get inputCodecParameters() {
76
+ const nativeParams = this.native.inputCodecParameters;
77
+ if (!nativeParams) {
78
+ return null;
79
+ }
80
+ // Wrap it in our TypeScript class
81
+ const wrapper = Object.create(CodecParameters.prototype);
82
+ wrapper.native = nativeParams;
83
+ return wrapper;
84
+ }
85
+ /**
86
+ * Output codec parameters.
87
+ *
88
+ * Parameters describing the output stream format after filtering.
89
+ * These reflect any changes made by the bitstream filter.
90
+ * Reads defaults once the context is freed.
91
+ *
92
+ * Direct mapping to AVBSFContext->par_out.
93
+ */
94
+ get outputCodecParameters() {
95
+ const nativeParams = this.native.outputCodecParameters;
96
+ if (!nativeParams) {
97
+ return null;
98
+ }
99
+ // Wrap it in our TypeScript class
100
+ const wrapper = Object.create(CodecParameters.prototype);
101
+ wrapper.native = nativeParams;
102
+ return wrapper;
103
+ }
104
+ /**
105
+ * Input time base.
106
+ *
107
+ * Time base of the input packets (timestamps per second).
108
+ * Must be set before init() for proper timestamp handling.
109
+ *
110
+ * Direct mapping to AVBSFContext->time_base_in.
111
+ */
112
+ get inputTimeBase() {
113
+ const tb = this.native.inputTimeBase;
114
+ return new Rational(tb.num, tb.den);
115
+ }
116
+ set inputTimeBase(value) {
117
+ this.native.inputTimeBase = { num: value.num, den: value.den };
118
+ }
119
+ /**
120
+ * Output time base.
121
+ *
122
+ * Time base of the output packets after filtering.
123
+ * May differ from input if the filter modifies timing.
124
+ *
125
+ * Direct mapping to AVBSFContext->time_base_out.
126
+ */
127
+ get outputTimeBase() {
128
+ const tb = this.native.outputTimeBase;
129
+ if (!tb)
130
+ return null;
131
+ return new Rational(tb.num, tb.den);
132
+ }
133
+ /**
134
+ * The bitstream filter being used.
135
+ *
136
+ * Reference to the filter descriptor allocated to this context.
137
+ *
138
+ * Direct mapping to AVBSFContext->filter.
139
+ */
140
+ get filter() {
141
+ if (!this._filter) {
142
+ const native = this.native.filter;
143
+ if (!native) {
144
+ return null;
145
+ }
146
+ this._filter = new BitStreamFilter(native);
147
+ }
148
+ return this._filter;
149
+ }
150
+ /**
151
+ * Allocate a bitstream filter context.
152
+ *
153
+ * Allocates and configures the context for the specified filter.
154
+ * Must be called before init().
155
+ *
156
+ * Direct mapping to av_bsf_alloc().
157
+ *
158
+ * @param filter - The bitstream filter to use
159
+ *
160
+ * @returns 0 on success, negative AVERROR on error:
161
+ * - AVERROR_ENOMEM: Memory allocation failure
162
+ * - AVERROR_EINVAL: Invalid filter
163
+ *
164
+ * @example
165
+ * ```typescript
166
+ * import { FFmpegError } from 'node-av';
167
+ *
168
+ * const filter = BitStreamFilter.getByName('h264_mp4toannexb');
169
+ * if (!filter) {
170
+ * throw new Error('Filter not found');
171
+ * }
172
+ *
173
+ * const ret = ctx.alloc(filter);
174
+ * FFmpegError.throwIfError(ret, 'alloc');
175
+ * ```
176
+ *
177
+ * @see {@link init} To initialize after allocation
178
+ * @see {@link BitStreamFilter.getByName} To get filter by name
179
+ */
180
+ alloc(filter) {
181
+ return this.native.alloc(filter.getNative());
182
+ }
183
+ /**
184
+ * Initialize the bitstream filter context.
185
+ *
186
+ * Initializes the filter with the configured parameters.
187
+ * Must be called after alloc() and before processing packets.
188
+ *
189
+ * Direct mapping to av_bsf_init().
190
+ *
191
+ * @returns 0 on success, negative AVERROR on error:
192
+ * - AVERROR_EINVAL: Invalid parameters
193
+ * - AVERROR_ENOMEM: Memory allocation failure
194
+ *
195
+ * @example
196
+ * ```typescript
197
+ * import { FFmpegError } from 'node-av';
198
+ *
199
+ * // Allocate and initialize
200
+ * const ret1 = ctx.alloc(filter);
201
+ * FFmpegError.throwIfError(ret1, 'alloc');
202
+ *
203
+ * // Set parameters if needed
204
+ * ctx.inputTimeBase = new Rational(1, 25);
205
+ *
206
+ * const ret2 = ctx.init();
207
+ * FFmpegError.throwIfError(ret2, 'init');
208
+ * ```
209
+ *
210
+ * @see {@link alloc} Must be called first
211
+ * @see {@link isInitialized} To check initialization status
212
+ */
213
+ init() {
214
+ return this.native.init();
215
+ }
216
+ /**
217
+ * Free the bitstream filter context.
218
+ *
219
+ * Releases all resources associated with the context.
220
+ * The context becomes invalid after calling this.
221
+ *
222
+ * Direct mapping to av_bsf_free().
223
+ *
224
+ * @example
225
+ * ```typescript
226
+ * ctx.free();
227
+ * // Context is now invalid
228
+ * ```
229
+ *
230
+ * @see {@link Symbol.dispose} For automatic cleanup
231
+ * @see {@link alloc} To allocate
232
+ */
233
+ free() {
234
+ this.native.free();
235
+ this._filter = undefined;
236
+ }
237
+ /**
238
+ * Flush the bitstream filter.
239
+ *
240
+ * Resets the internal state and discards any buffered data.
241
+ * Useful when seeking or switching streams.
242
+ *
243
+ * Direct mapping to av_bsf_flush().
244
+ *
245
+ * @example
246
+ * ```typescript
247
+ * // Flush when seeking
248
+ * ctx.flush();
249
+ * // Now ready to process packets from new position
250
+ * ```
251
+ */
252
+ flush() {
253
+ this.native.flush();
254
+ }
255
+ /**
256
+ * Send a packet to the bitstream filter.
257
+ *
258
+ * Submits a packet for filtering. The filter may buffer the packet
259
+ * internally and require multiple calls to receivePacket() to retrieve
260
+ * all output. Send null to signal end of stream.
261
+ *
262
+ * Direct mapping to av_bsf_send_packet().
263
+ *
264
+ * @param packet - Packet to filter, or null to signal EOF
265
+ *
266
+ * @returns 0 on success, negative AVERROR on error:
267
+ * - AVERROR_EAGAIN: Filter needs output to be consumed first
268
+ * - AVERROR_EOF: Filter has been flushed
269
+ * - AVERROR_EINVAL: Invalid parameters
270
+ * - AVERROR_ENOMEM: Memory allocation failure
271
+ *
272
+ * @example
273
+ * ```typescript
274
+ * import { FFmpegError } from 'node-av';
275
+ * import { AVERROR_EAGAIN } from 'node-av';
276
+ *
277
+ * const ret = await ctx.sendPacket(inputPacket);
278
+ * if (ret === AVERROR_EAGAIN) {
279
+ * // Need to receive packets first
280
+ * const ret2 = await ctx.receivePacket(outputPacket);
281
+ * FFmpegError.throwIfError(ret2, 'receivePacket');
282
+ * } else {
283
+ * FFmpegError.throwIfError(ret, 'sendPacket');
284
+ * }
285
+ *
286
+ * // Send EOF
287
+ * await ctx.sendPacket(null);
288
+ * ```
289
+ *
290
+ * @see {@link receivePacket} To retrieve filtered packets
291
+ */
292
+ async sendPacket(packet) {
293
+ return await this.native.sendPacket(packet ? packet.getNative() : null);
294
+ }
295
+ /**
296
+ * Send a packet to the bitstream filter synchronously.
297
+ * Synchronous version of sendPacket.
298
+ *
299
+ * Submits a packet for filtering. The filter may buffer packets
300
+ * internally and produce output with different timing.
301
+ *
302
+ * Direct mapping to av_bsf_send_packet().
303
+ *
304
+ * @param packet - Packet to filter (null to drain)
305
+ *
306
+ * @returns 0 on success, negative AVERROR on error:
307
+ * - AVERROR_EAGAIN: Need to receive packets first
308
+ * - AVERROR_EOF: Filter has been flushed
309
+ * - AVERROR_EINVAL: Invalid state
310
+ * - AVERROR(ENOMEM): Memory allocation failure
311
+ *
312
+ * @example
313
+ * ```typescript
314
+ * import { FFmpegError } from 'node-av';
315
+ * import { AVERROR_EAGAIN } from 'node-av/constants';
316
+ *
317
+ * // Send packet to filter
318
+ * const ret = ctx.sendPacketSync(inputPacket);
319
+ * if (ret === AVERROR_EAGAIN) {
320
+ * // Need to receive output first
321
+ * const outputPacket = new Packet();
322
+ * ctx.receivePacketSync(outputPacket);
323
+ * } else {
324
+ * FFmpegError.throwIfError(ret, 'sendPacketSync');
325
+ * }
326
+ *
327
+ * // Drain filter
328
+ * ctx.sendPacketSync(null);
329
+ * ```
330
+ *
331
+ * @see {@link sendPacket} For async version
332
+ */
333
+ sendPacketSync(packet) {
334
+ return this.native.sendPacketSync(packet ? packet.getNative() : null);
335
+ }
336
+ /**
337
+ * Receive a filtered packet from the bitstream filter.
338
+ *
339
+ * Retrieves a packet that has been processed by the filter.
340
+ * May need to be called multiple times after each sendPacket().
341
+ *
342
+ * Direct mapping to av_bsf_receive_packet().
343
+ *
344
+ * @param packet - Packet to receive filtered data into
345
+ *
346
+ * @returns 0 on success, negative AVERROR on error:
347
+ * - AVERROR_EAGAIN: Need more input
348
+ * - AVERROR_EOF: No more packets available
349
+ * - AVERROR_EINVAL: Invalid parameters
350
+ *
351
+ * @example
352
+ * ```typescript
353
+ * import { FFmpegError } from 'node-av';
354
+ * import { AVERROR_EAGAIN, AVERROR_EOF } from 'node-av';
355
+ *
356
+ * // Receive all available packets
357
+ * while (true) {
358
+ * const ret = await ctx.receivePacket(outputPacket);
359
+ * if (ret === AVERROR_EAGAIN || ret === AVERROR_EOF) {
360
+ * break;
361
+ * }
362
+ * FFmpegError.throwIfError(ret, 'receivePacket');
363
+ *
364
+ * // Process filtered packet
365
+ * console.log(`Filtered packet size: ${outputPacket.size}`);
366
+ * }
367
+ * ```
368
+ *
369
+ * @see {@link sendPacket} To submit packets for filtering
370
+ */
371
+ async receivePacket(packet) {
372
+ return await this.native.receivePacket(packet.getNative());
373
+ }
374
+ /**
375
+ * Receive a filtered packet from the bitstream filter synchronously.
376
+ * Synchronous version of receivePacket.
377
+ *
378
+ * Retrieves a packet that has been processed by the filter.
379
+ * May need to be called multiple times after each sendPacketSync().
380
+ *
381
+ * Direct mapping to av_bsf_receive_packet().
382
+ *
383
+ * @param packet - Packet to receive filtered data into
384
+ *
385
+ * @returns 0 on success, negative AVERROR on error:
386
+ * - AVERROR_EAGAIN: Need more input
387
+ * - AVERROR_EOF: No more packets available
388
+ *
389
+ * @example
390
+ * ```typescript
391
+ * import { FFmpegError } from 'node-av';
392
+ * import { AVERROR_EAGAIN, AVERROR_EOF } from 'node-av/constants';
393
+ *
394
+ * // Receive filtered packets
395
+ * const outputPacket = new Packet();
396
+ * let ret;
397
+ * while ((ret = ctx.receivePacketSync(outputPacket)) >= 0) {
398
+ * // Process filtered packet
399
+ * console.log(`Filtered packet size: ${outputPacket.size}`);
400
+ * outputPacket.unref();
401
+ * }
402
+ *
403
+ * if (ret !== AVERROR_EAGAIN && ret !== AVERROR_EOF) {
404
+ * FFmpegError.throwIfError(ret, 'receivePacketSync');
405
+ * }
406
+ * ```
407
+ *
408
+ * @see {@link receivePacket} For async version
409
+ */
410
+ receivePacketSync(packet) {
411
+ return this.native.receivePacketSync(packet.getNative());
412
+ }
413
+ /**
414
+ * Get the underlying native BitStreamFilterContext object.
415
+ *
416
+ * @returns The native BitStreamFilterContext binding object
417
+ *
418
+ * @internal
419
+ */
420
+ getNative() {
421
+ return this.native;
422
+ }
423
+ /**
424
+ * Dispose of the bitstream filter context.
425
+ *
426
+ * Implements the Disposable interface for automatic cleanup.
427
+ * Equivalent to calling free().
428
+ *
429
+ * @example
430
+ * ```typescript
431
+ * {
432
+ * using ctx = new BitStreamFilterContext();
433
+ * ctx.alloc(filter);
434
+ * ctx.init();
435
+ * // Use context...
436
+ * } // Automatically freed when leaving scope
437
+ * ```
438
+ */
439
+ [Symbol.dispose]() {
440
+ this.native[Symbol.dispose]();
441
+ }
442
+ }
443
+ //# sourceMappingURL=bitstream-filter-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitstream-filter-context.js","sourceRoot":"","sources":["../../src/lib/bitstream-filter-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ import type { AVCodecID } from '../constants/constants.js';
2
+ import type { NativeBitStreamFilter, NativeWrapper } from './native-types.js';
3
+ /**
4
+ * Bitstream filter descriptor.
5
+ *
6
+ * Provides access to bitstream filter properties and codec compatibility information.
7
+ * Bitstream filters are used to modify or analyze compressed bitstreams without
8
+ * full decoding/encoding. Common uses include H.264/HEVC parameter set extraction,
9
+ * VP9 superframe splitting, and adding/removing codec-specific headers.
10
+ *
11
+ * Direct mapping to FFmpeg's AVBitStreamFilter.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import { BitStreamFilter } from 'node-av';
16
+ *
17
+ * // Get a specific bitstream filter
18
+ * const h264Filter = BitStreamFilter.getByName('h264_mp4toannexb');
19
+ * if (h264Filter) {
20
+ * console.log(`Filter: ${h264Filter.name}`);
21
+ * console.log(`Supported codecs: ${h264Filter.codecIds}`);
22
+ * }
23
+ *
24
+ * // List all available bitstream filters
25
+ * const filters = BitStreamFilter.iterate();
26
+ * for (const filter of filters) {
27
+ * console.log(`- ${filter.name}`);
28
+ * }
29
+ * ```
30
+ *
31
+ * @see [AVBitStreamFilter](https://ffmpeg.org/doxygen/trunk/structAVBitStreamFilter.html) - FFmpeg Doxygen
32
+ */
33
+ export declare class BitStreamFilter implements NativeWrapper<NativeBitStreamFilter> {
34
+ private native;
35
+ /**
36
+ * @param native The native bitstream filter instance
37
+ *
38
+ * @internal
39
+ */
40
+ constructor(native: NativeBitStreamFilter);
41
+ /**
42
+ * Get a bitstream filter by name.
43
+ *
44
+ * Retrieves a specific bitstream filter descriptor by its name.
45
+ * Common filter names include 'h264_mp4toannexb', 'hevc_mp4toannexb',
46
+ * 'extract_extradata', 'vp9_superframe', etc.
47
+ *
48
+ * Direct mapping to av_bsf_get_by_name().
49
+ *
50
+ * @param name - Name of the bitstream filter
51
+ *
52
+ * @returns BitStreamFilter instance if found, null otherwise
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * // Get H.264 stream format converter
57
+ * const h264Filter = BitStreamFilter.getByName('h264_mp4toannexb');
58
+ * if (!h264Filter) {
59
+ * throw new Error('H.264 bitstream filter not available');
60
+ * }
61
+ *
62
+ * // Get HEVC metadata extractor
63
+ * const hevcFilter = BitStreamFilter.getByName('hevc_metadata');
64
+ * ```
65
+ *
66
+ * @see {@link iterate} To list all available filters
67
+ * @see {@link BitStreamFilterContext.alloc} To use the filter
68
+ */
69
+ static getByName(name: string): BitStreamFilter | null;
70
+ /**
71
+ * Iterate over all available bitstream filters.
72
+ *
73
+ * Returns an array of all registered bitstream filters in FFmpeg.
74
+ * Useful for discovering available filters or building filter lists.
75
+ *
76
+ * Direct mapping to av_bsf_iterate().
77
+ *
78
+ * @returns Array of all available bitstream filters
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * import { BitStreamFilter } from 'node-av';
83
+ * import { AV_CODEC_ID_H264 } from 'node-av/constants';
84
+ *
85
+ * // List all available filters
86
+ * const filters = BitStreamFilter.iterate();
87
+ * console.log(`Found ${filters.length} bitstream filters`);
88
+ *
89
+ * // Find filters that support H.264
90
+ * const h264Filters = filters.filter(f =>
91
+ * f.codecIds?.includes(AV_CODEC_ID_H264)
92
+ * );
93
+ * console.log('H.264 compatible filters:');
94
+ * for (const filter of h264Filters) {
95
+ * console.log(`- ${filter.name}`);
96
+ * }
97
+ * ```
98
+ *
99
+ * @see {@link getByName} To get a specific filter
100
+ */
101
+ static iterate(): BitStreamFilter[];
102
+ /**
103
+ * Name of the bitstream filter.
104
+ *
105
+ * Human-readable name identifying the filter (e.g., 'h264_mp4toannexb').
106
+ *
107
+ * Direct mapping to AVBitStreamFilter->name.
108
+ */
109
+ get name(): string | null;
110
+ /**
111
+ * List of supported codec IDs.
112
+ *
113
+ * Array of codec IDs that this filter can process.
114
+ * If null, the filter supports all codecs.
115
+ *
116
+ * Direct mapping to AVBitStreamFilter->codec_ids.
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * import { AV_CODEC_ID_H264, AV_CODEC_ID_HEVC } from 'node-av/constants';
121
+ *
122
+ * const filter = BitStreamFilter.getByName('extract_extradata');
123
+ * if (filter?.codecIds) {
124
+ * const supportsH264 = filter.codecIds.includes(AV_CODEC_ID_H264);
125
+ * const supportsHEVC = filter.codecIds.includes(AV_CODEC_ID_HEVC);
126
+ * console.log(`H.264 support: ${supportsH264}`);
127
+ * console.log(`HEVC support: ${supportsHEVC}`);
128
+ * }
129
+ * ```
130
+ */
131
+ get codecIds(): AVCodecID[] | null;
132
+ /**
133
+ * Get the underlying native BitStreamFilter object.
134
+ *
135
+ * @returns The native BitStreamFilter binding object
136
+ *
137
+ * @internal
138
+ */
139
+ getNative(): NativeBitStreamFilter;
140
+ }