node-av 3.1.3 → 4.0.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 (156) hide show
  1. package/README.md +65 -52
  2. package/binding.gyp +4 -0
  3. package/dist/api/audio-frame-buffer.d.ts +201 -0
  4. package/dist/api/audio-frame-buffer.js +275 -0
  5. package/dist/api/audio-frame-buffer.js.map +1 -0
  6. package/dist/api/bitstream-filter.d.ts +319 -78
  7. package/dist/api/bitstream-filter.js +680 -151
  8. package/dist/api/bitstream-filter.js.map +1 -1
  9. package/dist/api/constants.d.ts +44 -0
  10. package/dist/api/constants.js +45 -0
  11. package/dist/api/constants.js.map +1 -0
  12. package/dist/api/data/test_av1.ivf +0 -0
  13. package/dist/api/data/test_mjpeg.mjpeg +0 -0
  14. package/dist/api/data/test_vp8.ivf +0 -0
  15. package/dist/api/data/test_vp9.ivf +0 -0
  16. package/dist/api/decoder.d.ts +279 -17
  17. package/dist/api/decoder.js +998 -209
  18. package/dist/api/decoder.js.map +1 -1
  19. package/dist/api/{media-input.d.ts → demuxer.d.ts} +294 -44
  20. package/dist/api/demuxer.js +1968 -0
  21. package/dist/api/demuxer.js.map +1 -0
  22. package/dist/api/encoder.d.ts +308 -50
  23. package/dist/api/encoder.js +1133 -111
  24. package/dist/api/encoder.js.map +1 -1
  25. package/dist/api/filter-presets.d.ts +12 -5
  26. package/dist/api/filter-presets.js +21 -7
  27. package/dist/api/filter-presets.js.map +1 -1
  28. package/dist/api/filter.d.ts +406 -40
  29. package/dist/api/filter.js +966 -139
  30. package/dist/api/filter.js.map +1 -1
  31. package/dist/api/{fmp4.d.ts → fmp4-stream.d.ts} +141 -140
  32. package/dist/api/fmp4-stream.js +539 -0
  33. package/dist/api/fmp4-stream.js.map +1 -0
  34. package/dist/api/hardware.d.ts +58 -6
  35. package/dist/api/hardware.js +127 -11
  36. package/dist/api/hardware.js.map +1 -1
  37. package/dist/api/index.d.ts +6 -4
  38. package/dist/api/index.js +14 -8
  39. package/dist/api/index.js.map +1 -1
  40. package/dist/api/io-stream.d.ts +3 -3
  41. package/dist/api/io-stream.js +5 -4
  42. package/dist/api/io-stream.js.map +1 -1
  43. package/dist/api/{media-output.d.ts → muxer.d.ts} +274 -60
  44. package/dist/api/muxer.js +1934 -0
  45. package/dist/api/muxer.js.map +1 -0
  46. package/dist/api/pipeline.d.ts +77 -29
  47. package/dist/api/pipeline.js +435 -425
  48. package/dist/api/pipeline.js.map +1 -1
  49. package/dist/api/rtp-stream.d.ts +312 -0
  50. package/dist/api/rtp-stream.js +630 -0
  51. package/dist/api/rtp-stream.js.map +1 -0
  52. package/dist/api/types.d.ts +476 -55
  53. package/dist/api/utilities/async-queue.d.ts +91 -0
  54. package/dist/api/utilities/async-queue.js +162 -0
  55. package/dist/api/utilities/async-queue.js.map +1 -0
  56. package/dist/api/utilities/audio-sample.d.ts +1 -1
  57. package/dist/api/utilities/image.d.ts +1 -1
  58. package/dist/api/utilities/index.d.ts +2 -0
  59. package/dist/api/utilities/index.js +4 -0
  60. package/dist/api/utilities/index.js.map +1 -1
  61. package/dist/api/utilities/media-type.d.ts +1 -1
  62. package/dist/api/utilities/pixel-format.d.ts +1 -1
  63. package/dist/api/utilities/sample-format.d.ts +1 -1
  64. package/dist/api/utilities/scheduler.d.ts +169 -0
  65. package/dist/api/utilities/scheduler.js +136 -0
  66. package/dist/api/utilities/scheduler.js.map +1 -0
  67. package/dist/api/utilities/streaming.d.ts +74 -15
  68. package/dist/api/utilities/streaming.js +170 -12
  69. package/dist/api/utilities/streaming.js.map +1 -1
  70. package/dist/api/utilities/timestamp.d.ts +1 -1
  71. package/dist/api/webrtc-stream.d.ts +288 -0
  72. package/dist/api/webrtc-stream.js +440 -0
  73. package/dist/api/webrtc-stream.js.map +1 -0
  74. package/dist/constants/constants.d.ts +51 -1
  75. package/dist/constants/constants.js +47 -1
  76. package/dist/constants/constants.js.map +1 -1
  77. package/dist/constants/encoders.d.ts +2 -1
  78. package/dist/constants/encoders.js +4 -3
  79. package/dist/constants/encoders.js.map +1 -1
  80. package/dist/constants/hardware.d.ts +26 -0
  81. package/dist/constants/hardware.js +27 -0
  82. package/dist/constants/hardware.js.map +1 -0
  83. package/dist/constants/index.d.ts +1 -0
  84. package/dist/constants/index.js +1 -0
  85. package/dist/constants/index.js.map +1 -1
  86. package/dist/lib/binding.d.ts +19 -8
  87. package/dist/lib/binding.js.map +1 -1
  88. package/dist/lib/codec-context.d.ts +87 -0
  89. package/dist/lib/codec-context.js +125 -4
  90. package/dist/lib/codec-context.js.map +1 -1
  91. package/dist/lib/codec-parameters.d.ts +183 -1
  92. package/dist/lib/codec-parameters.js +209 -0
  93. package/dist/lib/codec-parameters.js.map +1 -1
  94. package/dist/lib/codec-parser.d.ts +23 -0
  95. package/dist/lib/codec-parser.js +25 -0
  96. package/dist/lib/codec-parser.js.map +1 -1
  97. package/dist/lib/codec.d.ts +26 -4
  98. package/dist/lib/codec.js +35 -0
  99. package/dist/lib/codec.js.map +1 -1
  100. package/dist/lib/dictionary.js +1 -0
  101. package/dist/lib/dictionary.js.map +1 -1
  102. package/dist/lib/error.js +1 -1
  103. package/dist/lib/error.js.map +1 -1
  104. package/dist/lib/filter-context.d.ts +52 -11
  105. package/dist/lib/filter-context.js +56 -12
  106. package/dist/lib/filter-context.js.map +1 -1
  107. package/dist/lib/filter-graph.d.ts +9 -0
  108. package/dist/lib/filter-graph.js +13 -0
  109. package/dist/lib/filter-graph.js.map +1 -1
  110. package/dist/lib/filter.d.ts +21 -0
  111. package/dist/lib/filter.js +28 -0
  112. package/dist/lib/filter.js.map +1 -1
  113. package/dist/lib/format-context.d.ts +48 -14
  114. package/dist/lib/format-context.js +76 -7
  115. package/dist/lib/format-context.js.map +1 -1
  116. package/dist/lib/frame.d.ts +168 -0
  117. package/dist/lib/frame.js +212 -0
  118. package/dist/lib/frame.js.map +1 -1
  119. package/dist/lib/hardware-device-context.d.ts +3 -2
  120. package/dist/lib/hardware-device-context.js.map +1 -1
  121. package/dist/lib/index.d.ts +1 -0
  122. package/dist/lib/index.js +2 -0
  123. package/dist/lib/index.js.map +1 -1
  124. package/dist/lib/input-format.d.ts +21 -0
  125. package/dist/lib/input-format.js +42 -2
  126. package/dist/lib/input-format.js.map +1 -1
  127. package/dist/lib/native-types.d.ts +48 -26
  128. package/dist/lib/option.d.ts +25 -13
  129. package/dist/lib/option.js +28 -0
  130. package/dist/lib/option.js.map +1 -1
  131. package/dist/lib/output-format.d.ts +22 -1
  132. package/dist/lib/output-format.js +28 -0
  133. package/dist/lib/output-format.js.map +1 -1
  134. package/dist/lib/packet.d.ts +35 -0
  135. package/dist/lib/packet.js +52 -2
  136. package/dist/lib/packet.js.map +1 -1
  137. package/dist/lib/stream.d.ts +126 -0
  138. package/dist/lib/stream.js +188 -5
  139. package/dist/lib/stream.js.map +1 -1
  140. package/dist/lib/sync-queue.d.ts +179 -0
  141. package/dist/lib/sync-queue.js +197 -0
  142. package/dist/lib/sync-queue.js.map +1 -0
  143. package/dist/lib/types.d.ts +27 -1
  144. package/dist/lib/utilities.d.ts +281 -53
  145. package/dist/lib/utilities.js +298 -55
  146. package/dist/lib/utilities.js.map +1 -1
  147. package/package.json +20 -19
  148. package/dist/api/fmp4.js +0 -710
  149. package/dist/api/fmp4.js.map +0 -1
  150. package/dist/api/media-input.js +0 -1075
  151. package/dist/api/media-input.js.map +0 -1
  152. package/dist/api/media-output.js +0 -1040
  153. package/dist/api/media-output.js.map +0 -1
  154. package/dist/api/webrtc.d.ts +0 -664
  155. package/dist/api/webrtc.js +0 -1132
  156. package/dist/api/webrtc.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { Rational } from './rational.js';
2
- import type { AVChromaLocation, AVCodecID, AVColorPrimaries, AVColorRange, AVColorSpace, AVColorTransferCharacteristic, AVMediaType, AVPixelFormat, AVProfile, AVSampleFormat } from '../constants/constants.js';
2
+ import type { AVChromaLocation, AVCodecID, AVColorPrimaries, AVColorRange, AVColorSpace, AVColorTransferCharacteristic, AVMediaType, AVPacketSideDataType, AVPixelFormat, AVProfile, AVSampleFormat } from '../constants/constants.js';
3
3
  import type { CodecContext } from './codec-context.js';
4
4
  import type { NativeCodecParameters, NativeWrapper } from './native-types.js';
5
5
  import type { ChannelLayout } from './types.js';
@@ -112,6 +112,26 @@ export declare class CodecParameters implements NativeWrapper<NativeCodecParamet
112
112
  */
113
113
  get bitRate(): bigint;
114
114
  set bitRate(value: bigint);
115
+ /**
116
+ * Number of bits per coded sample.
117
+ *
118
+ * Bits per sample/pixel from the demuxer (needed by some codecs).
119
+ * For uncompressed formats, this is the bits per sample.
120
+ *
121
+ * Direct mapping to AVCodecParameters->bits_per_coded_sample.
122
+ */
123
+ get bitsPerCodedSample(): number;
124
+ set bitsPerCodedSample(value: number);
125
+ /**
126
+ * Number of bits per raw sample.
127
+ *
128
+ * Bits per sample before compression/encoding.
129
+ * Only set when different from bitsPerCodedSample.
130
+ *
131
+ * Direct mapping to AVCodecParameters->bits_per_raw_sample.
132
+ */
133
+ get bitsPerRawSample(): number;
134
+ set bitsPerRawSample(value: number);
115
135
  /**
116
136
  * Codec profile.
117
137
  *
@@ -238,6 +258,51 @@ export declare class CodecParameters implements NativeWrapper<NativeCodecParamet
238
258
  */
239
259
  get sampleRate(): number;
240
260
  set sampleRate(value: number);
261
+ /**
262
+ * Audio frame size in samples.
263
+ *
264
+ * Number of samples per audio frame for codecs with constant frame size.
265
+ * For AAC this is typically 1024, for MP3 it's 1152.
266
+ * For codecs with variable frame size, this may be 0.
267
+ *
268
+ * Direct mapping to AVCodecParameters->frame_size.
269
+ */
270
+ get frameSize(): number;
271
+ set frameSize(value: number);
272
+ /**
273
+ * Initial audio padding.
274
+ *
275
+ * Amount of padding (priming) samples at the beginning of the audio stream.
276
+ * For AAC encoding, this is typically 1024 samples.
277
+ * The muxer uses this value to correctly calculate packet timestamps.
278
+ *
279
+ * Direct mapping to AVCodecParameters->initial_padding.
280
+ */
281
+ get initialPadding(): number;
282
+ set initialPadding(value: number);
283
+ /**
284
+ * Video delay in frames.
285
+ *
286
+ * Number of frames the decoded output will be delayed relative to the encoded input.
287
+ * Used for timestamp correction in video streams.
288
+ *
289
+ * Direct mapping to AVCodecParameters->video_delay.
290
+ */
291
+ get videoDelay(): number;
292
+ set videoDelay(value: number);
293
+ /**
294
+ * Number of coded side data entries.
295
+ *
296
+ * Returns the count of coded side data attached to codec parameters.
297
+ *
298
+ * @returns Number of side data entries
299
+ *
300
+ * @example
301
+ * ```typescript
302
+ * console.log(`Codec has ${params.nbCodedSideData} side data entries`);
303
+ * ```
304
+ */
305
+ get nbCodedSideData(): number;
241
306
  /**
242
307
  * Allocate codec parameters.
243
308
  *
@@ -347,6 +412,38 @@ export declare class CodecParameters implements NativeWrapper<NativeCodecParamet
347
412
  * @see {@link fromContext} To extract from context
348
413
  */
349
414
  toContext(codecContext: CodecContext): number;
415
+ /**
416
+ * Parse extradata to extract codec parameters.
417
+ *
418
+ * Opens a decoder to parse extradata (SPS/PPS for H.264, etc.) and extract
419
+ * codec parameters like width/height for video or sample_rate for audio.
420
+ * This is used when extradata exists (e.g., from SDP sprop-parameter-sets)
421
+ * but dimensions are missing due to insufficient probesize.
422
+ *
423
+ * Uses FFmpeg's decoder to parse extradata, same as avformat_find_stream_info()
424
+ * does internally. Works for all codecs (H.264, H.265, VP9, AV1, etc.).
425
+ *
426
+ * @returns 0 on success, negative error code on failure
427
+ *
428
+ * @example
429
+ * ```typescript
430
+ * import { FFmpegError } from 'node-av';
431
+ *
432
+ * // After opening RTSP with low probesize
433
+ * const input = await Demuxer.open('rtsp://...', {
434
+ * options: { probesize: 32 }
435
+ * });
436
+ *
437
+ * const stream = input.video();
438
+ * if (stream.codecpar.width === 0 && stream.codecpar.extradata) {
439
+ * // Parse extradata to get dimensions
440
+ * const ret = stream.codecpar.parseExtradata();
441
+ * FFmpegError.throwIfError(ret, 'parseExtradata');
442
+ * console.log(`Dimensions: ${stream.codecpar.width}x${stream.codecpar.height}`);
443
+ * }
444
+ * ```
445
+ */
446
+ parseExtradata(): number;
350
447
  /**
351
448
  * Convert to JSON representation.
352
449
  *
@@ -362,6 +459,91 @@ export declare class CodecParameters implements NativeWrapper<NativeCodecParamet
362
459
  * ```
363
460
  */
364
461
  toJSON(): Record<string, any>;
462
+ /**
463
+ * Get coded side data.
464
+ *
465
+ * Retrieves additional data associated with the codec parameters
466
+ * (e.g., HDR metadata, Dolby Vision configuration, mastering display).
467
+ *
468
+ * Direct mapping to accessing AVCodecParameters.coded_side_data.
469
+ *
470
+ * @param type - Type of side data to retrieve
471
+ *
472
+ * @returns Side data buffer, or null if not present
473
+ *
474
+ * @example
475
+ * ```typescript
476
+ * import { AV_PKT_DATA_MASTERING_DISPLAY_METADATA } from 'node-av/constants';
477
+ *
478
+ * // Get HDR mastering display metadata
479
+ * const hdrData = params.getCodedSideData(AV_PKT_DATA_MASTERING_DISPLAY_METADATA);
480
+ * if (hdrData) {
481
+ * console.log(`HDR metadata: ${hdrData.length} bytes`);
482
+ * }
483
+ * ```
484
+ *
485
+ * @see {@link addCodedSideData} To add side data
486
+ * @see {@link nbCodedSideData} For count of side data entries
487
+ */
488
+ getCodedSideData(type: AVPacketSideDataType): Buffer | null;
489
+ /**
490
+ * Get all coded side data entries.
491
+ *
492
+ * Returns all side data attached to the codec parameters.
493
+ * Each entry contains the type and data buffer.
494
+ * This allows iteration over all side data like FFmpeg CLI does.
495
+ *
496
+ * Direct mapping to accessing AVCodecParameters.coded_side_data array.
497
+ *
498
+ * @returns Array of side data entries with type and data
499
+ *
500
+ * @example
501
+ * ```typescript
502
+ * // Iterate all side data like FFmpeg does (ffmpeg_mux_init.c)
503
+ * const allSideData = params.getAllCodedSideData();
504
+ * for (const sd of allSideData) {
505
+ * console.log(`Type: ${sd.type}, Size: ${sd.data.length}`);
506
+ * // Copy to output stream
507
+ * outParams.addCodedSideData(sd.type, sd.data);
508
+ * }
509
+ * ```
510
+ *
511
+ * @see {@link getCodedSideData} To get specific side data by type
512
+ * @see {@link addCodedSideData} To add side data
513
+ * @see {@link nbCodedSideData} For count of side data entries
514
+ */
515
+ getAllCodedSideData(): {
516
+ type: AVPacketSideDataType;
517
+ data: Buffer;
518
+ }[];
519
+ /**
520
+ * Add coded side data to codec parameters.
521
+ *
522
+ * Attaches additional data to the codec parameters. The data is copied.
523
+ * Commonly used for HDR metadata, Dolby Vision configuration, etc.
524
+ *
525
+ * Direct mapping to av_packet_side_data_add() for coded_side_data.
526
+ *
527
+ * @param type - Type of side data
528
+ *
529
+ * @param data - Side data buffer
530
+ *
531
+ * @returns 0 on success, negative AVERROR on error
532
+ *
533
+ * @example
534
+ * ```typescript
535
+ * import { FFmpegError } from 'node-av';
536
+ * import { AV_PKT_DATA_DOVI_CONF } from 'node-av/constants';
537
+ *
538
+ * // Add Dolby Vision configuration
539
+ * const doviConf = Buffer.from([...]); // Dolby Vision config data
540
+ * const ret = params.addCodedSideData(AV_PKT_DATA_DOVI_CONF, doviConf);
541
+ * FFmpegError.throwIfError(ret, 'addCodedSideData');
542
+ * ```
543
+ *
544
+ * @see {@link getCodedSideData} To retrieve side data
545
+ */
546
+ addCodedSideData(type: AVPacketSideDataType, data: Buffer): number;
365
547
  /**
366
548
  * Get the underlying native CodecParameters object.
367
549
  *
@@ -146,6 +146,34 @@ export class CodecParameters {
146
146
  set bitRate(value) {
147
147
  this.native.bitRate = value;
148
148
  }
149
+ /**
150
+ * Number of bits per coded sample.
151
+ *
152
+ * Bits per sample/pixel from the demuxer (needed by some codecs).
153
+ * For uncompressed formats, this is the bits per sample.
154
+ *
155
+ * Direct mapping to AVCodecParameters->bits_per_coded_sample.
156
+ */
157
+ get bitsPerCodedSample() {
158
+ return this.native.bitsPerCodedSample;
159
+ }
160
+ set bitsPerCodedSample(value) {
161
+ this.native.bitsPerCodedSample = value;
162
+ }
163
+ /**
164
+ * Number of bits per raw sample.
165
+ *
166
+ * Bits per sample before compression/encoding.
167
+ * Only set when different from bitsPerCodedSample.
168
+ *
169
+ * Direct mapping to AVCodecParameters->bits_per_raw_sample.
170
+ */
171
+ get bitsPerRawSample() {
172
+ return this.native.bitsPerRawSample;
173
+ }
174
+ set bitsPerRawSample(value) {
175
+ this.native.bitsPerRawSample = value;
176
+ }
149
177
  /**
150
178
  * Codec profile.
151
179
  *
@@ -330,6 +358,65 @@ export class CodecParameters {
330
358
  set sampleRate(value) {
331
359
  this.native.sampleRate = value;
332
360
  }
361
+ /**
362
+ * Audio frame size in samples.
363
+ *
364
+ * Number of samples per audio frame for codecs with constant frame size.
365
+ * For AAC this is typically 1024, for MP3 it's 1152.
366
+ * For codecs with variable frame size, this may be 0.
367
+ *
368
+ * Direct mapping to AVCodecParameters->frame_size.
369
+ */
370
+ get frameSize() {
371
+ return this.native.frameSize;
372
+ }
373
+ set frameSize(value) {
374
+ this.native.frameSize = value;
375
+ }
376
+ /**
377
+ * Initial audio padding.
378
+ *
379
+ * Amount of padding (priming) samples at the beginning of the audio stream.
380
+ * For AAC encoding, this is typically 1024 samples.
381
+ * The muxer uses this value to correctly calculate packet timestamps.
382
+ *
383
+ * Direct mapping to AVCodecParameters->initial_padding.
384
+ */
385
+ get initialPadding() {
386
+ return this.native.initialPadding;
387
+ }
388
+ set initialPadding(value) {
389
+ this.native.initialPadding = value;
390
+ }
391
+ /**
392
+ * Video delay in frames.
393
+ *
394
+ * Number of frames the decoded output will be delayed relative to the encoded input.
395
+ * Used for timestamp correction in video streams.
396
+ *
397
+ * Direct mapping to AVCodecParameters->video_delay.
398
+ */
399
+ get videoDelay() {
400
+ return this.native.videoDelay;
401
+ }
402
+ set videoDelay(value) {
403
+ this.native.videoDelay = value;
404
+ }
405
+ /**
406
+ * Number of coded side data entries.
407
+ *
408
+ * Returns the count of coded side data attached to codec parameters.
409
+ *
410
+ * @returns Number of side data entries
411
+ *
412
+ * @example
413
+ * ```typescript
414
+ * console.log(`Codec has ${params.nbCodedSideData} side data entries`);
415
+ * ```
416
+ */
417
+ get nbCodedSideData() {
418
+ return this.native.nbCodedSideData;
419
+ }
333
420
  /**
334
421
  * Allocate codec parameters.
335
422
  *
@@ -449,6 +536,40 @@ export class CodecParameters {
449
536
  toContext(codecContext) {
450
537
  return this.native.toContext(codecContext.getNative());
451
538
  }
539
+ /**
540
+ * Parse extradata to extract codec parameters.
541
+ *
542
+ * Opens a decoder to parse extradata (SPS/PPS for H.264, etc.) and extract
543
+ * codec parameters like width/height for video or sample_rate for audio.
544
+ * This is used when extradata exists (e.g., from SDP sprop-parameter-sets)
545
+ * but dimensions are missing due to insufficient probesize.
546
+ *
547
+ * Uses FFmpeg's decoder to parse extradata, same as avformat_find_stream_info()
548
+ * does internally. Works for all codecs (H.264, H.265, VP9, AV1, etc.).
549
+ *
550
+ * @returns 0 on success, negative error code on failure
551
+ *
552
+ * @example
553
+ * ```typescript
554
+ * import { FFmpegError } from 'node-av';
555
+ *
556
+ * // After opening RTSP with low probesize
557
+ * const input = await Demuxer.open('rtsp://...', {
558
+ * options: { probesize: 32 }
559
+ * });
560
+ *
561
+ * const stream = input.video();
562
+ * if (stream.codecpar.width === 0 && stream.codecpar.extradata) {
563
+ * // Parse extradata to get dimensions
564
+ * const ret = stream.codecpar.parseExtradata();
565
+ * FFmpegError.throwIfError(ret, 'parseExtradata');
566
+ * console.log(`Dimensions: ${stream.codecpar.width}x${stream.codecpar.height}`);
567
+ * }
568
+ * ```
569
+ */
570
+ parseExtradata() {
571
+ return this.native.parseExtradata();
572
+ }
452
573
  /**
453
574
  * Convert to JSON representation.
454
575
  *
@@ -466,6 +587,94 @@ export class CodecParameters {
466
587
  toJSON() {
467
588
  return this.native.toJSON();
468
589
  }
590
+ /**
591
+ * Get coded side data.
592
+ *
593
+ * Retrieves additional data associated with the codec parameters
594
+ * (e.g., HDR metadata, Dolby Vision configuration, mastering display).
595
+ *
596
+ * Direct mapping to accessing AVCodecParameters.coded_side_data.
597
+ *
598
+ * @param type - Type of side data to retrieve
599
+ *
600
+ * @returns Side data buffer, or null if not present
601
+ *
602
+ * @example
603
+ * ```typescript
604
+ * import { AV_PKT_DATA_MASTERING_DISPLAY_METADATA } from 'node-av/constants';
605
+ *
606
+ * // Get HDR mastering display metadata
607
+ * const hdrData = params.getCodedSideData(AV_PKT_DATA_MASTERING_DISPLAY_METADATA);
608
+ * if (hdrData) {
609
+ * console.log(`HDR metadata: ${hdrData.length} bytes`);
610
+ * }
611
+ * ```
612
+ *
613
+ * @see {@link addCodedSideData} To add side data
614
+ * @see {@link nbCodedSideData} For count of side data entries
615
+ */
616
+ getCodedSideData(type) {
617
+ return this.native.getCodedSideData(type);
618
+ }
619
+ /**
620
+ * Get all coded side data entries.
621
+ *
622
+ * Returns all side data attached to the codec parameters.
623
+ * Each entry contains the type and data buffer.
624
+ * This allows iteration over all side data like FFmpeg CLI does.
625
+ *
626
+ * Direct mapping to accessing AVCodecParameters.coded_side_data array.
627
+ *
628
+ * @returns Array of side data entries with type and data
629
+ *
630
+ * @example
631
+ * ```typescript
632
+ * // Iterate all side data like FFmpeg does (ffmpeg_mux_init.c)
633
+ * const allSideData = params.getAllCodedSideData();
634
+ * for (const sd of allSideData) {
635
+ * console.log(`Type: ${sd.type}, Size: ${sd.data.length}`);
636
+ * // Copy to output stream
637
+ * outParams.addCodedSideData(sd.type, sd.data);
638
+ * }
639
+ * ```
640
+ *
641
+ * @see {@link getCodedSideData} To get specific side data by type
642
+ * @see {@link addCodedSideData} To add side data
643
+ * @see {@link nbCodedSideData} For count of side data entries
644
+ */
645
+ getAllCodedSideData() {
646
+ return this.native.getAllCodedSideData();
647
+ }
648
+ /**
649
+ * Add coded side data to codec parameters.
650
+ *
651
+ * Attaches additional data to the codec parameters. The data is copied.
652
+ * Commonly used for HDR metadata, Dolby Vision configuration, etc.
653
+ *
654
+ * Direct mapping to av_packet_side_data_add() for coded_side_data.
655
+ *
656
+ * @param type - Type of side data
657
+ *
658
+ * @param data - Side data buffer
659
+ *
660
+ * @returns 0 on success, negative AVERROR on error
661
+ *
662
+ * @example
663
+ * ```typescript
664
+ * import { FFmpegError } from 'node-av';
665
+ * import { AV_PKT_DATA_DOVI_CONF } from 'node-av/constants';
666
+ *
667
+ * // Add Dolby Vision configuration
668
+ * const doviConf = Buffer.from([...]); // Dolby Vision config data
669
+ * const ret = params.addCodedSideData(AV_PKT_DATA_DOVI_CONF, doviConf);
670
+ * FFmpegError.throwIfError(ret, 'addCodedSideData');
671
+ * ```
672
+ *
673
+ * @see {@link getCodedSideData} To retrieve side data
674
+ */
675
+ addCodedSideData(type, data) {
676
+ return this.native.addCodedSideData(type, data);
677
+ }
469
678
  /**
470
679
  * Get the underlying native CodecParameters object.
471
680
  *
@@ -1 +1 @@
1
- {"version":3,"file":"codec-parameters.js","sourceRoot":"","sources":["../../src/lib/codec-parameters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codec-parameters.js","sourceRoot":"","sources":["../../src/lib/codec-parameters.ts"],"names":[],"mappings":"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"}
@@ -133,6 +133,29 @@ export declare class CodecParser implements Disposable, NativeWrapper<NativeCode
133
133
  * @see {@link init} To initialize parser
134
134
  */
135
135
  parse2(codecContext: CodecContext, packet: Packet, data: Buffer, pts: bigint, dts: bigint, pos: number): number;
136
+ /**
137
+ * Number of pictures to repeat for field-based interlaced content.
138
+ *
139
+ * Used to calculate frame duration for interlaced video:
140
+ * `frame_duration = (1 + repeat_pict) * time_base`
141
+ *
142
+ * Commonly used in H.264 to display telecined material.
143
+ * Value comes from the codec parser after parsing a frame.
144
+ *
145
+ * Direct mapping to AVCodecParserContext.repeat_pict.
146
+ *
147
+ * @returns Repeat picture count (0 for progressive, >0 for interlaced)
148
+ *
149
+ * @example
150
+ * ```typescript
151
+ * const parser = stream.parser;
152
+ * if (parser) {
153
+ * const fields = 1 + parser.repeatPict;
154
+ * console.log(`Frame uses ${fields} fields`);
155
+ * }
156
+ * ```
157
+ */
158
+ get repeatPict(): number;
136
159
  /**
137
160
  * Close the codec parser.
138
161
  *
@@ -136,6 +136,31 @@ export class CodecParser {
136
136
  parse2(codecContext, packet, data, pts, dts, pos) {
137
137
  return this.native.parse2(codecContext.getNative(), packet.getNative(), data, pts, dts, pos);
138
138
  }
139
+ /**
140
+ * Number of pictures to repeat for field-based interlaced content.
141
+ *
142
+ * Used to calculate frame duration for interlaced video:
143
+ * `frame_duration = (1 + repeat_pict) * time_base`
144
+ *
145
+ * Commonly used in H.264 to display telecined material.
146
+ * Value comes from the codec parser after parsing a frame.
147
+ *
148
+ * Direct mapping to AVCodecParserContext.repeat_pict.
149
+ *
150
+ * @returns Repeat picture count (0 for progressive, >0 for interlaced)
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * const parser = stream.parser;
155
+ * if (parser) {
156
+ * const fields = 1 + parser.repeatPict;
157
+ * console.log(`Frame uses ${fields} fields`);
158
+ * }
159
+ * ```
160
+ */
161
+ get repeatPict() {
162
+ return this.native.repeatPict;
163
+ }
139
164
  /**
140
165
  * Close the codec parser.
141
166
  *
@@ -1 +1 @@
1
- {"version":3,"file":"codec-parser.js","sourceRoot":"","sources":["../../src/lib/codec-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAOxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,OAAO,WAAW;IACd,MAAM,CAAoB;IAElC;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC3C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,IAAI,CAAC,OAAkB;QACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwDG;IACH,MAAM,CAAC,YAA0B,EAAE,MAAc,EAAE,IAAY,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW;QACpG,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/F,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED;;;;;;OAMG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,CAAC,MAAM,CAAC,OAAO,CAAC;QACd,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;CACF"}
1
+ {"version":3,"file":"codec-parser.js","sourceRoot":"","sources":["../../src/lib/codec-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAOxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,OAAO,WAAW;IACd,MAAM,CAAoB;IAElC;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC3C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,IAAI,CAAC,OAAkB;QACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwDG;IACH,MAAM,CAAC,YAA0B,EAAE,MAAc,EAAE,IAAY,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW;QACpG,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/F,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IAChC,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED;;;;;;OAMG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,CAAC,MAAM,CAAC,OAAO,CAAC;QACd,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;CACF"}
@@ -2,6 +2,7 @@ import { Rational } from './rational.js';
2
2
  import type { AVCodecCap, AVCodecID, AVHWDeviceType, AVMediaType, AVPixelFormat, AVSampleFormat } from '../constants/constants.js';
3
3
  import type { FFDecoderCodec } from '../constants/decoders.js';
4
4
  import type { FFEncoderCodec } from '../constants/encoders.js';
5
+ import type { FFHWDeviceType } from '../constants/hardware.js';
5
6
  import type { NativeCodec, NativeWrapper } from './native-types.js';
6
7
  import type { ChannelLayout, CodecProfile } from './types.js';
7
8
  /**
@@ -260,6 +261,27 @@ export declare class Codec implements NativeWrapper<NativeCodec> {
260
261
  * Direct mapping to AVCodec->capabilities.
261
262
  */
262
263
  get capabilities(): AVCodecCap;
264
+ /**
265
+ * Check if codec has specific capabilities.
266
+ *
267
+ * Tests whether all specified capabilities are present using bitwise AND.
268
+ *
269
+ * @param caps - One or more capability values to check
270
+ *
271
+ * @returns true if all specified capabilities are present, false otherwise
272
+ *
273
+ * @example
274
+ * ```typescript
275
+ * import { AV_CODEC_CAP_HARDWARE } from 'node-av/constants';
276
+ *
277
+ * if (codec.hasCapabilities(AV_CODEC_CAP_HARDWARE)) {
278
+ * console.log('This codec supports hardware acceleration');
279
+ * }
280
+ * ```
281
+ *
282
+ * @see {@link capabilities} For direct capabilities access
283
+ */
284
+ hasCapabilities(...caps: AVCodecCap[]): boolean;
263
285
  /**
264
286
  * Maximum lowres value.
265
287
  *
@@ -413,7 +435,7 @@ export declare class Codec implements NativeWrapper<NativeCodec> {
413
435
  *
414
436
  * @see {@link getSupportedDeviceTypes} For all supported types
415
437
  */
416
- supportsDevice(deviceType: AVHWDeviceType): boolean;
438
+ supportsDevice(deviceType: AVHWDeviceType | FFHWDeviceType): boolean;
417
439
  /**
418
440
  * Check if decoder supports hardware acceleration.
419
441
  *
@@ -436,7 +458,7 @@ export declare class Codec implements NativeWrapper<NativeCodec> {
436
458
  * }
437
459
  * ```
438
460
  */
439
- isHardwareAcceleratedDecoder(deviceType?: AVHWDeviceType): boolean;
461
+ isHardwareAcceleratedDecoder(deviceType?: AVHWDeviceType | FFHWDeviceType): boolean;
440
462
  /**
441
463
  * Check if encoder supports hardware acceleration.
442
464
  *
@@ -459,7 +481,7 @@ export declare class Codec implements NativeWrapper<NativeCodec> {
459
481
  * }
460
482
  * ```
461
483
  */
462
- isHardwareAcceleratedEncoder(deviceType?: AVHWDeviceType): boolean;
484
+ isHardwareAcceleratedEncoder(deviceType?: AVHWDeviceType | FFHWDeviceType): boolean;
463
485
  /**
464
486
  * Get supported hardware device types.
465
487
  *
@@ -503,7 +525,7 @@ export declare class Codec implements NativeWrapper<NativeCodec> {
503
525
  * }
504
526
  * ```
505
527
  */
506
- getHardwareMethod(deviceType: AVHWDeviceType): number | null;
528
+ getHardwareMethod(deviceType: AVHWDeviceType | FFHWDeviceType): number | null;
507
529
  /**
508
530
  * Get hardware configuration at index.
509
531
  *
package/dist/lib/codec.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX, AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX } from '../constants/constants.js';
2
2
  import { bindings } from './binding.js';
3
3
  import { Rational } from './rational.js';
4
+ import { avGetHardwareDeviceTypeFromName } from './utilities.js';
4
5
  /**
5
6
  * Codec descriptor for audio/video encoding and decoding.
6
7
  *
@@ -289,6 +290,34 @@ export class Codec {
289
290
  get capabilities() {
290
291
  return this.native.capabilities;
291
292
  }
293
+ /**
294
+ * Check if codec has specific capabilities.
295
+ *
296
+ * Tests whether all specified capabilities are present using bitwise AND.
297
+ *
298
+ * @param caps - One or more capability values to check
299
+ *
300
+ * @returns true if all specified capabilities are present, false otherwise
301
+ *
302
+ * @example
303
+ * ```typescript
304
+ * import { AV_CODEC_CAP_HARDWARE } from 'node-av/constants';
305
+ *
306
+ * if (codec.hasCapabilities(AV_CODEC_CAP_HARDWARE)) {
307
+ * console.log('This codec supports hardware acceleration');
308
+ * }
309
+ * ```
310
+ *
311
+ * @see {@link capabilities} For direct capabilities access
312
+ */
313
+ hasCapabilities(...caps) {
314
+ for (const cap of caps) {
315
+ if ((this.native.capabilities & cap) !== cap) {
316
+ return false;
317
+ }
318
+ }
319
+ return true;
320
+ }
292
321
  /**
293
322
  * Maximum lowres value.
294
323
  *
@@ -486,6 +515,9 @@ export class Codec {
486
515
  const config = this.getHwConfig(i);
487
516
  if (!config)
488
517
  break;
518
+ if (typeof deviceType === 'string') {
519
+ deviceType = avGetHardwareDeviceTypeFromName(deviceType);
520
+ }
489
521
  // Check if this config is for the requested device type
490
522
  if (config.deviceType === deviceType) {
491
523
  // Check if it has any valid hardware method
@@ -616,6 +648,9 @@ export class Codec {
616
648
  const config = this.getHwConfig(i);
617
649
  if (!config)
618
650
  break;
651
+ if (typeof deviceType === 'string') {
652
+ deviceType = avGetHardwareDeviceTypeFromName(deviceType);
653
+ }
619
654
  if (config.deviceType === deviceType) {
620
655
  return config.methods;
621
656
  }