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,66 +1,56 @@
1
- /**
2
- * MediaOutput - Unified Output Handler for FFmpeg
3
- *
4
- * Provides a high-level interface for writing media to various destinations.
5
- * Supports files, streams, and custom IO with automatic format configuration.
6
- *
7
- * Central entry point for all media output operations.
8
- * Manages FormatContext lifecycle and provides stream management.
9
- *
10
- * @module api/media-output
11
- */
12
1
  import { mkdir } from 'fs/promises';
13
2
  import { dirname, resolve } from 'path';
14
- import { AVFMT_FLAG_CUSTOM_IO, AVFMT_NOFILE, AVIO_FLAG_WRITE, FFmpegError, FormatContext, IOContext, Rational } from '../lib/index.js';
3
+ import { AVFMT_FLAG_CUSTOM_IO, AVFMT_NOFILE, AVIO_FLAG_WRITE } from '../constants/constants.js';
4
+ import { FFmpegError, FormatContext, IOContext, Rational } from '../lib/index.js';
15
5
  import { Encoder } from './encoder.js';
16
6
  /**
17
- * MediaOutput - High-level media output handler.
7
+ * High-level media output for writing and muxing media files.
18
8
  *
19
- * Creates and manages media containers for writing encoded streams.
20
- * Automatically handles format setup and stream configuration.
21
- *
22
- * Manages the FormatContext and provides convenient methods for
23
- * adding streams, writing packets, and finalizing output.
9
+ * Provides simplified access to media muxing and file writing operations.
10
+ * Handles stream configuration, packet writing, and format management.
11
+ * Supports files, URLs, and custom I/O with automatic cleanup.
12
+ * Essential component for media encoding pipelines and transcoding.
24
13
  *
25
14
  * @example
26
15
  * ```typescript
27
- * import { MediaOutput, Encoder } from 'node-av/api';
16
+ * import { MediaOutput } from 'node-av/api';
28
17
  *
29
- * // Open output file
30
- * const output = await MediaOutput.open('output.mp4');
18
+ * // Create output file
19
+ * await using output = await MediaOutput.open('output.mp4');
31
20
  *
32
- * // Add encoder stream
33
- * const encoder = await Encoder.create('libx264', {
34
- * width: 1920,
35
- * height: 1080,
36
- * pixelFormat: AV_PIX_FMT_YUV420P
37
- * });
38
- * const streamIdx = output.addStream(encoder);
21
+ * // Add streams from encoders
22
+ * const videoIdx = output.addStream(videoEncoder);
23
+ * const audioIdx = output.addStream(audioEncoder);
39
24
  *
40
- * // Write header, packets, trailer
25
+ * // Write header
41
26
  * await output.writeHeader();
42
- * await output.writePacket(packet, streamIdx);
27
+ *
28
+ * // Write packets
29
+ * await output.writePacket(packet, videoIdx);
30
+ *
31
+ * // Write trailer and close
43
32
  * await output.writeTrailer();
44
- * await output.close();
45
33
  * ```
46
34
  *
47
35
  * @example
48
36
  * ```typescript
49
- * // Stream copy without re-encoding
50
- * const input = await MediaInput.open('input.mp4');
51
- * const output = await MediaOutput.open('output.mkv');
52
- *
53
- * const videoStream = input.video();
54
- * const streamIdx = output.addStream(videoStream);
37
+ * // Stream copy
38
+ * await using input = await MediaInput.open('input.mp4');
39
+ * await using output = await MediaOutput.open('output.mp4');
55
40
  *
41
+ * // Copy stream configuration
42
+ * const videoIdx = output.addStream(input.video());
56
43
  * await output.writeHeader();
44
+ *
57
45
  * for await (const packet of input.packets()) {
58
- * if (packet.streamIndex === videoStream.index) {
59
- * await output.writePacket(packet, streamIdx);
60
- * }
46
+ * await output.writePacket(packet, videoIdx);
47
+ * packet.free();
61
48
  * }
62
- * await output.writeTrailer();
63
49
  * ```
50
+ *
51
+ * @see {@link MediaInput} For reading media files
52
+ * @see {@link Encoder} For encoding frames to packets
53
+ * @see {@link FormatContext} For low-level API
64
54
  */
65
55
  export class MediaOutput {
66
56
  formatContext;
@@ -70,50 +60,63 @@ export class MediaOutput {
70
60
  trailerWritten = false;
71
61
  closed = false;
72
62
  /**
73
- * Private constructor - use MediaOutput.open() instead.
74
- *
75
- * Initializes the output with a new FormatContext.
76
- * The actual format setup happens in the static factory method.
63
+ * @internal
77
64
  */
78
65
  constructor() {
79
66
  this.formatContext = new FormatContext();
80
67
  }
81
68
  /**
82
- * Opens a media output for writing with custom IO callbacks or stream URL or file output
83
- *
84
- * Creates a FormatContext and prepares the output for writing.
85
- * Automatically detects format from filename/URL if not specified.
86
- *
87
- * If io callbacks is used, it creates a FormatContext with custom IO handling.
88
- * Format must be explicitly specified for custom IO.
69
+ * Open media output for writing.
89
70
  *
90
- * Uses avformat_alloc_output_context2() and avio_alloc_context() internally.
71
+ * Creates and configures output context for muxing.
72
+ * Automatically creates directories for file output.
73
+ * Supports files, URLs, and custom I/O callbacks.
91
74
  *
92
- * @param target - File path or stream URL or custom IO callbacks
93
- * @param options - Optional configuration
75
+ * Direct mapping to avformat_alloc_output_context2() and avio_open2().
94
76
  *
95
- * @returns Promise resolving to MediaOutput instance
77
+ * @param target - File path, URL, or I/O callbacks
78
+ * @param options - Output configuration options
79
+ * @returns Opened media output instance
96
80
  *
97
- * @throws {Error} If format not specified or context allocation fails
81
+ * @throws {Error} If format required for custom I/O
82
+ * @throws {FFmpegError} If allocation or opening fails
98
83
  *
99
84
  * @example
100
85
  * ```typescript
101
- * const callbacks = {
102
- * write: (buffer) => myStream.write(buffer),
103
- * seek: (offset, whence) => offset
104
- * };
105
- * const output = await MediaOutput.open(callbacks, { format: 'mp4' });
86
+ * // Create file output
87
+ * await using output = await MediaOutput.open('output.mp4');
106
88
  * ```
107
89
  *
108
90
  * @example
109
91
  * ```typescript
110
- * const output = await MediaOutput.open('output.mp4');
92
+ * // Create output with specific format
93
+ * await using output = await MediaOutput.open('output.ts', {
94
+ * format: 'mpegts'
95
+ * });
111
96
  * ```
112
97
  *
113
98
  * @example
114
99
  * ```typescript
115
- * const output = await MediaOutput.open('rtmp://server/live/streamkey', { format: 'flv' });
100
+ * // Custom I/O callbacks
101
+ * const callbacks = {
102
+ * write: async (buffer: Buffer) => {
103
+ * // Write to custom destination
104
+ * return buffer.length;
105
+ * },
106
+ * seek: async (offset: bigint, whence: number) => {
107
+ * // Seek in custom destination
108
+ * return offset;
109
+ * }
110
+ * };
111
+ *
112
+ * await using output = await MediaOutput.open(callbacks, {
113
+ * format: 'mp4',
114
+ * bufferSize: 8192
115
+ * });
116
116
  * ```
117
+ *
118
+ * @see {@link MediaOutputOptions} For configuration options
119
+ * @see {@link IOOutputCallbacks} For custom I/O interface
117
120
  */
118
121
  static async open(target, options) {
119
122
  const output = new MediaOutput();
@@ -162,7 +165,8 @@ export class MediaOutput {
162
165
  // Cleanup on error
163
166
  if (output.ioContext) {
164
167
  try {
165
- if (output.formatContext.flags & AVFMT_FLAG_CUSTOM_IO) {
168
+ const isCustomIO = (output.formatContext.flags & AVFMT_FLAG_CUSTOM_IO) !== 0;
169
+ if (isCustomIO) {
166
170
  // Clear the pb reference first
167
171
  output.formatContext.pb = null;
168
172
  // For custom IO with callbacks, free the context
@@ -189,46 +193,38 @@ export class MediaOutput {
189
193
  }
190
194
  }
191
195
  /**
192
- * Adds a stream to the output container.
193
- *
194
- * Creates a new stream in the output format context.
195
- * Copies codec parameters from encoder or input stream.
196
+ * Add a stream to the output.
196
197
  *
197
- * Uses avformat_new_stream() and avcodec_parameters_copy() internally.
198
+ * Configures output stream from encoder or input stream.
199
+ * Must be called before writeHeader().
200
+ * Returns stream index for packet writing.
198
201
  *
199
- * @param source - Encoder for transcoding or Stream for copying
200
- * @param options - Optional stream configuration
201
- * @param options.timeBase - Custom output timebase for the stream.
202
- * If not specified, uses the source's timebase.
203
- * When set, packets will be automatically rescaled
204
- * from source timebase to this output timebase.
202
+ * Direct mapping to avformat_new_stream() and avcodec_parameters_copy().
205
203
  *
204
+ * @param source - Encoder or stream to add
205
+ * @param options - Stream configuration options
206
+ * @param options.timeBase - Optional custom timebase for the stream
206
207
  * @returns Stream index for packet writing
207
208
  *
208
- * @throws {Error} If called after header is written or output is closed
209
- *
210
- * @example
211
- * ```typescript
212
- * // Add encoder stream (transcoding) - uses encoder's timebase
213
- * const encoder = await Encoder.create('libx264', { width: 1920, height: 1080 });
214
- * const streamIdx = output.addStream(encoder);
215
- * ```
209
+ * @throws {Error} If called after header written or output closed
216
210
  *
217
211
  * @example
218
212
  * ```typescript
219
- * // Add stream for direct copy - uses input stream's timebase
220
- * const inputStream = input.video();
221
- * const streamIdx = output.addStream(inputStream);
213
+ * // Add stream from encoder
214
+ * const videoIdx = output.addStream(videoEncoder);
215
+ * const audioIdx = output.addStream(audioEncoder);
222
216
  * ```
223
217
  *
224
218
  * @example
225
219
  * ```typescript
226
- * // Custom output timebase (e.g., for format requirements)
227
- * const streamIdx = output.addStream(encoder, {
228
- * timeBase: { num: 1, den: 90000 } // MPEG-TS standard
220
+ * // Stream copy with custom timebase
221
+ * const streamIdx = output.addStream(input.video(), {
222
+ * timeBase: { num: 1, den: 90000 }
229
223
  * });
230
- * // Packets from encoder will be automatically rescaled to 1/90000
231
224
  * ```
225
+ *
226
+ * @see {@link writePacket} For writing packets to streams
227
+ * @see {@link Encoder} For transcoding source
232
228
  */
233
229
  addStream(source, options) {
234
230
  if (this.closed) {
@@ -276,26 +272,42 @@ export class MediaOutput {
276
272
  return stream.index;
277
273
  }
278
274
  /**
279
- * Writes a packet to the output container.
275
+ * Write a packet to the output.
280
276
  *
281
- * Writes an encoded packet to the specified stream.
282
- * Automatically sets the stream index on the packet.
277
+ * Writes muxed packet to the specified stream.
278
+ * Automatically handles timestamp rescaling.
279
+ * Must be called after writeHeader() and before writeTrailer().
283
280
  *
284
- * Uses av_interleaved_write_frame() internally.
281
+ * Direct mapping to av_interleaved_write_frame().
285
282
  *
286
283
  * @param packet - Packet to write
287
284
  * @param streamIndex - Target stream index
285
+ * @throws {Error} If stream invalid or called at wrong time
286
+ * @throws {FFmpegError} If write fails
288
287
  *
289
- * @throws {Error} If header not written, trailer already written, or invalid stream
288
+ * @example
289
+ * ```typescript
290
+ * // Write encoded packet
291
+ * const packet = await encoder.encode(frame);
292
+ * if (packet) {
293
+ * await output.writePacket(packet, videoIdx);
294
+ * packet.free();
295
+ * }
296
+ * ```
290
297
  *
291
298
  * @example
292
299
  * ```typescript
293
- * const encoded = await encoder.encode(frame);
294
- * if (encoded) {
295
- * await output.writePacket(encoded, streamIdx);
296
- * encoded.free();
300
+ * // Stream copy with packet processing
301
+ * for await (const packet of input.packets()) {
302
+ * if (packet.streamIndex === inputVideoIdx) {
303
+ * await output.writePacket(packet, outputVideoIdx);
304
+ * }
305
+ * packet.free();
297
306
  * }
298
307
  * ```
308
+ *
309
+ * @see {@link addStream} For adding streams
310
+ * @see {@link writeHeader} Must be called first
299
311
  */
300
312
  async writePacket(packet, streamIndex) {
301
313
  if (this.closed) {
@@ -331,21 +343,29 @@ export class MediaOutput {
331
343
  FFmpegError.throwIfError(ret, 'Failed to write packet');
332
344
  }
333
345
  /**
334
- * Writes the output file header.
335
- *
336
- * Writes the container header with stream information.
337
- * Must be called before writing any packets.
346
+ * Write file header.
338
347
  *
339
- * Uses avformat_write_header() internally.
348
+ * Writes format header with stream configuration.
349
+ * Must be called after adding all streams and before writing packets.
350
+ * Finalizes stream parameters and initializes muxer.
340
351
  *
341
- * @param options - Optional header options (format-specific)
352
+ * Direct mapping to avformat_write_header().
342
353
  *
343
- * @throws {Error} If header already written or output is closed
354
+ * @throws {Error} If already written or output closed
355
+ * @throws {FFmpegError} If write fails
344
356
  *
345
357
  * @example
346
358
  * ```typescript
359
+ * // Standard workflow
360
+ * const output = await MediaOutput.open('output.mp4');
361
+ * output.addStream(encoder);
347
362
  * await output.writeHeader();
363
+ * // Now ready to write packets
348
364
  * ```
365
+ *
366
+ * @see {@link addStream} Must add streams first
367
+ * @see {@link writePacket} Can write packets after
368
+ * @see {@link writeTrailer} Must call at end
349
369
  */
350
370
  async writeHeader() {
351
371
  if (this.closed) {
@@ -359,19 +379,26 @@ export class MediaOutput {
359
379
  this.headerWritten = true;
360
380
  }
361
381
  /**
362
- * Writes the output file trailer.
382
+ * Write file trailer.
363
383
  *
364
- * Finalizes the output file with necessary metadata.
365
- * Should be called after all packets have been written.
384
+ * Writes format trailer and finalizes the file.
385
+ * Must be called after all packets are written.
386
+ * Flushes any buffered data and updates file headers.
366
387
  *
367
- * Uses av_write_trailer() internally.
388
+ * Direct mapping to av_write_trailer().
368
389
  *
369
- * @throws {Error} If header not written, trailer already written, or output is closed
390
+ * @throws {Error} If header not written or already written
391
+ * @throws {FFmpegError} If write fails
370
392
  *
371
393
  * @example
372
394
  * ```typescript
395
+ * // Finalize output
373
396
  * await output.writeTrailer();
397
+ * await output.close();
374
398
  * ```
399
+ *
400
+ * @see {@link writeHeader} Must be called first
401
+ * @see {@link close} For cleanup after trailer
375
402
  */
376
403
  async writeTrailer() {
377
404
  if (this.closed) {
@@ -388,17 +415,23 @@ export class MediaOutput {
388
415
  this.trailerWritten = true;
389
416
  }
390
417
  /**
391
- * Closes the output and releases all resources.
418
+ * Close media output and free resources.
392
419
  *
393
- * Writes trailer if needed, closes IO context, and frees format context.
420
+ * Writes trailer if needed and releases all resources.
394
421
  * Safe to call multiple times.
395
- *
396
- * Uses av_write_trailer(), avio_closep(), and avformat_free_context() internally.
422
+ * Automatically called by Symbol.asyncDispose.
397
423
  *
398
424
  * @example
399
425
  * ```typescript
400
- * await output.close();
426
+ * const output = await MediaOutput.open('output.mp4');
427
+ * try {
428
+ * // Use output
429
+ * } finally {
430
+ * await output.close();
431
+ * }
401
432
  * ```
433
+ *
434
+ * @see {@link Symbol.asyncDispose} For automatic cleanup
402
435
  */
403
436
  async close() {
404
437
  if (this.closed) {
@@ -418,9 +451,11 @@ export class MediaOutput {
418
451
  if (this.ioContext) {
419
452
  this.formatContext.pb = null;
420
453
  }
454
+ // Determine if this is custom IO before freeing format context
455
+ const isCustomIO = (this.formatContext.flags & AVFMT_FLAG_CUSTOM_IO) !== 0;
421
456
  // For file-based IO, close the file handle via closep
422
457
  // For custom IO, the context will be freed below
423
- if (this.ioContext && !(this.formatContext.flags & AVFMT_FLAG_CUSTOM_IO)) {
458
+ if (this.ioContext && !isCustomIO) {
424
459
  try {
425
460
  await this.ioContext.closep();
426
461
  }
@@ -438,7 +473,7 @@ export class MediaOutput {
438
473
  }
439
474
  }
440
475
  // Now free custom IO context if present
441
- if (this.ioContext && this.formatContext.flags & AVFMT_FLAG_CUSTOM_IO) {
476
+ if (this.ioContext && isCustomIO) {
442
477
  try {
443
478
  this.ioContext.freeContext();
444
479
  }
@@ -448,47 +483,95 @@ export class MediaOutput {
448
483
  }
449
484
  }
450
485
  /**
451
- * Gets information about a specific stream.
486
+ * Get stream information.
487
+ *
488
+ * Returns internal stream info for the specified index.
489
+ *
490
+ * @param streamIndex - Stream index
491
+ * @returns Stream info or undefined
492
+ *
493
+ * @example
494
+ * ```typescript
495
+ * const info = output.getStreamInfo(0);
496
+ * console.log(`Stream 0 timebase: ${info?.timeBase.num}/${info?.timeBase.den}`);
497
+ * ```
452
498
  */
453
499
  getStreamInfo(streamIndex) {
454
500
  return this.streams.get(streamIndex);
455
501
  }
456
502
  /**
457
- * Gets all stream indices.
503
+ * Get all stream indices.
504
+ *
505
+ * Returns array of all added stream indices.
506
+ *
507
+ * @returns Array of stream indices
508
+ *
509
+ * @example
510
+ * ```typescript
511
+ * const indices = output.getStreamIndices();
512
+ * console.log(`Output has ${indices.length} streams`);
513
+ * ```
458
514
  */
459
515
  getStreamIndices() {
460
516
  return Array.from(this.streams.keys());
461
517
  }
462
518
  /**
463
- * Checks if header has been written.
519
+ * Check if header has been written.
520
+ *
521
+ * @returns true if header written
522
+ *
523
+ * @example
524
+ * ```typescript
525
+ * if (!output.isHeaderWritten()) {
526
+ * await output.writeHeader();
527
+ * }
528
+ * ```
464
529
  */
465
530
  isHeaderWritten() {
466
531
  return this.headerWritten;
467
532
  }
468
533
  /**
469
- * Checks if trailer has been written.
534
+ * Check if trailer has been written.
535
+ *
536
+ * @returns true if trailer written
537
+ *
538
+ * @example
539
+ * ```typescript
540
+ * if (!output.isTrailerWritten()) {
541
+ * await output.writeTrailer();
542
+ * }
543
+ * ```
470
544
  */
471
545
  isTrailerWritten() {
472
546
  return this.trailerWritten;
473
547
  }
474
548
  /**
475
- * Gets the underlying format context.
549
+ * Get underlying format context.
476
550
  *
477
- * For advanced use cases requiring direct format context access.
551
+ * Returns the internal format context for advanced operations.
552
+ *
553
+ * @returns Format context
554
+ *
555
+ * @internal
478
556
  */
479
557
  getFormatContext() {
480
558
  return this.formatContext;
481
559
  }
482
560
  /**
483
- * AsyncDisposable implementation for using statement.
561
+ * Dispose of media output.
484
562
  *
485
- * Enables automatic resource cleanup with await using syntax.
563
+ * Implements AsyncDisposable interface for automatic cleanup.
564
+ * Equivalent to calling close().
486
565
  *
487
566
  * @example
488
567
  * ```typescript
489
- * await using output = await MediaOutput.open('output.mp4');
490
- * // Output automatically closes when scope ends
568
+ * {
569
+ * await using output = await MediaOutput.open('output.mp4');
570
+ * // Use output...
571
+ * } // Automatically closed
491
572
  * ```
573
+ *
574
+ * @see {@link close} For manual cleanup
492
575
  */
493
576
  async [Symbol.asyncDispose]() {
494
577
  await this.close();
@@ -1 +1 @@
1
- {"version":3,"file":"media-output.js","sourceRoot":"","sources":["../../src/api/media-output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"media-output.js","sourceRoot":"","sources":["../../src/api/media-output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAYvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,MAAM,OAAO,WAAW;IACd,aAAa,CAAgB;IAC7B,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC/C,SAAS,CAAa;IACtB,aAAa,GAAG,KAAK,CAAC;IACtB,cAAc,GAAG,KAAK,CAAC;IACvB,MAAM,GAAG,KAAK,CAAC;IAEvB;;OAEG;IACH;QACE,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC3C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoDG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAkC,EAAE,OAA4B;QAChF,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAEjC,IAAI,CAAC;YACH,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,qEAAqE;gBACrE,+DAA+D;gBAC/D,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3D,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAExD,wDAAwD;gBACxD,IAAI,CAAC,KAAK,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;oBAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;oBACpC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxC,CAAC;gBACD,0BAA0B;gBAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,IAAI,IAAI,EAAE,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;gBACnI,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,mCAAmC,CAAC,CAAC;gBAEnE,8BAA8B;gBAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;gBAC7C,IAAI,cAAc,IAAI,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC;oBACjE,oEAAoE;oBACpE,gDAAgD;oBAChD,MAAM,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;oBACnC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;oBAC9E,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,+BAA+B,cAAc,EAAE,CAAC,CAAC;oBACnF,MAAM,CAAC,aAAa,CAAC,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;gBAC7C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,gDAAgD;gBAChD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;oBACrB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAC5D,CAAC;gBAED,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACjF,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,mCAAmC,CAAC,CAAC;gBAEnE,iCAAiC;gBACjC,MAAM,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;gBACnC,MAAM,CAAC,SAAS,CAAC,yBAAyB,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBAClH,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;gBAC5D,MAAM,CAAC,aAAa,CAAC,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;gBAC3C,MAAM,CAAC,aAAa,CAAC,KAAK,GAAG,oBAAoB,CAAC;YACpD,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mBAAmB;YACnB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;oBAC7E,IAAI,UAAU,EAAE,CAAC;wBACf,+BAA+B;wBAC/B,MAAM,CAAC,aAAa,CAAC,EAAE,GAAG,IAAI,CAAC;wBAC/B,iDAAiD;wBACjD,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;oBACjC,CAAC;yBAAM,CAAC;wBACN,2CAA2C;wBAC3C,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;oBAClC,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,gBAAgB;gBAClB,CAAC;YACH,CAAC;YACD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;gBACrC,CAAC;gBAAC,MAAM,CAAC;oBACP,gBAAgB;gBAClB,CAAC;YACH,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,SAAS,CACP,MAAwB,EACxB,OAEC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,IAAI,cAAqC,CAAC;QAE1C,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;YAC9B,2BAA2B;YAC3B,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;YAC9C,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACtD,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,8CAA8C,CAAC,CAAC;YAE9E,uEAAuE;YACvE,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC;YAEvC,iEAAiE;YACjE,MAAM,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC;QACzH,CAAC;aAAM,CAAC;YACN,cAAc;YACd,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAClD,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAAC;YAEjE,4EAA4E;YAC5E,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC;YAEjC,sEAAsE;YACtE,MAAM,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;YACjH,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,qCAAqC;YACnE,YAAY,GAAG,IAAI,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE;YAC7B,MAAM;YACN,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,YAAY;YACZ,cAAc;SACf,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqCG;IACH,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,WAAmB;QACnD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,yBAAyB,WAAW,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,mBAAmB;QACnB,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;QAEjC,kEAAkE;QAClE,iGAAiG;QACjG,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC;YAC/D,IAAI,YAAY,EAAE,CAAC;gBACjB,4CAA4C;gBAC5C,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,CAAC;gBACxC,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC;gBACpC,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,EAAE,CAAC;oBACvD,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,cAAc,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACnE,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,KAAK,CAAC,WAAW;QACf,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;QACnD,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;QACxD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,KAAK,CAAC,YAAY;QAChB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;QACpD,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;QACzD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,gEAAgE;QAChE,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC/C,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;YAC1C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;QAED,qDAAqD;QACrD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,+DAA+D;QAC/D,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAE3E,sDAAsD;QACtD,iDAAiD;QACjD,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YAChC,CAAC;YAAC,MAAM,CAAC;gBACP,gBAAgB;YAClB,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;YACnC,CAAC;YAAC,MAAM,CAAC;gBACP,gBAAgB;YAClB,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,IAAI,IAAI,CAAC,SAAS,IAAI,UAAU,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACP,gBAAgB;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,WAAmB;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,gBAAgB;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;;;;;;;;;;OAWG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;;;;;;;;;;OAWG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;;;;;;;OAQG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QACzB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}