node-av 2.0.0 → 2.1.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 (123) hide show
  1. package/README.md +10 -2
  2. package/binding.gyp +12 -0
  3. package/dist/api/bitstream-filter.d.ts +132 -0
  4. package/dist/api/bitstream-filter.js +198 -0
  5. package/dist/api/bitstream-filter.js.map +1 -1
  6. package/dist/api/decoder.d.ts +145 -0
  7. package/dist/api/decoder.js +225 -0
  8. package/dist/api/decoder.js.map +1 -1
  9. package/dist/api/encoder.d.ts +206 -0
  10. package/dist/api/encoder.js +315 -0
  11. package/dist/api/encoder.js.map +1 -1
  12. package/dist/api/filter-presets.d.ts +92 -0
  13. package/dist/api/filter-presets.js +92 -0
  14. package/dist/api/filter-presets.js.map +1 -1
  15. package/dist/api/filter.d.ts +225 -0
  16. package/dist/api/filter.js +363 -0
  17. package/dist/api/filter.js.map +1 -1
  18. package/dist/api/hardware.d.ts +17 -0
  19. package/dist/api/hardware.js +17 -0
  20. package/dist/api/hardware.js.map +1 -1
  21. package/dist/api/io-stream.d.ts +6 -0
  22. package/dist/api/io-stream.js +2 -0
  23. package/dist/api/io-stream.js.map +1 -1
  24. package/dist/api/media-input.d.ts +207 -1
  25. package/dist/api/media-input.js +353 -0
  26. package/dist/api/media-input.js.map +1 -1
  27. package/dist/api/media-output.d.ts +132 -1
  28. package/dist/api/media-output.js +339 -0
  29. package/dist/api/media-output.js.map +1 -1
  30. package/dist/api/pipeline.d.ts +65 -0
  31. package/dist/api/pipeline.js +61 -0
  32. package/dist/api/pipeline.js.map +1 -1
  33. package/dist/api/types.d.ts +7 -0
  34. package/dist/api/utils.js +2 -0
  35. package/dist/api/utils.js.map +1 -1
  36. package/dist/lib/audio-fifo.d.ts +103 -0
  37. package/dist/lib/audio-fifo.js +109 -0
  38. package/dist/lib/audio-fifo.js.map +1 -1
  39. package/dist/lib/binding.d.ts +1 -0
  40. package/dist/lib/binding.js.map +1 -1
  41. package/dist/lib/bitstream-filter-context.d.ts +79 -0
  42. package/dist/lib/bitstream-filter-context.js +83 -0
  43. package/dist/lib/bitstream-filter-context.js.map +1 -1
  44. package/dist/lib/bitstream-filter.d.ts +2 -0
  45. package/dist/lib/bitstream-filter.js +2 -0
  46. package/dist/lib/bitstream-filter.js.map +1 -1
  47. package/dist/lib/codec-context.d.ts +168 -0
  48. package/dist/lib/codec-context.js +178 -0
  49. package/dist/lib/codec-context.js.map +1 -1
  50. package/dist/lib/codec-parameters.d.ts +3 -0
  51. package/dist/lib/codec-parameters.js +3 -0
  52. package/dist/lib/codec-parameters.js.map +1 -1
  53. package/dist/lib/codec-parser.d.ts +6 -0
  54. package/dist/lib/codec-parser.js +6 -0
  55. package/dist/lib/codec-parser.js.map +1 -1
  56. package/dist/lib/codec.d.ts +12 -0
  57. package/dist/lib/codec.js +12 -0
  58. package/dist/lib/codec.js.map +1 -1
  59. package/dist/lib/dictionary.d.ts +16 -0
  60. package/dist/lib/dictionary.js +16 -0
  61. package/dist/lib/dictionary.js.map +1 -1
  62. package/dist/lib/error.d.ts +8 -0
  63. package/dist/lib/error.js +9 -0
  64. package/dist/lib/error.js.map +1 -1
  65. package/dist/lib/filter-context.d.ts +100 -0
  66. package/dist/lib/filter-context.js +104 -0
  67. package/dist/lib/filter-context.js.map +1 -1
  68. package/dist/lib/filter-graph.d.ts +80 -0
  69. package/dist/lib/filter-graph.js +84 -0
  70. package/dist/lib/filter-graph.js.map +1 -1
  71. package/dist/lib/filter-inout.d.ts +1 -0
  72. package/dist/lib/filter-inout.js +1 -0
  73. package/dist/lib/filter-inout.js.map +1 -1
  74. package/dist/lib/filter.d.ts +2 -0
  75. package/dist/lib/filter.js +2 -0
  76. package/dist/lib/filter.js.map +1 -1
  77. package/dist/lib/format-context.d.ts +338 -2
  78. package/dist/lib/format-context.js +355 -3
  79. package/dist/lib/format-context.js.map +1 -1
  80. package/dist/lib/frame.d.ts +41 -0
  81. package/dist/lib/frame.js +43 -0
  82. package/dist/lib/frame.js.map +1 -1
  83. package/dist/lib/hardware-device-context.d.ts +8 -0
  84. package/dist/lib/hardware-device-context.js +8 -0
  85. package/dist/lib/hardware-device-context.js.map +1 -1
  86. package/dist/lib/hardware-frames-context.d.ts +55 -0
  87. package/dist/lib/hardware-frames-context.js +57 -0
  88. package/dist/lib/hardware-frames-context.js.map +1 -1
  89. package/dist/lib/input-format.d.ts +43 -3
  90. package/dist/lib/input-format.js +48 -0
  91. package/dist/lib/input-format.js.map +1 -1
  92. package/dist/lib/io-context.d.ts +212 -0
  93. package/dist/lib/io-context.js +228 -0
  94. package/dist/lib/io-context.js.map +1 -1
  95. package/dist/lib/log.d.ts +2 -0
  96. package/dist/lib/log.js +2 -0
  97. package/dist/lib/log.js.map +1 -1
  98. package/dist/lib/native-types.d.ts +39 -1
  99. package/dist/lib/option.d.ts +90 -0
  100. package/dist/lib/option.js +97 -0
  101. package/dist/lib/option.js.map +1 -1
  102. package/dist/lib/output-format.d.ts +4 -0
  103. package/dist/lib/output-format.js +4 -0
  104. package/dist/lib/output-format.js.map +1 -1
  105. package/dist/lib/packet.d.ts +7 -0
  106. package/dist/lib/packet.js +7 -0
  107. package/dist/lib/packet.js.map +1 -1
  108. package/dist/lib/rational.d.ts +1 -0
  109. package/dist/lib/rational.js +1 -0
  110. package/dist/lib/rational.js.map +1 -1
  111. package/dist/lib/software-resample-context.d.ts +64 -0
  112. package/dist/lib/software-resample-context.js +66 -0
  113. package/dist/lib/software-resample-context.js.map +1 -1
  114. package/dist/lib/software-scale-context.d.ts +98 -0
  115. package/dist/lib/software-scale-context.js +102 -0
  116. package/dist/lib/software-scale-context.js.map +1 -1
  117. package/dist/lib/stream.d.ts +1 -0
  118. package/dist/lib/stream.js +1 -0
  119. package/dist/lib/stream.js.map +1 -1
  120. package/dist/lib/utilities.d.ts +60 -0
  121. package/dist/lib/utilities.js +60 -0
  122. package/dist/lib/utilities.js.map +1 -1
  123. package/package.json +13 -13
@@ -70,8 +70,11 @@ export declare class Encoder implements Disposable {
70
70
  private opts?;
71
71
  /**
72
72
  * @param codecContext - Configured codec context
73
+ *
73
74
  * @param codec - Encoder codec
75
+ *
74
76
  * @param opts - Encoder options as Dictionary
77
+ *
75
78
  * @internal
76
79
  */
77
80
  private constructor();
@@ -85,7 +88,9 @@ export declare class Encoder implements Disposable {
85
88
  * Direct mapping to avcodec_find_encoder_by_name() or avcodec_find_encoder().
86
89
  *
87
90
  * @param encoderCodec - Codec name, ID, or instance to use for encoding
91
+ *
88
92
  * @param options - Encoder configuration options including required timeBase
93
+ *
89
94
  * @returns Configured encoder instance
90
95
  *
91
96
  * @throws {Error} If encoder not found or timeBase not provided
@@ -194,6 +199,7 @@ export declare class Encoder implements Disposable {
194
199
  * Direct mapping to avcodec_send_frame() and avcodec_receive_packet().
195
200
  *
196
201
  * @param frame - Raw frame to encode (or null to flush)
202
+ *
197
203
  * @returns Encoded packet or null if more data needed
198
204
  *
199
205
  * @throws {Error} If encoder is closed
@@ -227,6 +233,50 @@ export declare class Encoder implements Disposable {
227
233
  * @see {@link flush} For end-of-stream handling
228
234
  */
229
235
  encode(frame: Frame | null): Promise<Packet | null>;
236
+ /**
237
+ * Encode a frame to a packet synchronously.
238
+ * Synchronous version of encode.
239
+ *
240
+ * Sends a frame to the encoder and attempts to receive an encoded packet.
241
+ * On first frame, automatically initializes encoder with frame properties.
242
+ * Handles internal buffering - may return null if more frames needed.
243
+ *
244
+ * Direct mapping to avcodec_send_frame() and avcodec_receive_packet().
245
+ *
246
+ * @param frame - Raw frame to encode (or null to flush)
247
+ *
248
+ * @returns Encoded packet or null if more data needed
249
+ *
250
+ * @throws {Error} If encoder is closed
251
+ *
252
+ * @throws {FFmpegError} If encoding fails
253
+ *
254
+ * @example
255
+ * ```typescript
256
+ * const packet = encoder.encodeSync(frame);
257
+ * if (packet) {
258
+ * console.log(`Encoded packet with PTS: ${packet.pts}`);
259
+ * output.writePacketSync(packet);
260
+ * packet.free();
261
+ * }
262
+ * ```
263
+ *
264
+ * @example
265
+ * ```typescript
266
+ * // Encode loop
267
+ * for (const frame of decoder.framesSync(packets)) {
268
+ * const packet = encoder.encodeSync(frame);
269
+ * if (packet) {
270
+ * output.writePacketSync(packet);
271
+ * packet.free();
272
+ * }
273
+ * frame.free();
274
+ * }
275
+ * ```
276
+ *
277
+ * @see {@link encode} For async version
278
+ */
279
+ encodeSync(frame: Frame | null): Packet | null;
230
280
  /**
231
281
  * Encode frame stream to packet stream.
232
282
  *
@@ -236,7 +286,9 @@ export declare class Encoder implements Disposable {
236
286
  * Primary interface for stream-based encoding.
237
287
  *
238
288
  * @param frames - Async iterable of frames (freed automatically)
289
+ *
239
290
  * @yields {Packet} Encoded packets (caller must free)
291
+ *
240
292
  * @throws {Error} If encoder is closed
241
293
  *
242
294
  * @throws {FFmpegError} If encoding fails
@@ -287,6 +339,54 @@ export declare class Encoder implements Disposable {
287
339
  * @see {@link Decoder.frames} For frame source
288
340
  */
289
341
  packets(frames: AsyncIterable<Frame>): AsyncGenerator<Packet>;
342
+ /**
343
+ * Encode frame stream to packet stream synchronously.
344
+ * Synchronous version of packets.
345
+ *
346
+ * High-level sync generator for complete encoding pipeline.
347
+ * Automatically manages frame memory, encoder state,
348
+ * and flushes buffered packets at end.
349
+ * Primary interface for stream-based encoding.
350
+ *
351
+ * @param frames - Iterable of frames (freed automatically)
352
+ *
353
+ * @yields {Packet} Encoded packets (caller must free)
354
+ *
355
+ * @throws {Error} If encoder is closed
356
+ *
357
+ * @throws {FFmpegError} If encoding fails
358
+ *
359
+ * @example
360
+ * ```typescript
361
+ * // Basic encoding pipeline
362
+ * for (const packet of encoder.packetsSync(decoder.framesSync(packets))) {
363
+ * output.writePacketSync(packet);
364
+ * packet.free(); // Must free output packets
365
+ * }
366
+ * ```
367
+ *
368
+ * @example
369
+ * ```typescript
370
+ * // With frame filtering
371
+ * function* filteredFrames() {
372
+ * for (const frame of decoder.framesSync(packets)) {
373
+ * const filtered = filter.processSync(frame);
374
+ * if (filtered) {
375
+ * yield filtered;
376
+ * }
377
+ * frame.free();
378
+ * }
379
+ * }
380
+ *
381
+ * for (const packet of encoder.packetsSync(filteredFrames())) {
382
+ * output.writePacketSync(packet);
383
+ * packet.free();
384
+ * }
385
+ * ```
386
+ *
387
+ * @see {@link packets} For async version
388
+ */
389
+ packetsSync(frames: Iterable<Frame>): Generator<Packet>;
290
390
  /**
291
391
  * Flush encoder and signal end-of-stream.
292
392
  *
@@ -314,6 +414,33 @@ export declare class Encoder implements Disposable {
314
414
  * @see {@link receive} For getting buffered packets
315
415
  */
316
416
  flush(): Promise<void>;
417
+ /**
418
+ * Flush encoder and signal end-of-stream synchronously.
419
+ * Synchronous version of flush.
420
+ *
421
+ * Sends null frame to encoder to signal end-of-stream.
422
+ * Does nothing if encoder was never initialized or is closed.
423
+ * Must call receiveSync() to get remaining buffered packets.
424
+ *
425
+ * Direct mapping to avcodec_send_frame(NULL).
426
+ *
427
+ * @example
428
+ * ```typescript
429
+ * // Signal end of stream
430
+ * encoder.flushSync();
431
+ *
432
+ * // Then get remaining packets
433
+ * let packet;
434
+ * while ((packet = encoder.receiveSync()) !== null) {
435
+ * console.log('Got buffered packet');
436
+ * output.writePacketSync(packet);
437
+ * packet.free();
438
+ * }
439
+ * ```
440
+ *
441
+ * @see {@link flush} For async version
442
+ */
443
+ flushSync(): void;
317
444
  /**
318
445
  * Flush all buffered packets as async generator.
319
446
  *
@@ -337,6 +464,29 @@ export declare class Encoder implements Disposable {
337
464
  * @see {@link packets} For complete pipeline
338
465
  */
339
466
  flushPackets(): AsyncGenerator<Packet>;
467
+ /**
468
+ * Flush all buffered packets as generator synchronously.
469
+ * Synchronous version of flushPackets.
470
+ *
471
+ * Convenient sync iteration over remaining packets.
472
+ * Automatically handles flush and repeated receive calls.
473
+ * Returns immediately if encoder was never initialized or is closed.
474
+ *
475
+ * @yields {Packet} Buffered packets
476
+ *
477
+ * @example
478
+ * ```typescript
479
+ * // Flush at end of encoding
480
+ * for (const packet of encoder.flushPacketsSync()) {
481
+ * console.log('Processing buffered packet');
482
+ * output.writePacketSync(packet);
483
+ * packet.free();
484
+ * }
485
+ * ```
486
+ *
487
+ * @see {@link flushPackets} For async version
488
+ */
489
+ flushPacketsSync(): Generator<Packet>;
340
490
  /**
341
491
  * Receive packet from encoder.
342
492
  *
@@ -376,6 +526,45 @@ export declare class Encoder implements Disposable {
376
526
  * @see {@link flush} For signaling end-of-stream
377
527
  */
378
528
  receive(): Promise<Packet | null>;
529
+ /**
530
+ * Receive packet from encoder synchronously.
531
+ * Synchronous version of receive.
532
+ *
533
+ * Gets encoded packets from the codec's internal buffer.
534
+ * Handles packet cloning and error checking.
535
+ * Returns null if encoder is closed, not initialized, or no packets available.
536
+ * Call repeatedly until null to drain all buffered packets.
537
+ *
538
+ * Direct mapping to avcodec_receive_packet().
539
+ *
540
+ * @returns Cloned packet or null if no packets available
541
+ *
542
+ * @throws {FFmpegError} If receive fails with error other than AVERROR_EAGAIN or AVERROR_EOF
543
+ *
544
+ * @example
545
+ * ```typescript
546
+ * const packet = encoder.receiveSync();
547
+ * if (packet) {
548
+ * console.log(`Got packet with PTS: ${packet.pts}`);
549
+ * output.writePacketSync(packet);
550
+ * packet.free();
551
+ * }
552
+ * ```
553
+ *
554
+ * @example
555
+ * ```typescript
556
+ * // Drain all buffered packets
557
+ * let packet;
558
+ * while ((packet = encoder.receiveSync()) !== null) {
559
+ * console.log(`Packet size: ${packet.size}`);
560
+ * output.writePacketSync(packet);
561
+ * packet.free();
562
+ * }
563
+ * ```
564
+ *
565
+ * @see {@link receive} For async version
566
+ */
567
+ receiveSync(): Packet | null;
379
568
  /**
380
569
  * Close encoder and free resources.
381
570
  *
@@ -410,6 +599,23 @@ export declare class Encoder implements Disposable {
410
599
  * @internal
411
600
  */
412
601
  private initialize;
602
+ /**
603
+ * Initialize encoder from first frame synchronously.
604
+ * Synchronous version of initialize.
605
+ *
606
+ * Sets codec context parameters from frame properties.
607
+ * Configures hardware context if present in frame.
608
+ * Opens encoder with accumulated options.
609
+ *
610
+ * @param frame - First frame to encode
611
+ *
612
+ * @throws {FFmpegError} If encoder open fails
613
+ *
614
+ * @internal
615
+ *
616
+ * @see {@link initialize} For async version
617
+ */
618
+ private initializeSync;
413
619
  /**
414
620
  * Get encoder codec.
415
621
  *
@@ -68,8 +68,11 @@ export class Encoder {
68
68
  opts;
69
69
  /**
70
70
  * @param codecContext - Configured codec context
71
+ *
71
72
  * @param codec - Encoder codec
73
+ *
72
74
  * @param opts - Encoder options as Dictionary
75
+ *
73
76
  * @internal
74
77
  */
75
78
  constructor(codecContext, codec, opts) {
@@ -89,7 +92,9 @@ export class Encoder {
89
92
  * Direct mapping to avcodec_find_encoder_by_name() or avcodec_find_encoder().
90
93
  *
91
94
  * @param encoderCodec - Codec name, ID, or instance to use for encoding
95
+ *
92
96
  * @param options - Encoder configuration options including required timeBase
97
+ *
93
98
  * @returns Configured encoder instance
94
99
  *
95
100
  * @throws {Error} If encoder not found or timeBase not provided
@@ -261,6 +266,7 @@ export class Encoder {
261
266
  * Direct mapping to avcodec_send_frame() and avcodec_receive_packet().
262
267
  *
263
268
  * @param frame - Raw frame to encode (or null to flush)
269
+ *
264
270
  * @returns Encoded packet or null if more data needed
265
271
  *
266
272
  * @throws {Error} If encoder is closed
@@ -322,6 +328,78 @@ export class Encoder {
322
328
  // Try to receive packet
323
329
  return await this.receive();
324
330
  }
331
+ /**
332
+ * Encode a frame to a packet synchronously.
333
+ * Synchronous version of encode.
334
+ *
335
+ * Sends a frame to the encoder and attempts to receive an encoded packet.
336
+ * On first frame, automatically initializes encoder with frame properties.
337
+ * Handles internal buffering - may return null if more frames needed.
338
+ *
339
+ * Direct mapping to avcodec_send_frame() and avcodec_receive_packet().
340
+ *
341
+ * @param frame - Raw frame to encode (or null to flush)
342
+ *
343
+ * @returns Encoded packet or null if more data needed
344
+ *
345
+ * @throws {Error} If encoder is closed
346
+ *
347
+ * @throws {FFmpegError} If encoding fails
348
+ *
349
+ * @example
350
+ * ```typescript
351
+ * const packet = encoder.encodeSync(frame);
352
+ * if (packet) {
353
+ * console.log(`Encoded packet with PTS: ${packet.pts}`);
354
+ * output.writePacketSync(packet);
355
+ * packet.free();
356
+ * }
357
+ * ```
358
+ *
359
+ * @example
360
+ * ```typescript
361
+ * // Encode loop
362
+ * for (const frame of decoder.framesSync(packets)) {
363
+ * const packet = encoder.encodeSync(frame);
364
+ * if (packet) {
365
+ * output.writePacketSync(packet);
366
+ * packet.free();
367
+ * }
368
+ * frame.free();
369
+ * }
370
+ * ```
371
+ *
372
+ * @see {@link encode} For async version
373
+ */
374
+ encodeSync(frame) {
375
+ if (this.isClosed) {
376
+ if (!frame) {
377
+ return null;
378
+ }
379
+ throw new Error('Encoder is closed');
380
+ }
381
+ // Open encoder if not already done
382
+ if (!this.initialized) {
383
+ if (!frame) {
384
+ return null;
385
+ }
386
+ this.initializeSync(frame);
387
+ }
388
+ // Send frame to encoder
389
+ const sendRet = this.codecContext.sendFrameSync(frame);
390
+ if (sendRet < 0 && sendRet !== AVERROR_EOF) {
391
+ // Encoder might be full, try to receive first
392
+ const packet = this.receiveSync();
393
+ if (packet)
394
+ return packet;
395
+ // If still failing, it's an error
396
+ if (sendRet !== AVERROR_EAGAIN) {
397
+ FFmpegError.throwIfError(sendRet, 'Failed to send frame');
398
+ }
399
+ }
400
+ // Try to receive packet
401
+ return this.receiveSync();
402
+ }
325
403
  /**
326
404
  * Encode frame stream to packet stream.
327
405
  *
@@ -331,7 +409,9 @@ export class Encoder {
331
409
  * Primary interface for stream-based encoding.
332
410
  *
333
411
  * @param frames - Async iterable of frames (freed automatically)
412
+ *
334
413
  * @yields {Packet} Encoded packets (caller must free)
414
+ *
335
415
  * @throws {Error} If encoder is closed
336
416
  *
337
417
  * @throws {FFmpegError} If encoding fails
@@ -404,6 +484,76 @@ export class Encoder {
404
484
  yield remaining;
405
485
  }
406
486
  }
487
+ /**
488
+ * Encode frame stream to packet stream synchronously.
489
+ * Synchronous version of packets.
490
+ *
491
+ * High-level sync generator for complete encoding pipeline.
492
+ * Automatically manages frame memory, encoder state,
493
+ * and flushes buffered packets at end.
494
+ * Primary interface for stream-based encoding.
495
+ *
496
+ * @param frames - Iterable of frames (freed automatically)
497
+ *
498
+ * @yields {Packet} Encoded packets (caller must free)
499
+ *
500
+ * @throws {Error} If encoder is closed
501
+ *
502
+ * @throws {FFmpegError} If encoding fails
503
+ *
504
+ * @example
505
+ * ```typescript
506
+ * // Basic encoding pipeline
507
+ * for (const packet of encoder.packetsSync(decoder.framesSync(packets))) {
508
+ * output.writePacketSync(packet);
509
+ * packet.free(); // Must free output packets
510
+ * }
511
+ * ```
512
+ *
513
+ * @example
514
+ * ```typescript
515
+ * // With frame filtering
516
+ * function* filteredFrames() {
517
+ * for (const frame of decoder.framesSync(packets)) {
518
+ * const filtered = filter.processSync(frame);
519
+ * if (filtered) {
520
+ * yield filtered;
521
+ * }
522
+ * frame.free();
523
+ * }
524
+ * }
525
+ *
526
+ * for (const packet of encoder.packetsSync(filteredFrames())) {
527
+ * output.writePacketSync(packet);
528
+ * packet.free();
529
+ * }
530
+ * ```
531
+ *
532
+ * @see {@link packets} For async version
533
+ */
534
+ *packetsSync(frames) {
535
+ // Process frames
536
+ for (const frame of frames) {
537
+ try {
538
+ const packet = this.encodeSync(frame);
539
+ if (packet) {
540
+ yield packet;
541
+ }
542
+ }
543
+ finally {
544
+ // Free the input frame after encoding
545
+ frame.free();
546
+ }
547
+ }
548
+ // Flush encoder after all frames
549
+ this.flushSync();
550
+ while (true) {
551
+ const remaining = this.receiveSync();
552
+ if (!remaining)
553
+ break;
554
+ yield remaining;
555
+ }
556
+ }
407
557
  /**
408
558
  * Flush encoder and signal end-of-stream.
409
559
  *
@@ -442,6 +592,44 @@ export class Encoder {
442
592
  }
443
593
  }
444
594
  }
595
+ /**
596
+ * Flush encoder and signal end-of-stream synchronously.
597
+ * Synchronous version of flush.
598
+ *
599
+ * Sends null frame to encoder to signal end-of-stream.
600
+ * Does nothing if encoder was never initialized or is closed.
601
+ * Must call receiveSync() to get remaining buffered packets.
602
+ *
603
+ * Direct mapping to avcodec_send_frame(NULL).
604
+ *
605
+ * @example
606
+ * ```typescript
607
+ * // Signal end of stream
608
+ * encoder.flushSync();
609
+ *
610
+ * // Then get remaining packets
611
+ * let packet;
612
+ * while ((packet = encoder.receiveSync()) !== null) {
613
+ * console.log('Got buffered packet');
614
+ * output.writePacketSync(packet);
615
+ * packet.free();
616
+ * }
617
+ * ```
618
+ *
619
+ * @see {@link flush} For async version
620
+ */
621
+ flushSync() {
622
+ if (this.isClosed || !this.initialized) {
623
+ return;
624
+ }
625
+ // Send flush frame (null)
626
+ const ret = this.codecContext.sendFrameSync(null);
627
+ if (ret < 0 && ret !== AVERROR_EOF) {
628
+ if (ret !== AVERROR_EAGAIN) {
629
+ FFmpegError.throwIfError(ret, 'Failed to flush encoder');
630
+ }
631
+ }
632
+ }
445
633
  /**
446
634
  * Flush all buffered packets as async generator.
447
635
  *
@@ -472,6 +660,36 @@ export class Encoder {
472
660
  yield packet;
473
661
  }
474
662
  }
663
+ /**
664
+ * Flush all buffered packets as generator synchronously.
665
+ * Synchronous version of flushPackets.
666
+ *
667
+ * Convenient sync iteration over remaining packets.
668
+ * Automatically handles flush and repeated receive calls.
669
+ * Returns immediately if encoder was never initialized or is closed.
670
+ *
671
+ * @yields {Packet} Buffered packets
672
+ *
673
+ * @example
674
+ * ```typescript
675
+ * // Flush at end of encoding
676
+ * for (const packet of encoder.flushPacketsSync()) {
677
+ * console.log('Processing buffered packet');
678
+ * output.writePacketSync(packet);
679
+ * packet.free();
680
+ * }
681
+ * ```
682
+ *
683
+ * @see {@link flushPackets} For async version
684
+ */
685
+ *flushPacketsSync() {
686
+ // Send flush signal
687
+ this.flushSync();
688
+ let packet;
689
+ while ((packet = this.receiveSync()) !== null) {
690
+ yield packet;
691
+ }
692
+ }
475
693
  /**
476
694
  * Receive packet from encoder.
477
695
  *
@@ -531,6 +749,65 @@ export class Encoder {
531
749
  return null;
532
750
  }
533
751
  }
752
+ /**
753
+ * Receive packet from encoder synchronously.
754
+ * Synchronous version of receive.
755
+ *
756
+ * Gets encoded packets from the codec's internal buffer.
757
+ * Handles packet cloning and error checking.
758
+ * Returns null if encoder is closed, not initialized, or no packets available.
759
+ * Call repeatedly until null to drain all buffered packets.
760
+ *
761
+ * Direct mapping to avcodec_receive_packet().
762
+ *
763
+ * @returns Cloned packet or null if no packets available
764
+ *
765
+ * @throws {FFmpegError} If receive fails with error other than AVERROR_EAGAIN or AVERROR_EOF
766
+ *
767
+ * @example
768
+ * ```typescript
769
+ * const packet = encoder.receiveSync();
770
+ * if (packet) {
771
+ * console.log(`Got packet with PTS: ${packet.pts}`);
772
+ * output.writePacketSync(packet);
773
+ * packet.free();
774
+ * }
775
+ * ```
776
+ *
777
+ * @example
778
+ * ```typescript
779
+ * // Drain all buffered packets
780
+ * let packet;
781
+ * while ((packet = encoder.receiveSync()) !== null) {
782
+ * console.log(`Packet size: ${packet.size}`);
783
+ * output.writePacketSync(packet);
784
+ * packet.free();
785
+ * }
786
+ * ```
787
+ *
788
+ * @see {@link receive} For async version
789
+ */
790
+ receiveSync() {
791
+ if (this.isClosed || !this.initialized) {
792
+ return null;
793
+ }
794
+ // Clear previous packet data
795
+ this.packet.unref();
796
+ const ret = this.codecContext.receivePacketSync(this.packet);
797
+ if (ret === 0) {
798
+ // Got a packet, clone it for the user
799
+ return this.packet.clone();
800
+ }
801
+ else if (ret === AVERROR_EAGAIN || ret === AVERROR_EOF) {
802
+ // Need more data or end of stream
803
+ return null;
804
+ }
805
+ else {
806
+ // Error
807
+ FFmpegError.throwIfError(ret, 'Failed to receive packet');
808
+ return null;
809
+ }
810
+ }
534
811
  /**
535
812
  * Close encoder and free resources.
536
813
  *
@@ -594,6 +871,44 @@ export class Encoder {
594
871
  }
595
872
  this.initialized = true;
596
873
  }
874
+ /**
875
+ * Initialize encoder from first frame synchronously.
876
+ * Synchronous version of initialize.
877
+ *
878
+ * Sets codec context parameters from frame properties.
879
+ * Configures hardware context if present in frame.
880
+ * Opens encoder with accumulated options.
881
+ *
882
+ * @param frame - First frame to encode
883
+ *
884
+ * @throws {FFmpegError} If encoder open fails
885
+ *
886
+ * @internal
887
+ *
888
+ * @see {@link initialize} For async version
889
+ */
890
+ initializeSync(frame) {
891
+ if (frame.isVideo()) {
892
+ this.codecContext.width = frame.width;
893
+ this.codecContext.height = frame.height;
894
+ this.codecContext.pixelFormat = frame.format;
895
+ this.codecContext.sampleAspectRatio = frame.sampleAspectRatio;
896
+ }
897
+ else {
898
+ this.codecContext.sampleRate = frame.sampleRate;
899
+ this.codecContext.sampleFormat = frame.format;
900
+ this.codecContext.channelLayout = frame.channelLayout;
901
+ }
902
+ this.codecContext.hwDeviceCtx = frame.hwFramesCtx?.deviceRef ?? null;
903
+ this.codecContext.hwFramesCtx = frame.hwFramesCtx;
904
+ // Open codec
905
+ const openRet = this.codecContext.open2Sync(this.codec, this.opts);
906
+ if (openRet < 0) {
907
+ this.codecContext.freeContext();
908
+ FFmpegError.throwIfError(openRet, 'Failed to open encoder');
909
+ }
910
+ this.initialized = true;
911
+ }
597
912
  /**
598
913
  * Get encoder codec.
599
914
  *
@@ -1 +1 @@
1
- {"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../src/api/encoder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../src/api/encoder.ts"],"names":[],"mappings":"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"}