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