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 +1 @@
1
- {"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../src/api/decoder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../src/api/decoder.ts"],"names":[],"mappings":"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"}
@@ -1,298 +1,394 @@
1
- /**
2
- * Encoder - High-level wrapper for media encoding
3
- *
4
- * Simplifies FFmpeg's encoding API with automatic codec selection,
5
- * parameter configuration, and packet management.
6
- *
7
- * Handles codec initialization, frame encoding, and packet output.
8
- * Supports hardware acceleration and zero-copy transcoding.
9
- *
10
- * @module api/encoder
11
- */
12
- import { CodecContext, Packet } from '../lib/index.js';
13
- import { Stream } from '../lib/stream.js';
14
- import type { AVPixelFormat, Frame } from '../lib/index.js';
1
+ import { Codec, CodecContext, Packet } from '../lib/index.js';
2
+ import type { AVCodecID } from '../constants/constants.js';
3
+ import type { FFEncoderCodec } from '../constants/encoders.js';
4
+ import type { Frame } from '../lib/index.js';
15
5
  import type { EncoderOptions, StreamInfo } from './types.js';
16
6
  /**
17
- * High-level encoder for media streams.
18
- *
19
- * Handles codec initialization, frame encoding, and packet output.
20
- * Supports various codecs with flexible configuration options.
7
+ * High-level encoder for audio and video streams.
21
8
  *
22
- * Manages codec context lifecycle and provides automatic cleanup.
23
- * Supports hardware acceleration with shared frames context for zero-copy.
9
+ * Provides a simplified interface for encoding media frames to packets.
10
+ * Handles codec initialization, hardware acceleration setup, and packet management.
11
+ * Supports both synchronous frame-by-frame encoding and async iteration over packets.
12
+ * Essential component in media processing pipelines for converting raw frames to compressed data.
24
13
  *
25
14
  * @example
26
15
  * ```typescript
16
+ * import { Encoder } from 'node-av/api';
17
+ * import { AV_CODEC_ID_H264 } from 'node-av/constants';
18
+ *
27
19
  * // Create H.264 encoder
28
20
  * const encoder = await Encoder.create('libx264', {
21
+ * type: 'video',
29
22
  * width: 1920,
30
23
  * height: 1080,
31
- * pixelFormat: 'yuv420p',
24
+ * pixelFormat: AV_PIX_FMT_YUV420P,
25
+ * timeBase: { num: 1, den: 30 },
26
+ * frameRate: { num: 30, den: 1 }
27
+ * }, {
32
28
  * bitrate: '5M',
33
- * gopSize: 60,
34
- * options: {
35
- * preset: 'fast',
36
- * crf: 23
37
- * }
29
+ * gopSize: 60
38
30
  * });
39
31
  *
40
32
  * // Encode frames
41
33
  * const packet = await encoder.encode(frame);
42
34
  * if (packet) {
43
- * // Write packet to output
44
- * }
45
- *
46
- * // Flush encoder
47
- * let packet;
48
- * while ((packet = await encoder.flush()) !== null) {
49
- * // Process final packets
35
+ * await output.writePacket(packet);
36
+ * packet.free();
50
37
  * }
51
- * encoder.close();
52
38
  * ```
53
39
  *
54
40
  * @example
55
41
  * ```typescript
56
- * // With hardware acceleration
57
- * const hw = await HardwareContext.auto();
58
- * const encoder = await Encoder.create('h264_videotoolbox', {
59
- * width: 1920,
60
- * height: 1080,
61
- * pixelFormat: 'nv12',
62
- * bitrate: '5M',
63
- * hardware: hw
42
+ * // Hardware-accelerated encoding
43
+ * import { HardwareContext } from 'node-av/api';
44
+ * import { AV_HWDEVICE_TYPE_CUDA } from 'node-av/constants';
45
+ *
46
+ * const hw = HardwareContext.create(AV_HWDEVICE_TYPE_CUDA);
47
+ * const encoder = await Encoder.create('h264_nvenc', streamInfo, {
48
+ * hardware: hw,
49
+ * bitrate: '10M'
64
50
  * });
65
- * // ... use encoder
66
- * encoder.close(); // Also disposes hardware
67
- * hw?.dispose(); // Safe to call again (no-op)
51
+ *
52
+ * // Frames with hw_frames_ctx will be encoded on GPU
53
+ * for await (const packet of encoder.packets(frames)) {
54
+ * await output.writePacket(packet);
55
+ * packet.free();
56
+ * }
68
57
  * ```
58
+ *
59
+ * @see {@link Decoder} For decoding packets to frames
60
+ * @see {@link MediaOutput} For writing encoded packets
61
+ * @see {@link HardwareContext} For GPU acceleration
69
62
  */
70
63
  export declare class Encoder implements Disposable {
71
64
  private codecContext;
72
65
  private packet;
73
- private codecName;
66
+ private codec;
74
67
  private isOpen;
75
- private supportedFormats;
76
- private preferredFormat?;
77
68
  private hardware?;
78
- private isHardwareEncoder;
79
69
  /**
80
- * Private constructor - use Encoder.create() instead.
81
- *
82
- * Initializes the encoder with a codec context and allocates a packet buffer.
83
- *
84
- * @param codecContext - Initialized codec context
85
- * @param codecName - Name of the codec
86
- * @param hardware - Optional hardware context for late framesContext binding
70
+ * @param codecContext - Configured codec context
71
+ * @param codec - Encoder codec
72
+ * @param hardware - Optional hardware context
73
+ * @internal
87
74
  */
88
75
  private constructor();
89
76
  /**
90
77
  * Create an encoder with specified codec and options.
91
78
  *
92
- * Factory method that handles codec discovery, context setup,
93
- * and initialization.
79
+ * Initializes an encoder with the appropriate codec and configuration.
80
+ * Automatically configures parameters based on input stream info.
81
+ * Handles hardware acceleration setup if provided.
94
82
  *
95
- * Uses avcodec_find_encoder_by_name() to locate the codec,
96
- * configures the context with provided options, and opens it.
97
- * Handles hardware setup including shared frames context for zero-copy.
83
+ * Direct mapping to avcodec_find_encoder_by_name() or avcodec_find_encoder().
98
84
  *
99
- * @param codecName - Name of codec (e.g., 'libx264', 'aac', 'libopus')
100
- * @param input - Stream or StreamInfo to copy parameters from
85
+ * @param encoderCodec - Codec name, ID, or instance to use for encoding
86
+ * @param input - Stream information to configure encoder
101
87
  * @param options - Encoder configuration options
88
+ * @returns Configured encoder instance
102
89
  *
103
- * @returns Promise resolving to configured Encoder
104
- *
105
- * @throws {Error} If codec not found or configuration fails
90
+ * @throws {Error} If encoder not found or unsupported format
91
+ * @throws {FFmpegError} If codec initialization fails
106
92
  *
107
93
  * @example
108
94
  * ```typescript
109
- * // Video encoder from stream
110
- * const videoStream = media.video();
111
- * const videoEncoder = await Encoder.create('libx264', videoStream, {
95
+ * // From decoder stream info
96
+ * const streamInfo = decoder.getOutputStreamInfo();
97
+ * const encoder = await Encoder.create('libx264', streamInfo, {
112
98
  * bitrate: '5M',
113
- * gopSize: 60
99
+ * gopSize: 60,
100
+ * options: {
101
+ * preset: 'fast',
102
+ * crf: '23'
103
+ * }
114
104
  * });
105
+ * ```
115
106
  *
116
- * // Audio encoder from stream
117
- * const audioStream = media.audio();
118
- * const audioEncoder = await Encoder.create('aac', audioStream, {
107
+ * @example
108
+ * ```typescript
109
+ * // With custom stream info
110
+ * const encoder = await Encoder.create('aac', {
111
+ * type: 'audio',
112
+ * sampleRate: 48000,
113
+ * sampleFormat: AV_SAMPLE_FMT_FLTP,
114
+ * channelLayout: AV_CH_LAYOUT_STEREO,
115
+ * timeBase: { num: 1, den: 48000 }
116
+ * }, {
119
117
  * bitrate: '192k'
120
118
  * });
119
+ * ```
121
120
  *
121
+ * @example
122
+ * ```typescript
123
+ * // Hardware encoder
124
+ * const hw = HardwareContext.auto();
125
+ * const encoder = await Encoder.create('hevc_videotoolbox', streamInfo, {
126
+ * hardware: hw,
127
+ * bitrate: '8M'
128
+ * });
122
129
  * ```
130
+ *
131
+ * @see {@link Decoder.getOutputStreamInfo} For stream info source
132
+ * @see {@link EncoderOptions} For configuration options
123
133
  */
124
- static create(codecName: string, input: Stream | StreamInfo, options?: EncoderOptions): Promise<Encoder>;
134
+ static create(encoderCodec: FFEncoderCodec | AVCodecID | Codec, input: StreamInfo, options?: EncoderOptions): Promise<Encoder>;
125
135
  /**
126
136
  * Check if encoder is open.
137
+ *
138
+ * @example
139
+ * ```typescript
140
+ * if (encoder.isEncoderOpen) {
141
+ * const packet = await encoder.encode(frame);
142
+ * }
143
+ * ```
127
144
  */
128
145
  get isEncoderOpen(): boolean;
129
146
  /**
130
- * Encode a frame and return a packet if available.
147
+ * Check if encoder uses hardware acceleration.
148
+ *
149
+ * @returns true if hardware-accelerated
150
+ *
151
+ * @example
152
+ * ```typescript
153
+ * if (encoder.isHardware()) {
154
+ * console.log('Using GPU acceleration');
155
+ * }
156
+ * ```
131
157
  *
132
- * Sends frame to encoder and attempts to receive a packet.
133
- * May return null if encoder needs more data.
158
+ * @see {@link HardwareContext} For hardware setup
159
+ */
160
+ isHardware(): boolean;
161
+ /**
162
+ * Encode a frame to a packet.
134
163
  *
135
- * Uses avcodec_send_frame() and avcodec_receive_packet() internally.
136
- * The encoder may buffer frames before producing packets.
164
+ * Sends a frame to the encoder and attempts to receive an encoded packet.
165
+ * Handles internal buffering - may return null if more frames needed.
166
+ * Automatically manages encoder state and hardware context binding.
137
167
  *
138
- * @param frame - Frame to encode (or null to flush)
168
+ * Direct mapping to avcodec_send_frame() and avcodec_receive_packet().
139
169
  *
140
- * @returns Promise resolving to Packet or null
170
+ * @param frame - Raw frame to encode (or null to flush)
171
+ * @returns Encoded packet or null if more data needed
141
172
  *
142
- * @throws {Error} If encoder is closed or encode fails
173
+ * @throws {Error} If encoder is closed
174
+ * @throws {FFmpegError} If encoding fails
143
175
  *
144
176
  * @example
145
177
  * ```typescript
146
178
  * const packet = await encoder.encode(frame);
147
179
  * if (packet) {
148
- * // Write packet to output
180
+ * console.log(`Encoded packet with PTS: ${packet.pts}`);
149
181
  * await output.writePacket(packet);
182
+ * packet.free();
150
183
  * }
151
184
  * ```
185
+ *
186
+ * @example
187
+ * ```typescript
188
+ * // Encode loop
189
+ * for await (const frame of decoder.frames(input.packets())) {
190
+ * const packet = await encoder.encode(frame);
191
+ * if (packet) {
192
+ * await output.writePacket(packet);
193
+ * packet.free();
194
+ * }
195
+ * frame.free();
196
+ * }
197
+ * ```
198
+ *
199
+ * @see {@link packets} For automatic frame iteration
200
+ * @see {@link flush} For end-of-stream handling
152
201
  */
153
202
  encode(frame: Frame | null): Promise<Packet | null>;
154
203
  /**
155
- * Async iterator that encodes frames and yields packets.
204
+ * Encode frame stream to packet stream.
156
205
  *
157
- * Encodes all provided frames and yields resulting packets.
158
- * Automatically handles encoder flushing at the end.
159
- * Input frames are automatically freed after encoding.
206
+ * High-level async generator for complete encoding pipeline.
207
+ * Automatically manages frame memory, encoder state,
208
+ * and flushes buffered packets at end.
209
+ * Primary interface for stream-based encoding.
160
210
  *
161
- * Processes frames in sequence, encoding each and yielding packets.
162
- * After all frames are processed, flushes the encoder for remaining packets.
163
- *
164
- * IMPORTANT: The yielded packets MUST be freed by the caller!
165
- * Input frames are automatically freed after processing.
166
- *
167
- * @param frames - Async iterable of frames to encode (will be freed automatically)
211
+ * @param frames - Async iterable of frames (freed automatically)
212
+ * @yields Encoded packets (caller must free)
213
+ * @throws {Error} If encoder is closed
214
+ * @throws {FFmpegError} If encoding fails
168
215
  *
169
- * @yields Encoded packets (ownership transferred to caller)
216
+ * @example
217
+ * ```typescript
218
+ * // Basic encoding pipeline
219
+ * for await (const packet of encoder.packets(decoder.frames(input.packets()))) {
220
+ * await output.writePacket(packet);
221
+ * packet.free(); // Must free output packets
222
+ * }
223
+ * ```
170
224
  *
171
225
  * @example
172
226
  * ```typescript
173
- * // Transcode video
174
- * for await (const packet of encoder.packets(decoder.frames(media.packets()))) {
227
+ * // With frame filtering
228
+ * async function* filteredFrames() {
229
+ * for await (const frame of decoder.frames(input.packets())) {
230
+ * await filter.filterFrame(frame);
231
+ * const filtered = await filter.getFrame();
232
+ * if (filtered) {
233
+ * yield filtered;
234
+ * }
235
+ * }
236
+ * }
237
+ *
238
+ * for await (const packet of encoder.packets(filteredFrames())) {
175
239
  * await output.writePacket(packet);
176
- * packet.free(); // Must free output packet
240
+ * packet.free();
177
241
  * }
178
242
  * ```
243
+ *
244
+ * @example
245
+ * ```typescript
246
+ * // Pipeline integration
247
+ * import { pipeline } from 'node-av/api';
248
+ *
249
+ * const control = pipeline(
250
+ * input,
251
+ * decoder,
252
+ * encoder,
253
+ * output
254
+ * );
255
+ * await control.completion;
256
+ * ```
257
+ *
258
+ * @see {@link encode} For single frame encoding
259
+ * @see {@link Decoder.frames} For frame source
179
260
  */
180
261
  packets(frames: AsyncIterable<Frame>): AsyncGenerator<Packet>;
181
262
  /**
182
- * Flush encoder and get remaining packets.
263
+ * Flush encoder and get buffered packet.
183
264
  *
184
- * Sends null frame to trigger flush mode.
185
- * Call repeatedly until it returns null.
265
+ * Signals end-of-stream and retrieves remaining packets.
266
+ * Call repeatedly until null to get all buffered packets.
267
+ * Essential for ensuring all frames are encoded.
186
268
  *
187
- * Uses avcodec_send_frame(NULL) to signal end of stream.
188
- * Retrieves buffered packets from the encoder.
269
+ * Direct mapping to avcodec_send_frame(NULL).
189
270
  *
190
- * @returns Promise resolving to Packet or null
271
+ * @returns Buffered packet or null if none remaining
191
272
  *
192
273
  * @throws {Error} If encoder is closed
193
274
  *
194
275
  * @example
195
276
  * ```typescript
196
- * // Flush all remaining packets
277
+ * // Flush remaining packets
197
278
  * let packet;
198
279
  * while ((packet = await encoder.flush()) !== null) {
199
- * // Write final packets
280
+ * console.log('Got buffered packet');
200
281
  * await output.writePacket(packet);
282
+ * packet.free();
201
283
  * }
202
284
  * ```
285
+ *
286
+ * @see {@link flushPackets} For async iteration
287
+ * @see {@link packets} For complete encoding pipeline
203
288
  */
204
289
  flush(): Promise<Packet | null>;
205
290
  /**
206
- * Flush encoder and yield all remaining packets as a generator.
207
- *
208
- * More convenient than calling flush() in a loop.
209
- * Automatically sends flush signal and yields all buffered packets.
291
+ * Flush all buffered packets as async generator.
210
292
  *
211
- * @returns Async generator of remaining packets
293
+ * Convenient async iteration over remaining packets.
294
+ * Automatically handles repeated flush calls.
295
+ * Useful for end-of-stream processing.
212
296
  *
297
+ * @yields Buffered packets
213
298
  * @throws {Error} If encoder is closed
214
299
  *
215
300
  * @example
216
301
  * ```typescript
217
- * // Process all remaining packets with generator
302
+ * // Flush at end of encoding
218
303
  * for await (const packet of encoder.flushPackets()) {
219
- * await output.writePacket(packet, streamIdx);
220
- * using _ = packet; // Auto cleanup
304
+ * console.log('Processing buffered packet');
305
+ * await output.writePacket(packet);
306
+ * packet.free();
221
307
  * }
222
308
  * ```
309
+ *
310
+ * @see {@link flush} For single packet flush
311
+ * @see {@link packets} For complete pipeline
223
312
  */
224
313
  flushPackets(): AsyncGenerator<Packet>;
225
314
  /**
226
315
  * Close encoder and free resources.
227
316
  *
228
- * After closing, the encoder cannot be used again.
317
+ * Releases codec context and internal packet buffer.
318
+ * Safe to call multiple times.
319
+ * Does NOT dispose hardware context - caller is responsible.
320
+ * Automatically called by Symbol.dispose.
229
321
  *
230
- * Frees the packet buffer and codec context.
231
- * Note: Does NOT dispose the HardwareContext - caller is responsible for that.
232
- */
233
- close(): void;
234
- /**
235
- * Get the codec name.
236
- */
237
- getCodecName(): string;
238
- /**
239
- * Get codec context for advanced configuration.
240
- *
241
- * Use with caution - direct manipulation may cause issues.
242
- *
243
- * Provides access to the underlying AVCodecContext for advanced operations.
244
- *
245
- * @returns CodecContext or null if closed
322
+ * @example
323
+ * ```typescript
324
+ * const encoder = await Encoder.create('libx264', streamInfo);
325
+ * try {
326
+ * // Use encoder
327
+ * } finally {
328
+ * encoder.close();
329
+ * }
330
+ * ```
246
331
  *
247
- * @internal
332
+ * @see {@link Symbol.dispose} For automatic cleanup
248
333
  */
249
- getCodecContext(): CodecContext | null;
334
+ close(): void;
250
335
  /**
251
- * Get the preferred pixel format for this encoder.
336
+ * Get encoder codec.
252
337
  *
253
- * Returns the first supported format, which is usually the most efficient.
338
+ * Returns the codec used by this encoder.
339
+ * Useful for checking codec capabilities and properties.
254
340
  *
255
- * @returns Preferred pixel format or null if not available
341
+ * @returns Codec instance
256
342
  *
257
343
  * @example
258
344
  * ```typescript
259
- * const format = encoder.getPreferredPixelFormat();
260
- * if (format) {
261
- * console.log(`Encoder prefers format: ${format}`);
262
- * }
345
+ * const codec = encoder.getCodec();
346
+ * console.log(`Using codec: ${codec.name}`);
347
+ * console.log(`Capabilities: ${codec.capabilities}`);
263
348
  * ```
349
+ *
350
+ * @see {@link Codec} For codec properties
264
351
  */
265
- getPreferredPixelFormat(): AVPixelFormat | null;
352
+ getCodec(): Codec;
266
353
  /**
267
- * Get all supported pixel formats for this encoder.
354
+ * Get underlying codec context.
268
355
  *
269
- * Returns a list of pixel formats that this encoder can accept.
356
+ * Returns the internal codec context for advanced operations.
357
+ * Returns null if encoder is closed.
270
358
  *
271
- * @returns Array of supported pixel formats
359
+ * @returns Codec context or null
272
360
  *
273
- * @example
274
- * ```typescript
275
- * const formats = encoder.getSupportedPixelFormats();
276
- * console.log(`Encoder supports: ${formats.join(', ')}`);
277
- * ```
361
+ * @internal
278
362
  */
279
- getSupportedPixelFormats(): AVPixelFormat[];
363
+ getCodecContext(): CodecContext | null;
280
364
  /**
281
- * Receive a packet from the encoder.
365
+ * Receive packet from encoder.
366
+ *
367
+ * Internal method to get encoded packets from codec.
368
+ * Handles packet cloning and error checking.
282
369
  *
283
- * Internal method to receive encoded packets.
370
+ * Direct mapping to avcodec_receive_packet().
284
371
  *
285
- * Uses avcodec_receive_packet() to get encoded packets from the codec.
286
- * Clones the packet for the user to prevent internal buffer corruption.
372
+ * @returns Cloned packet or null
287
373
  *
288
- * @returns Packet or null if no packet available
374
+ * @throws {FFmpegError} If receive fails with error other than AVERROR_EAGAIN or AVERROR_EOF
289
375
  */
290
376
  private receivePacket;
291
377
  /**
292
- * Symbol.dispose for automatic cleanup.
378
+ * Dispose of encoder.
379
+ *
380
+ * Implements Disposable interface for automatic cleanup.
381
+ * Equivalent to calling close().
382
+ *
383
+ * @example
384
+ * ```typescript
385
+ * {
386
+ * using encoder = await Encoder.create('libx264', streamInfo);
387
+ * // Encode frames...
388
+ * } // Automatically closed
389
+ * ```
293
390
  *
294
- * Implements the Disposable interface for automatic resource management.
295
- * Calls close() to free all resources.
391
+ * @see {@link close} For manual cleanup
296
392
  */
297
393
  [Symbol.dispose](): void;
298
394
  }