node-av 1.1.0 → 1.3.0

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 (166) hide show
  1. package/README.md +51 -59
  2. package/dist/api/bitstream-filter.d.ts +183 -123
  3. package/dist/api/bitstream-filter.js +185 -127
  4. package/dist/api/bitstream-filter.js.map +1 -1
  5. package/dist/api/decoder.d.ts +282 -130
  6. package/dist/api/decoder.js +290 -142
  7. package/dist/api/decoder.js.map +1 -1
  8. package/dist/api/encoder.d.ts +249 -160
  9. package/dist/api/encoder.js +276 -207
  10. package/dist/api/encoder.js.map +1 -1
  11. package/dist/api/filter-presets.d.ts +1944 -96
  12. package/dist/api/filter-presets.js +2059 -105
  13. package/dist/api/filter-presets.js.map +1 -1
  14. package/dist/api/filter.d.ts +264 -200
  15. package/dist/api/filter.js +269 -231
  16. package/dist/api/filter.js.map +1 -1
  17. package/dist/api/hardware.d.ts +246 -117
  18. package/dist/api/hardware.js +440 -217
  19. package/dist/api/hardware.js.map +1 -1
  20. package/dist/api/index.d.ts +3 -3
  21. package/dist/api/index.js +1 -1
  22. package/dist/api/index.js.map +1 -1
  23. package/dist/api/io-stream.d.ts +65 -55
  24. package/dist/api/io-stream.js +43 -40
  25. package/dist/api/io-stream.js.map +1 -1
  26. package/dist/api/media-input.d.ts +242 -139
  27. package/dist/api/media-input.js +205 -103
  28. package/dist/api/media-input.js.map +1 -1
  29. package/dist/api/media-output.d.ts +208 -126
  30. package/dist/api/media-output.js +212 -126
  31. package/dist/api/media-output.js.map +1 -1
  32. package/dist/api/pipeline.d.ts +361 -38
  33. package/dist/api/pipeline.js +255 -14
  34. package/dist/api/pipeline.js.map +1 -1
  35. package/dist/api/types.d.ts +26 -187
  36. package/dist/api/utilities/audio-sample.d.ts +0 -8
  37. package/dist/api/utilities/audio-sample.js +0 -8
  38. package/dist/api/utilities/audio-sample.js.map +1 -1
  39. package/dist/api/utilities/channel-layout.d.ts +0 -8
  40. package/dist/api/utilities/channel-layout.js +0 -8
  41. package/dist/api/utilities/channel-layout.js.map +1 -1
  42. package/dist/api/utilities/image.d.ts +0 -8
  43. package/dist/api/utilities/image.js +0 -8
  44. package/dist/api/utilities/image.js.map +1 -1
  45. package/dist/api/utilities/index.d.ts +3 -3
  46. package/dist/api/utilities/index.js +3 -3
  47. package/dist/api/utilities/index.js.map +1 -1
  48. package/dist/api/utilities/media-type.d.ts +1 -9
  49. package/dist/api/utilities/media-type.js +1 -9
  50. package/dist/api/utilities/media-type.js.map +1 -1
  51. package/dist/api/utilities/pixel-format.d.ts +1 -9
  52. package/dist/api/utilities/pixel-format.js +1 -9
  53. package/dist/api/utilities/pixel-format.js.map +1 -1
  54. package/dist/api/utilities/sample-format.d.ts +1 -9
  55. package/dist/api/utilities/sample-format.js +1 -9
  56. package/dist/api/utilities/sample-format.js.map +1 -1
  57. package/dist/api/utilities/streaming.d.ts +0 -8
  58. package/dist/api/utilities/streaming.js +0 -8
  59. package/dist/api/utilities/streaming.js.map +1 -1
  60. package/dist/api/utilities/timestamp.d.ts +0 -8
  61. package/dist/api/utilities/timestamp.js +0 -8
  62. package/dist/api/utilities/timestamp.js.map +1 -1
  63. package/dist/api/utils.d.ts +1 -2
  64. package/dist/api/utils.js +11 -0
  65. package/dist/api/utils.js.map +1 -1
  66. package/dist/constants/constants.d.ts +1 -1
  67. package/dist/constants/constants.js +2 -0
  68. package/dist/constants/constants.js.map +1 -1
  69. package/dist/lib/audio-fifo.d.ts +127 -170
  70. package/dist/lib/audio-fifo.js +130 -173
  71. package/dist/lib/audio-fifo.js.map +1 -1
  72. package/dist/lib/binding.d.ts +1 -0
  73. package/dist/lib/binding.js +7 -0
  74. package/dist/lib/binding.js.map +1 -1
  75. package/dist/lib/bitstream-filter-context.d.ts +139 -184
  76. package/dist/lib/bitstream-filter-context.js +139 -188
  77. package/dist/lib/bitstream-filter-context.js.map +1 -1
  78. package/dist/lib/bitstream-filter.d.ts +68 -54
  79. package/dist/lib/bitstream-filter.js +68 -54
  80. package/dist/lib/bitstream-filter.js.map +1 -1
  81. package/dist/lib/codec-context.d.ts +316 -380
  82. package/dist/lib/codec-context.js +316 -381
  83. package/dist/lib/codec-context.js.map +1 -1
  84. package/dist/lib/codec-parameters.d.ts +160 -170
  85. package/dist/lib/codec-parameters.js +162 -172
  86. package/dist/lib/codec-parameters.js.map +1 -1
  87. package/dist/lib/codec-parser.d.ts +91 -104
  88. package/dist/lib/codec-parser.js +92 -103
  89. package/dist/lib/codec-parser.js.map +1 -1
  90. package/dist/lib/codec.d.ts +266 -283
  91. package/dist/lib/codec.js +270 -287
  92. package/dist/lib/codec.js.map +1 -1
  93. package/dist/lib/dictionary.d.ts +149 -203
  94. package/dist/lib/dictionary.js +158 -212
  95. package/dist/lib/dictionary.js.map +1 -1
  96. package/dist/lib/error.d.ts +96 -130
  97. package/dist/lib/error.js +98 -128
  98. package/dist/lib/error.js.map +1 -1
  99. package/dist/lib/filter-context.d.ts +284 -218
  100. package/dist/lib/filter-context.js +290 -227
  101. package/dist/lib/filter-context.js.map +1 -1
  102. package/dist/lib/filter-graph.d.ts +251 -292
  103. package/dist/lib/filter-graph.js +253 -294
  104. package/dist/lib/filter-graph.js.map +1 -1
  105. package/dist/lib/filter-inout.d.ts +87 -95
  106. package/dist/lib/filter-inout.js +87 -95
  107. package/dist/lib/filter-inout.js.map +1 -1
  108. package/dist/lib/filter.d.ts +93 -111
  109. package/dist/lib/filter.js +93 -111
  110. package/dist/lib/filter.js.map +1 -1
  111. package/dist/lib/format-context.d.ts +320 -428
  112. package/dist/lib/format-context.js +313 -385
  113. package/dist/lib/format-context.js.map +1 -1
  114. package/dist/lib/frame.d.ts +262 -405
  115. package/dist/lib/frame.js +263 -408
  116. package/dist/lib/frame.js.map +1 -1
  117. package/dist/lib/hardware-device-context.d.ts +149 -203
  118. package/dist/lib/hardware-device-context.js +149 -203
  119. package/dist/lib/hardware-device-context.js.map +1 -1
  120. package/dist/lib/hardware-frames-context.d.ts +170 -180
  121. package/dist/lib/hardware-frames-context.js +171 -181
  122. package/dist/lib/hardware-frames-context.js.map +1 -1
  123. package/dist/lib/index.d.ts +3 -2
  124. package/dist/lib/index.js +3 -3
  125. package/dist/lib/index.js.map +1 -1
  126. package/dist/lib/input-format.d.ts +89 -117
  127. package/dist/lib/input-format.js +89 -117
  128. package/dist/lib/input-format.js.map +1 -1
  129. package/dist/lib/io-context.d.ts +209 -241
  130. package/dist/lib/io-context.js +220 -252
  131. package/dist/lib/io-context.js.map +1 -1
  132. package/dist/lib/log.d.ts +85 -119
  133. package/dist/lib/log.js +85 -122
  134. package/dist/lib/log.js.map +1 -1
  135. package/dist/lib/native-types.d.ts +118 -106
  136. package/dist/lib/native-types.js +0 -7
  137. package/dist/lib/native-types.js.map +1 -1
  138. package/dist/lib/option.d.ts +437 -218
  139. package/dist/lib/option.js +462 -226
  140. package/dist/lib/option.js.map +1 -1
  141. package/dist/lib/output-format.d.ts +77 -101
  142. package/dist/lib/output-format.js +77 -101
  143. package/dist/lib/output-format.js.map +1 -1
  144. package/dist/lib/packet.d.ts +172 -240
  145. package/dist/lib/packet.js +172 -241
  146. package/dist/lib/packet.js.map +1 -1
  147. package/dist/lib/rational.d.ts +0 -2
  148. package/dist/lib/rational.js +0 -2
  149. package/dist/lib/rational.js.map +1 -1
  150. package/dist/lib/software-resample-context.d.ts +241 -325
  151. package/dist/lib/software-resample-context.js +242 -326
  152. package/dist/lib/software-resample-context.js.map +1 -1
  153. package/dist/lib/software-scale-context.d.ts +129 -173
  154. package/dist/lib/software-scale-context.js +131 -175
  155. package/dist/lib/software-scale-context.js.map +1 -1
  156. package/dist/lib/stream.d.ts +87 -197
  157. package/dist/lib/stream.js +87 -197
  158. package/dist/lib/stream.js.map +1 -1
  159. package/dist/lib/utilities.d.ts +435 -181
  160. package/dist/lib/utilities.js +438 -182
  161. package/dist/lib/utilities.js.map +1 -1
  162. package/install/check.js +0 -1
  163. package/install/ffmpeg.js +0 -11
  164. package/package.json +25 -18
  165. package/release_notes.md +24 -59
  166. package/CHANGELOG.md +0 -8
@@ -1,58 +1,42 @@
1
- /**
2
- * BitStreamFilterAPI - High-level wrapper for bitstream filtering
3
- *
4
- * Simplifies FFmpeg's bitstream filter API with automatic initialization,
5
- * parameter configuration, and packet processing.
6
- *
7
- * Handles filter context lifecycle, packet buffering, and flushing.
8
- * Useful for format conversion, metadata extraction, and stream modifications.
9
- *
10
- * @module api/bitstream-filter
11
- */
12
- import { AVERROR_EOF } from '../constants/constants.js';
13
- import { AVERROR_EAGAIN, BitStreamFilter, BitStreamFilterContext, FFmpegError, Packet } from '../lib/index.js';
1
+ import { AVERROR_EAGAIN, AVERROR_EOF } from '../constants/constants.js';
2
+ import { BitStreamFilter, BitStreamFilterContext, FFmpegError, Packet } from '../lib/index.js';
14
3
  /**
15
4
  * High-level bitstream filter for packet processing.
16
5
  *
17
- * Handles filter initialization, packet processing, and cleanup.
18
- * Designed for simple, efficient packet filtering workflows.
19
- *
20
- * Manages filter context lifecycle and provides automatic cleanup.
21
- * Supports packet-by-packet and stream processing modes.
6
+ * Provides simplified interface for applying bitstream filters to packets.
7
+ * Handles filter initialization, packet processing, and memory management.
8
+ * Supports filters like h264_mp4toannexb, hevc_mp4toannexb, aac_adtstoasc.
9
+ * Essential for format conversion and stream compatibility in transcoding pipelines.
22
10
  *
23
11
  * @example
24
12
  * ```typescript
25
- * // Create filter for H.264 stream
26
- * const media = await MediaInput.open('video.mp4');
27
- * const stream = media.video();
28
- * const bsf = await BitStreamFilterAPI.create('h264_mp4toannexb', stream);
13
+ * import { BitStreamFilterAPI } from 'node-av/api';
29
14
  *
30
- * // Process packets
31
- * for await (const packet of media.packets()) {
32
- * if (packet.streamIndex === stream.index) {
33
- * const filtered = await bsf.process(packet);
34
- * for (const outPacket of filtered) {
35
- * // Write to output or process further
36
- * await output.writePacket(outPacket);
37
- * }
38
- * }
39
- * }
15
+ * // Create H.264 Annex B converter
16
+ * const filter = BitStreamFilterAPI.create('h264_mp4toannexb', stream);
40
17
  *
41
- * // Flush and cleanup
42
- * const remaining = await bsf.flush();
43
- * bsf.dispose();
18
+ * // Process packet
19
+ * const outputPackets = await filter.process(inputPacket);
20
+ * for (const packet of outputPackets) {
21
+ * await output.writePacket(packet);
22
+ * packet.free();
23
+ * }
44
24
  * ```
45
25
  *
46
26
  * @example
47
27
  * ```typescript
48
28
  * // Process packet stream
49
- * const bsf = await BitStreamFilterAPI.create('extract_extradata', stream);
29
+ * const filter = BitStreamFilterAPI.create('hevc_mp4toannexb', videoStream);
50
30
  *
51
- * for await (const filtered of bsf.packets(media.packets())) {
52
- * // Filtered packets are automatically processed
53
- * await output.writePacket(filtered);
31
+ * for await (const packet of filter.packets(input.packets())) {
32
+ * await output.writePacket(packet);
33
+ * packet.free();
54
34
  * }
55
35
  * ```
36
+ *
37
+ * @see {@link BitStreamFilter} For available filters
38
+ * @see {@link BitStreamFilterContext} For low-level API
39
+ * @see {@link MediaOutput} For writing filtered packets
56
40
  */
57
41
  export class BitStreamFilterAPI {
58
42
  ctx;
@@ -60,11 +44,10 @@ export class BitStreamFilterAPI {
60
44
  stream;
61
45
  isDisposed = false;
62
46
  /**
63
- * Private constructor - use BitStreamFilterAPI.create() instead.
64
- *
65
- * @param filter - The bitstream filter
66
- * @param ctx - Initialized filter context
67
- * @param stream - The stream this filter is for
47
+ * @param filter - Bitstream filter instance
48
+ * @param ctx - Filter context
49
+ * @param stream - Associated stream
50
+ * @internal
68
51
  */
69
52
  constructor(filter, ctx, stream) {
70
53
  this.filter = filter;
@@ -72,26 +55,42 @@ export class BitStreamFilterAPI {
72
55
  this.stream = stream;
73
56
  }
74
57
  /**
75
- * Create a bitstream filter for a specific stream.
58
+ * Create a bitstream filter for a stream.
76
59
  *
77
- * Factory method that handles filter discovery, context setup,
78
- * and initialization.
60
+ * Initializes filter with stream codec parameters.
61
+ * Configures time base and prepares for packet processing.
79
62
  *
80
- * @param filterName - Name of the bitstream filter (e.g., 'h264_mp4toannexb')
81
- * @param stream - Stream to filter
63
+ * Direct mapping to av_bsf_get_by_name() and av_bsf_alloc().
82
64
  *
83
- * @returns Promise resolving to configured BitStreamFilterAPI
65
+ * @param filterName - Name of the bitstream filter
66
+ * @param stream - Stream to apply filter to
67
+ * @returns Configured bitstream filter
84
68
  *
85
- * @throws {Error} If filter unavailable or initialization fails
69
+ * @throws {Error} If filter not found or initialization fails
70
+ *
71
+ * @throws {FFmpegError} If allocation or initialization fails
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * // H.264 MP4 to Annex B conversion
76
+ * const filter = BitStreamFilterAPI.create('h264_mp4toannexb', videoStream);
77
+ * ```
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * // AAC ADTS to ASC conversion
82
+ * const filter = BitStreamFilterAPI.create('aac_adtstoasc', audioStream);
83
+ * ```
86
84
  *
87
85
  * @example
88
86
  * ```typescript
89
- * const media = await MediaInput.open('video.mp4');
90
- * const stream = media.video();
91
- * const bsf = await BitStreamFilterAPI.create('h264_mp4toannexb', stream);
87
+ * // Remove metadata
88
+ * const filter = BitStreamFilterAPI.create('filter_units', stream);
92
89
  * ```
90
+ *
91
+ * @see {@link BitStreamFilter.getByName} For filter discovery
93
92
  */
94
- static async create(filterName, stream) {
93
+ static create(filterName, stream) {
95
94
  if (!stream) {
96
95
  throw new Error('Stream is required');
97
96
  }
@@ -124,28 +123,27 @@ export class BitStreamFilterAPI {
124
123
  }
125
124
  }
126
125
  /**
127
- * Get the filter name.
126
+ * Get filter name.
128
127
  *
129
- * @returns The name of the bitstream filter
128
+ * @example
129
+ * ```typescript
130
+ * console.log(`Using filter: ${filter.name}`);
131
+ * ```
130
132
  */
131
133
  get name() {
132
134
  return this.filter.name ?? 'unknown';
133
135
  }
134
- /**
135
- * Get the associated stream.
136
- *
137
- * @returns The stream this filter was created for
138
- */
139
- get streamInfo() {
140
- return this.stream;
141
- }
142
136
  /**
143
137
  * Get output codec parameters.
144
138
  *
145
- * Returns the output codec parameters after filter initialization.
146
- * These may differ from input parameters depending on the filter.
139
+ * Parameters after filter processing.
140
+ * May differ from input parameters.
147
141
  *
148
- * @returns Output codec parameters, or null if not available
142
+ * @example
143
+ * ```typescript
144
+ * const outputParams = filter.outputCodecParameters;
145
+ * console.log(`Output codec: ${outputParams?.codecId}`);
146
+ * ```
149
147
  */
150
148
  get outputCodecParameters() {
151
149
  return this.ctx.outputCodecParameters;
@@ -153,33 +151,50 @@ export class BitStreamFilterAPI {
153
151
  /**
154
152
  * Get output time base.
155
153
  *
156
- * Returns the output time base after filter initialization.
154
+ * Time base after filter processing.
157
155
  *
158
- * @returns Output time base, or null if not available
156
+ * @example
157
+ * ```typescript
158
+ * const tb = filter.outputTimeBase;
159
+ * console.log(`Output timebase: ${tb?.num}/${tb?.den}`);
160
+ * ```
159
161
  */
160
162
  get outputTimeBase() {
161
163
  return this.ctx.outputTimeBase;
162
164
  }
163
165
  /**
164
- * Process a single packet through the filter.
166
+ * Process a packet through the filter.
167
+ *
168
+ * Applies bitstream filter to packet.
169
+ * May produce zero, one, or multiple output packets.
170
+ * Pass null to signal end-of-stream.
165
171
  *
166
- * Sends a packet to the filter and retrieves all output packets.
167
- * One input packet may produce zero, one, or multiple output packets.
172
+ * Direct mapping to av_bsf_send_packet() and av_bsf_receive_packet().
168
173
  *
169
- * @param packet - Packet to filter, or null to signal EOF
174
+ * @param packet - Packet to filter or null for EOF
175
+ * @returns Array of filtered packets
170
176
  *
171
- * @returns Array of filtered packets (may be empty)
177
+ * @throws {Error} If filter is disposed
178
+ *
179
+ * @throws {FFmpegError} If filtering fails
172
180
  *
173
181
  * @example
174
182
  * ```typescript
175
- * const inputPacket = await media.readPacket();
176
- * const filtered = await bsf.process(inputPacket);
177
- *
178
- * for (const packet of filtered) {
179
- * console.log(`Filtered packet: size=${packet.size}`);
180
- * await output.writePacket(packet);
183
+ * const outputPackets = await filter.process(inputPacket);
184
+ * for (const packet of outputPackets) {
185
+ * console.log(`Filtered packet: pts=${packet.pts}`);
186
+ * packet.free();
181
187
  * }
182
188
  * ```
189
+ *
190
+ * @example
191
+ * ```typescript
192
+ * // Flush filter
193
+ * const remaining = await filter.process(null);
194
+ * ```
195
+ *
196
+ * @see {@link flush} For explicit flushing
197
+ * @see {@link packets} For stream processing
183
198
  */
184
199
  async process(packet) {
185
200
  if (this.isDisposed) {
@@ -209,32 +224,41 @@ export class BitStreamFilterAPI {
209
224
  return outputPackets;
210
225
  }
211
226
  /**
212
- * Process a stream of packets through the filter.
213
- *
214
- * Async generator that processes packets lazily and yields filtered results.
215
- * Automatically handles EOF and cleanup.
227
+ * Process packet stream through filter.
216
228
  *
217
- * @param packets - Async iterable of packets to filter
229
+ * High-level async generator for filtering packet streams.
230
+ * Automatically handles flushing at end of stream.
231
+ * Yields filtered packets ready for output.
218
232
  *
233
+ * @param packets - Async iterable of packets
219
234
  * @yields Filtered packets
235
+ * @throws {Error} If filter is disposed
236
+ *
237
+ * @throws {FFmpegError} If filtering fails
220
238
  *
221
239
  * @example
222
240
  * ```typescript
223
- * const bsf = await BitStreamFilterAPI.create('h264_mp4toannexb', stream);
224
- *
225
- * // Filter only video packets
226
- * async function* videoPackets() {
227
- * for await (const packet of media.packets()) {
228
- * if (packet.streamIndex === stream.index) {
229
- * yield packet;
230
- * }
231
- * }
241
+ * // Filter entire stream
242
+ * for await (const packet of filter.packets(input.packets())) {
243
+ * await output.writePacket(packet);
244
+ * packet.free();
232
245
  * }
246
+ * ```
233
247
  *
234
- * for await (const filtered of bsf.packets(videoPackets())) {
235
- * await output.writePacket(filtered);
248
+ * @example
249
+ * ```typescript
250
+ * // Chain with decoder
251
+ * const decoder = await Decoder.create(stream);
252
+ * const filter = BitStreamFilterAPI.create('h264_mp4toannexb', stream);
253
+ *
254
+ * for await (const frame of decoder.frames(filter.packets(input.packets()))) {
255
+ * // Process frames
256
+ * frame.free();
236
257
  * }
237
258
  * ```
259
+ *
260
+ * @see {@link process} For single packet filtering
261
+ * @see {@link flush} For end-of-stream handling
238
262
  */
239
263
  async *packets(packets) {
240
264
  if (this.isDisposed) {
@@ -261,21 +285,28 @@ export class BitStreamFilterAPI {
261
285
  }
262
286
  }
263
287
  /**
264
- * Flush the filter and retrieve remaining packets.
288
+ * Flush filter and get remaining packets.
265
289
  *
266
- * Sends EOF to the filter and retrieves any buffered packets.
267
- * Should be called when all input packets have been processed.
290
+ * Signals end-of-stream and retrieves buffered packets.
291
+ * Also resets internal filter state.
268
292
  *
269
- * @returns Array of remaining packets (may be empty)
293
+ * Direct mapping to av_bsf_flush().
294
+ *
295
+ * @returns Array of remaining packets
296
+ *
297
+ * @throws {Error} If filter is disposed
270
298
  *
271
299
  * @example
272
300
  * ```typescript
273
- * // After processing all packets
274
- * const remaining = await bsf.flush();
301
+ * const remaining = await filter.flush();
275
302
  * for (const packet of remaining) {
276
303
  * await output.writePacket(packet);
304
+ * packet.free();
277
305
  * }
278
306
  * ```
307
+ *
308
+ * @see {@link flushPackets} For async iteration
309
+ * @see {@link reset} For state reset only
279
310
  */
280
311
  async flush() {
281
312
  if (this.isDisposed) {
@@ -288,21 +319,23 @@ export class BitStreamFilterAPI {
288
319
  return filtered;
289
320
  }
290
321
  /**
291
- * Flush the filter and yield remaining packets.
322
+ * Flush filter as async generator.
292
323
  *
293
- * Async generator that sends EOF to the filter and yields any buffered packets.
294
- * Provides a convenient way to process all remaining packets after input is complete.
324
+ * Convenient async iteration over remaining packets.
325
+ * Combines flush and iteration.
295
326
  *
296
- * @yields Remaining packets from the filter
327
+ * @yields Remaining packets
328
+ * @throws {Error} If filter is disposed
297
329
  *
298
330
  * @example
299
331
  * ```typescript
300
- * // Process all remaining packets with generator
301
- * for await (const packet of bsf.flushPackets()) {
332
+ * for await (const packet of filter.flushPackets()) {
302
333
  * await output.writePacket(packet);
303
- * using _ = packet; // Auto cleanup
334
+ * packet.free();
304
335
  * }
305
336
  * ```
337
+ *
338
+ * @see {@link flush} For array return
306
339
  */
307
340
  async *flushPackets() {
308
341
  if (this.isDisposed) {
@@ -314,25 +347,38 @@ export class BitStreamFilterAPI {
314
347
  }
315
348
  }
316
349
  /**
317
- * Get the stream this filter was created for.
318
- * Used for determining stream configuration in pipeline.
350
+ * Get associated stream.
351
+ *
352
+ * Returns the stream this filter was created for.
353
+ *
354
+ * @returns Associated stream
355
+ *
356
+ * @example
357
+ * ```typescript
358
+ * const stream = filter.getStream();
359
+ * console.log(`Filtering stream ${stream.index}`);
360
+ * ```
319
361
  */
320
362
  getStream() {
321
363
  return this.stream;
322
364
  }
323
365
  /**
324
- * Reset the filter state.
366
+ * Reset filter state.
367
+ *
368
+ * Clears internal buffers and resets filter.
369
+ * Does not dispose resources.
325
370
  *
326
- * Clears internal buffers and resets the filter to initial state.
327
- * Useful when seeking or switching between streams.
371
+ * Direct mapping to av_bsf_flush().
372
+ *
373
+ * @throws {Error} If filter is disposed
328
374
  *
329
375
  * @example
330
376
  * ```typescript
331
- * // When seeking in the input
332
- * await media.seek(timestamp);
333
- * bsf.reset(); // Clear filter state
334
- * // Continue processing from new position
377
+ * // Reset for new segment
378
+ * filter.reset();
335
379
  * ```
380
+ *
381
+ * @see {@link flush} For reset with packet retrieval
336
382
  */
337
383
  reset() {
338
384
  if (this.isDisposed) {
@@ -341,18 +387,17 @@ export class BitStreamFilterAPI {
341
387
  this.ctx.flush();
342
388
  }
343
389
  /**
344
- * Dispose of the filter resources.
390
+ * Dispose of filter and free resources.
345
391
  *
346
- * Automatically called when using the `using` statement.
347
- * Frees all associated FFmpeg resources.
392
+ * Releases filter context and marks as disposed.
393
+ * Safe to call multiple times.
348
394
  *
349
395
  * @example
350
396
  * ```typescript
351
- * {
352
- * using bsf = await BitStreamFilterAPI.create('h264_mp4toannexb', stream);
353
- * // ... use filter
354
- * } // Automatically disposed when leaving scope
397
+ * filter.dispose();
355
398
  * ```
399
+ *
400
+ * @see {@link Symbol.dispose} For automatic cleanup
356
401
  */
357
402
  dispose() {
358
403
  if (!this.isDisposed) {
@@ -361,7 +406,20 @@ export class BitStreamFilterAPI {
361
406
  }
362
407
  }
363
408
  /**
364
- * Symbol.dispose implementation for using statement.
409
+ * Dispose of filter.
410
+ *
411
+ * Implements Disposable interface for automatic cleanup.
412
+ * Equivalent to calling dispose().
413
+ *
414
+ * @example
415
+ * ```typescript
416
+ * {
417
+ * using filter = BitStreamFilterAPI.create('h264_mp4toannexb', stream);
418
+ * // Use filter...
419
+ * } // Automatically disposed
420
+ * ```
421
+ *
422
+ * @see {@link dispose} For manual cleanup
365
423
  */
366
424
  [Symbol.dispose]() {
367
425
  this.dispose();
@@ -1 +1 @@
1
- {"version":3,"file":"bitstream-filter.js","sourceRoot":"","sources":["../../src/api/bitstream-filter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bitstream-filter.js","sourceRoot":"","sources":["../../src/api/bitstream-filter.ts"],"names":[],"mappings":"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"}