node-av 1.1.0 → 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 (134) hide show
  1. package/README.md +51 -38
  2. package/dist/api/bitstream-filter.d.ts +180 -123
  3. package/dist/api/bitstream-filter.js +180 -125
  4. package/dist/api/bitstream-filter.js.map +1 -1
  5. package/dist/api/decoder.d.ts +279 -132
  6. package/dist/api/decoder.js +285 -142
  7. package/dist/api/decoder.js.map +1 -1
  8. package/dist/api/encoder.d.ts +246 -162
  9. package/dist/api/encoder.js +272 -208
  10. package/dist/api/encoder.js.map +1 -1
  11. package/dist/api/filter-presets.d.ts +690 -94
  12. package/dist/api/filter-presets.js +686 -102
  13. package/dist/api/filter-presets.js.map +1 -1
  14. package/dist/api/filter.d.ts +249 -213
  15. package/dist/api/filter.js +252 -242
  16. package/dist/api/filter.js.map +1 -1
  17. package/dist/api/hardware.d.ts +224 -117
  18. package/dist/api/hardware.js +380 -214
  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 -61
  24. package/dist/api/io-stream.js +43 -46
  25. package/dist/api/io-stream.js.map +1 -1
  26. package/dist/api/media-input.d.ts +242 -140
  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 +206 -128
  30. package/dist/api/media-output.js +210 -128
  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 +21 -187
  36. package/dist/api/utils.d.ts +1 -2
  37. package/dist/api/utils.js +9 -0
  38. package/dist/api/utils.js.map +1 -1
  39. package/dist/lib/audio-fifo.d.ts +127 -170
  40. package/dist/lib/audio-fifo.js +130 -173
  41. package/dist/lib/audio-fifo.js.map +1 -1
  42. package/dist/lib/binding.js +5 -0
  43. package/dist/lib/binding.js.map +1 -1
  44. package/dist/lib/bitstream-filter-context.d.ts +139 -184
  45. package/dist/lib/bitstream-filter-context.js +139 -188
  46. package/dist/lib/bitstream-filter-context.js.map +1 -1
  47. package/dist/lib/bitstream-filter.d.ts +68 -54
  48. package/dist/lib/bitstream-filter.js +68 -54
  49. package/dist/lib/bitstream-filter.js.map +1 -1
  50. package/dist/lib/codec-context.d.ts +316 -380
  51. package/dist/lib/codec-context.js +316 -381
  52. package/dist/lib/codec-context.js.map +1 -1
  53. package/dist/lib/codec-parameters.d.ts +160 -170
  54. package/dist/lib/codec-parameters.js +162 -172
  55. package/dist/lib/codec-parameters.js.map +1 -1
  56. package/dist/lib/codec-parser.d.ts +91 -104
  57. package/dist/lib/codec-parser.js +92 -103
  58. package/dist/lib/codec-parser.js.map +1 -1
  59. package/dist/lib/codec.d.ts +264 -281
  60. package/dist/lib/codec.js +268 -285
  61. package/dist/lib/codec.js.map +1 -1
  62. package/dist/lib/dictionary.d.ts +149 -203
  63. package/dist/lib/dictionary.js +158 -212
  64. package/dist/lib/dictionary.js.map +1 -1
  65. package/dist/lib/error.d.ts +96 -130
  66. package/dist/lib/error.js +98 -128
  67. package/dist/lib/error.js.map +1 -1
  68. package/dist/lib/filter-context.d.ts +284 -218
  69. package/dist/lib/filter-context.js +290 -227
  70. package/dist/lib/filter-context.js.map +1 -1
  71. package/dist/lib/filter-graph.d.ts +251 -292
  72. package/dist/lib/filter-graph.js +253 -294
  73. package/dist/lib/filter-graph.js.map +1 -1
  74. package/dist/lib/filter-inout.d.ts +87 -95
  75. package/dist/lib/filter-inout.js +87 -95
  76. package/dist/lib/filter-inout.js.map +1 -1
  77. package/dist/lib/filter.d.ts +93 -111
  78. package/dist/lib/filter.js +93 -111
  79. package/dist/lib/filter.js.map +1 -1
  80. package/dist/lib/format-context.d.ts +320 -428
  81. package/dist/lib/format-context.js +313 -385
  82. package/dist/lib/format-context.js.map +1 -1
  83. package/dist/lib/frame.d.ts +262 -405
  84. package/dist/lib/frame.js +263 -408
  85. package/dist/lib/frame.js.map +1 -1
  86. package/dist/lib/hardware-device-context.d.ts +149 -203
  87. package/dist/lib/hardware-device-context.js +149 -203
  88. package/dist/lib/hardware-device-context.js.map +1 -1
  89. package/dist/lib/hardware-frames-context.d.ts +170 -180
  90. package/dist/lib/hardware-frames-context.js +171 -181
  91. package/dist/lib/hardware-frames-context.js.map +1 -1
  92. package/dist/lib/index.d.ts +2 -1
  93. package/dist/lib/index.js +2 -2
  94. package/dist/lib/index.js.map +1 -1
  95. package/dist/lib/input-format.d.ts +89 -117
  96. package/dist/lib/input-format.js +89 -117
  97. package/dist/lib/input-format.js.map +1 -1
  98. package/dist/lib/io-context.d.ts +209 -241
  99. package/dist/lib/io-context.js +220 -252
  100. package/dist/lib/io-context.js.map +1 -1
  101. package/dist/lib/log.d.ts +85 -119
  102. package/dist/lib/log.js +85 -122
  103. package/dist/lib/log.js.map +1 -1
  104. package/dist/lib/native-types.d.ts +117 -106
  105. package/dist/lib/native-types.js +0 -7
  106. package/dist/lib/native-types.js.map +1 -1
  107. package/dist/lib/option.d.ts +284 -241
  108. package/dist/lib/option.js +309 -249
  109. package/dist/lib/option.js.map +1 -1
  110. package/dist/lib/output-format.d.ts +77 -101
  111. package/dist/lib/output-format.js +77 -101
  112. package/dist/lib/output-format.js.map +1 -1
  113. package/dist/lib/packet.d.ts +172 -240
  114. package/dist/lib/packet.js +172 -241
  115. package/dist/lib/packet.js.map +1 -1
  116. package/dist/lib/rational.d.ts +0 -2
  117. package/dist/lib/rational.js +0 -2
  118. package/dist/lib/rational.js.map +1 -1
  119. package/dist/lib/software-resample-context.d.ts +241 -325
  120. package/dist/lib/software-resample-context.js +242 -326
  121. package/dist/lib/software-resample-context.js.map +1 -1
  122. package/dist/lib/software-scale-context.d.ts +129 -173
  123. package/dist/lib/software-scale-context.js +131 -175
  124. package/dist/lib/software-scale-context.js.map +1 -1
  125. package/dist/lib/stream.d.ts +87 -197
  126. package/dist/lib/stream.js +87 -197
  127. package/dist/lib/stream.js.map +1 -1
  128. package/dist/lib/utilities.d.ts +372 -181
  129. package/dist/lib/utilities.js +373 -182
  130. package/dist/lib/utilities.js.map +1 -1
  131. package/install/check.js +0 -1
  132. package/package.json +21 -12
  133. package/release_notes.md +43 -59
  134. 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
1
  import { AVERROR_EOF } from '../constants/constants.js';
13
2
  import { AVERROR_EAGAIN, 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,41 @@ 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.
59
+ *
60
+ * Initializes filter with stream codec parameters.
61
+ * Configures time base and prepares for packet processing.
76
62
  *
77
- * Factory method that handles filter discovery, context setup,
78
- * and initialization.
63
+ * Direct mapping to av_bsf_get_by_name() and av_bsf_alloc().
79
64
  *
80
- * @param filterName - Name of the bitstream filter (e.g., 'h264_mp4toannexb')
81
- * @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
82
68
  *
83
- * @returns Promise resolving to configured BitStreamFilterAPI
69
+ * @throws {Error} If filter not found or initialization fails
70
+ * @throws {FFmpegError} If allocation or initialization fails
84
71
  *
85
- * @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
+ * ```
86
83
  *
87
84
  * @example
88
85
  * ```typescript
89
- * const media = await MediaInput.open('video.mp4');
90
- * const stream = media.video();
91
- * const bsf = await BitStreamFilterAPI.create('h264_mp4toannexb', stream);
86
+ * // Remove metadata
87
+ * const filter = BitStreamFilterAPI.create('filter_units', stream);
92
88
  * ```
89
+ *
90
+ * @see {@link BitStreamFilter.getByName} For filter discovery
93
91
  */
94
- static async create(filterName, stream) {
92
+ static create(filterName, stream) {
95
93
  if (!stream) {
96
94
  throw new Error('Stream is required');
97
95
  }
@@ -124,28 +122,27 @@ export class BitStreamFilterAPI {
124
122
  }
125
123
  }
126
124
  /**
127
- * Get the filter name.
125
+ * Get filter name.
128
126
  *
129
- * @returns The name of the bitstream filter
127
+ * @example
128
+ * ```typescript
129
+ * console.log(`Using filter: ${filter.name}`);
130
+ * ```
130
131
  */
131
132
  get name() {
132
133
  return this.filter.name ?? 'unknown';
133
134
  }
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
135
  /**
143
136
  * Get output codec parameters.
144
137
  *
145
- * Returns the output codec parameters after filter initialization.
146
- * These may differ from input parameters depending on the filter.
138
+ * Parameters after filter processing.
139
+ * May differ from input parameters.
147
140
  *
148
- * @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
+ * ```
149
146
  */
150
147
  get outputCodecParameters() {
151
148
  return this.ctx.outputCodecParameters;
@@ -153,33 +150,49 @@ export class BitStreamFilterAPI {
153
150
  /**
154
151
  * Get output time base.
155
152
  *
156
- * Returns the output time base after filter initialization.
153
+ * Time base after filter processing.
157
154
  *
158
- * @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
+ * ```
159
160
  */
160
161
  get outputTimeBase() {
161
162
  return this.ctx.outputTimeBase;
162
163
  }
163
164
  /**
164
- * Process a single packet through the filter.
165
+ * Process a packet through the filter.
165
166
  *
166
- * Sends a packet to the filter and retrieves all output packets.
167
- * 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.
168
170
  *
169
- * @param packet - Packet to filter, or null to signal EOF
171
+ * Direct mapping to av_bsf_send_packet() and av_bsf_receive_packet().
170
172
  *
171
- * @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
172
178
  *
173
179
  * @example
174
180
  * ```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);
181
+ * const outputPackets = await filter.process(inputPacket);
182
+ * for (const packet of outputPackets) {
183
+ * console.log(`Filtered packet: pts=${packet.pts}`);
184
+ * packet.free();
181
185
  * }
182
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
183
196
  */
184
197
  async process(packet) {
185
198
  if (this.isDisposed) {
@@ -209,32 +222,40 @@ export class BitStreamFilterAPI {
209
222
  return outputPackets;
210
223
  }
211
224
  /**
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.
225
+ * Process packet stream through filter.
216
226
  *
217
- * @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.
218
230
  *
231
+ * @param packets - Async iterable of packets
219
232
  * @yields Filtered packets
233
+ * @throws {Error} If filter is disposed
234
+ * @throws {FFmpegError} If filtering fails
220
235
  *
221
236
  * @example
222
237
  * ```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
- * }
238
+ * // Filter entire stream
239
+ * for await (const packet of filter.packets(input.packets())) {
240
+ * await output.writePacket(packet);
241
+ * packet.free();
232
242
  * }
243
+ * ```
233
244
  *
234
- * for await (const filtered of bsf.packets(videoPackets())) {
235
- * 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();
236
254
  * }
237
255
  * ```
256
+ *
257
+ * @see {@link process} For single packet filtering
258
+ * @see {@link flush} For end-of-stream handling
238
259
  */
239
260
  async *packets(packets) {
240
261
  if (this.isDisposed) {
@@ -261,21 +282,28 @@ export class BitStreamFilterAPI {
261
282
  }
262
283
  }
263
284
  /**
264
- * 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.
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
+ * Direct mapping to av_bsf_flush().
268
291
  *
269
- * @returns Array of remaining packets (may be empty)
292
+ * @returns Array of remaining packets
293
+ *
294
+ * @throws {Error} If filter is disposed
270
295
  *
271
296
  * @example
272
297
  * ```typescript
273
- * // After processing all packets
274
- * const remaining = await bsf.flush();
298
+ * const remaining = await filter.flush();
275
299
  * for (const packet of remaining) {
276
300
  * await output.writePacket(packet);
301
+ * packet.free();
277
302
  * }
278
303
  * ```
304
+ *
305
+ * @see {@link flushPackets} For async iteration
306
+ * @see {@link reset} For state reset only
279
307
  */
280
308
  async flush() {
281
309
  if (this.isDisposed) {
@@ -288,21 +316,23 @@ export class BitStreamFilterAPI {
288
316
  return filtered;
289
317
  }
290
318
  /**
291
- * Flush the filter and yield remaining packets.
319
+ * Flush filter as async generator.
292
320
  *
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.
321
+ * Convenient async iteration over remaining packets.
322
+ * Combines flush and iteration.
295
323
  *
296
- * @yields Remaining packets from the filter
324
+ * @yields Remaining packets
325
+ * @throws {Error} If filter is disposed
297
326
  *
298
327
  * @example
299
328
  * ```typescript
300
- * // Process all remaining packets with generator
301
- * for await (const packet of bsf.flushPackets()) {
329
+ * for await (const packet of filter.flushPackets()) {
302
330
  * await output.writePacket(packet);
303
- * using _ = packet; // Auto cleanup
331
+ * packet.free();
304
332
  * }
305
333
  * ```
334
+ *
335
+ * @see {@link flush} For array return
306
336
  */
307
337
  async *flushPackets() {
308
338
  if (this.isDisposed) {
@@ -314,25 +344,38 @@ export class BitStreamFilterAPI {
314
344
  }
315
345
  }
316
346
  /**
317
- * Get the stream this filter was created for.
318
- * 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
+ * ```
319
358
  */
320
359
  getStream() {
321
360
  return this.stream;
322
361
  }
323
362
  /**
324
- * Reset the filter state.
363
+ * Reset filter state.
325
364
  *
326
- * Clears internal buffers and resets the filter to initial state.
327
- * 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
328
371
  *
329
372
  * @example
330
373
  * ```typescript
331
- * // When seeking in the input
332
- * await media.seek(timestamp);
333
- * bsf.reset(); // Clear filter state
334
- * // Continue processing from new position
374
+ * // Reset for new segment
375
+ * filter.reset();
335
376
  * ```
377
+ *
378
+ * @see {@link flush} For reset with packet retrieval
336
379
  */
337
380
  reset() {
338
381
  if (this.isDisposed) {
@@ -341,18 +384,17 @@ export class BitStreamFilterAPI {
341
384
  this.ctx.flush();
342
385
  }
343
386
  /**
344
- * Dispose of the filter resources.
387
+ * Dispose of filter and free resources.
345
388
  *
346
- * Automatically called when using the `using` statement.
347
- * Frees all associated FFmpeg resources.
389
+ * Releases filter context and marks as disposed.
390
+ * Safe to call multiple times.
348
391
  *
349
392
  * @example
350
393
  * ```typescript
351
- * {
352
- * using bsf = await BitStreamFilterAPI.create('h264_mp4toannexb', stream);
353
- * // ... use filter
354
- * } // Automatically disposed when leaving scope
394
+ * filter.dispose();
355
395
  * ```
396
+ *
397
+ * @see {@link Symbol.dispose} For automatic cleanup
356
398
  */
357
399
  dispose() {
358
400
  if (!this.isDisposed) {
@@ -361,7 +403,20 @@ export class BitStreamFilterAPI {
361
403
  }
362
404
  }
363
405
  /**
364
- * 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
365
420
  */
366
421
  [Symbol.dispose]() {
367
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":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAI/G;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,OAAO,kBAAkB;IACrB,GAAG,CAAyB;IAC5B,MAAM,CAAkB;IACxB,MAAM,CAAS;IACf,UAAU,GAAG,KAAK,CAAC;IAE3B;;;;;OAKG;IACH,YAAoB,MAAuB,EAAE,GAA2B,EAAE,MAAc;QACtF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,MAAM,CAAC,MAAM,CAAC,UAAkB,EAAE,MAAc;QAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;QAED,4BAA4B;QAC5B,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,UAAU,aAAa,CAAC,CAAC;QAChE,CAAC;QAED,8BAA8B;QAC9B,MAAM,GAAG,GAAG,IAAI,sBAAsB,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,WAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,6CAA6C,CAAC,CAAC;QAElF,IAAI,CAAC;YACH,oCAAoC;YACpC,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAC9E,CAAC;YACD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAE/C,gBAAgB;YAChB,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC;YAEpC,wBAAwB;YACxB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YAC3B,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,uCAAuC,CAAC,CAAC;YAE3E,OAAO,IAAI,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oBAAoB;YACpB,GAAG,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC;IACvC,CAAC;IAED;;;;;;;;;;;OAWG;IACH,IAAI,qBAAqB;QACvB,OAAO,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACxC,CAAC;IAED;;;;;;;;;;OAUG;IACH,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;IACjC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,KAAK,CAAC,OAAO,CAAC,MAAqB;QACjC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,aAAa,GAAa,EAAE,CAAC;QAEnC,wBAAwB;QACxB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;YAC9C,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,2CAA2C,CAAC,CAAC;QACjF,CAAC;QAED,6BAA6B;QAC7B,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,SAAS,GAAG,IAAI,MAAM,EAAE,CAAC;YAC/B,SAAS,CAAC,KAAK,EAAE,CAAC;YAElB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAExD,IAAI,OAAO,KAAK,cAAc,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;gBAC1D,SAAS,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM;YACR,CAAC;YAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,SAAS,CAAC,KAAK,EAAE,CAAC;gBAClB,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,gDAAgD,CAAC,CAAC;YACtF,CAAC;YAED,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,KAAK,CAAC,CAAC,OAAO,CAAC,OAA8B;QAC3C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC;YACH,4BAA4B;YAC5B,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC5C,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE,CAAC;oBACjC,MAAM,SAAS,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,qCAAqC;YACrC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACrC,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;gBAC/B,MAAM,MAAM,CAAC;YACf,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0BAA0B;YAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,WAAW;QACX,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE1C,iDAAiD;QACjD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QAEjB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,KAAK,CAAC,CAAC,YAAY;QACjB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrC,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;YAC/B,MAAM,MAAM,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,CAAC,MAAM,CAAC,OAAO,CAAC;QACd,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;CACF"}