node-av 3.1.3 → 5.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 (192) hide show
  1. package/README.md +88 -52
  2. package/binding.gyp +23 -11
  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 +320 -78
  7. package/dist/api/bitstream-filter.js +684 -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 +454 -77
  17. package/dist/api/decoder.js +1081 -271
  18. package/dist/api/decoder.js.map +1 -1
  19. package/dist/api/{media-input.d.ts → demuxer.d.ts} +295 -45
  20. package/dist/api/demuxer.js +1965 -0
  21. package/dist/api/demuxer.js.map +1 -0
  22. package/dist/api/encoder.d.ts +423 -132
  23. package/dist/api/encoder.js +1089 -240
  24. package/dist/api/encoder.js.map +1 -1
  25. package/dist/api/filter-complex.d.ts +769 -0
  26. package/dist/api/filter-complex.js +1596 -0
  27. package/dist/api/filter-complex.js.map +1 -0
  28. package/dist/api/filter-presets.d.ts +80 -5
  29. package/dist/api/filter-presets.js +117 -7
  30. package/dist/api/filter-presets.js.map +1 -1
  31. package/dist/api/filter.d.ts +561 -125
  32. package/dist/api/filter.js +1083 -274
  33. package/dist/api/filter.js.map +1 -1
  34. package/dist/api/{fmp4.d.ts → fmp4-stream.d.ts} +141 -140
  35. package/dist/api/fmp4-stream.js +539 -0
  36. package/dist/api/fmp4-stream.js.map +1 -0
  37. package/dist/api/hardware.d.ts +58 -6
  38. package/dist/api/hardware.js +127 -11
  39. package/dist/api/hardware.js.map +1 -1
  40. package/dist/api/index.d.ts +8 -4
  41. package/dist/api/index.js +17 -8
  42. package/dist/api/index.js.map +1 -1
  43. package/dist/api/io-stream.d.ts +6 -6
  44. package/dist/api/io-stream.js +5 -4
  45. package/dist/api/io-stream.js.map +1 -1
  46. package/dist/api/{media-output.d.ts → muxer.d.ts} +280 -66
  47. package/dist/api/muxer.js +1934 -0
  48. package/dist/api/muxer.js.map +1 -0
  49. package/dist/api/pipeline.d.ts +77 -29
  50. package/dist/api/pipeline.js +449 -439
  51. package/dist/api/pipeline.js.map +1 -1
  52. package/dist/api/rtp-stream.d.ts +312 -0
  53. package/dist/api/rtp-stream.js +630 -0
  54. package/dist/api/rtp-stream.js.map +1 -0
  55. package/dist/api/types.d.ts +533 -56
  56. package/dist/api/utilities/async-queue.d.ts +91 -0
  57. package/dist/api/utilities/async-queue.js +162 -0
  58. package/dist/api/utilities/async-queue.js.map +1 -0
  59. package/dist/api/utilities/audio-sample.d.ts +11 -1
  60. package/dist/api/utilities/audio-sample.js +10 -0
  61. package/dist/api/utilities/audio-sample.js.map +1 -1
  62. package/dist/api/utilities/channel-layout.d.ts +1 -0
  63. package/dist/api/utilities/channel-layout.js +1 -0
  64. package/dist/api/utilities/channel-layout.js.map +1 -1
  65. package/dist/api/utilities/image.d.ts +39 -1
  66. package/dist/api/utilities/image.js +38 -0
  67. package/dist/api/utilities/image.js.map +1 -1
  68. package/dist/api/utilities/index.d.ts +3 -0
  69. package/dist/api/utilities/index.js +6 -0
  70. package/dist/api/utilities/index.js.map +1 -1
  71. package/dist/api/utilities/media-type.d.ts +2 -1
  72. package/dist/api/utilities/media-type.js +1 -0
  73. package/dist/api/utilities/media-type.js.map +1 -1
  74. package/dist/api/utilities/pixel-format.d.ts +4 -1
  75. package/dist/api/utilities/pixel-format.js +3 -0
  76. package/dist/api/utilities/pixel-format.js.map +1 -1
  77. package/dist/api/utilities/sample-format.d.ts +6 -1
  78. package/dist/api/utilities/sample-format.js +5 -0
  79. package/dist/api/utilities/sample-format.js.map +1 -1
  80. package/dist/api/utilities/scheduler.d.ts +138 -0
  81. package/dist/api/utilities/scheduler.js +98 -0
  82. package/dist/api/utilities/scheduler.js.map +1 -0
  83. package/dist/api/utilities/streaming.d.ts +105 -15
  84. package/dist/api/utilities/streaming.js +201 -12
  85. package/dist/api/utilities/streaming.js.map +1 -1
  86. package/dist/api/utilities/timestamp.d.ts +15 -1
  87. package/dist/api/utilities/timestamp.js +14 -0
  88. package/dist/api/utilities/timestamp.js.map +1 -1
  89. package/dist/api/utilities/whisper-model.d.ts +310 -0
  90. package/dist/api/utilities/whisper-model.js +528 -0
  91. package/dist/api/utilities/whisper-model.js.map +1 -0
  92. package/dist/api/webrtc-stream.d.ts +288 -0
  93. package/dist/api/webrtc-stream.js +440 -0
  94. package/dist/api/webrtc-stream.js.map +1 -0
  95. package/dist/api/whisper.d.ts +324 -0
  96. package/dist/api/whisper.js +362 -0
  97. package/dist/api/whisper.js.map +1 -0
  98. package/dist/constants/constants.d.ts +54 -2
  99. package/dist/constants/constants.js +48 -1
  100. package/dist/constants/constants.js.map +1 -1
  101. package/dist/constants/encoders.d.ts +2 -1
  102. package/dist/constants/encoders.js +4 -3
  103. package/dist/constants/encoders.js.map +1 -1
  104. package/dist/constants/hardware.d.ts +26 -0
  105. package/dist/constants/hardware.js +27 -0
  106. package/dist/constants/hardware.js.map +1 -0
  107. package/dist/constants/index.d.ts +1 -0
  108. package/dist/constants/index.js +1 -0
  109. package/dist/constants/index.js.map +1 -1
  110. package/dist/ffmpeg/index.d.ts +3 -3
  111. package/dist/ffmpeg/index.js +3 -3
  112. package/dist/ffmpeg/utils.d.ts +27 -0
  113. package/dist/ffmpeg/utils.js +28 -16
  114. package/dist/ffmpeg/utils.js.map +1 -1
  115. package/dist/lib/binding.d.ts +22 -11
  116. package/dist/lib/binding.js.map +1 -1
  117. package/dist/lib/codec-context.d.ts +87 -0
  118. package/dist/lib/codec-context.js +125 -4
  119. package/dist/lib/codec-context.js.map +1 -1
  120. package/dist/lib/codec-parameters.d.ts +229 -1
  121. package/dist/lib/codec-parameters.js +264 -0
  122. package/dist/lib/codec-parameters.js.map +1 -1
  123. package/dist/lib/codec-parser.d.ts +23 -0
  124. package/dist/lib/codec-parser.js +25 -0
  125. package/dist/lib/codec-parser.js.map +1 -1
  126. package/dist/lib/codec.d.ts +26 -4
  127. package/dist/lib/codec.js +35 -0
  128. package/dist/lib/codec.js.map +1 -1
  129. package/dist/lib/dictionary.js +1 -0
  130. package/dist/lib/dictionary.js.map +1 -1
  131. package/dist/lib/error.js +1 -1
  132. package/dist/lib/error.js.map +1 -1
  133. package/dist/lib/fifo.d.ts +416 -0
  134. package/dist/lib/fifo.js +453 -0
  135. package/dist/lib/fifo.js.map +1 -0
  136. package/dist/lib/filter-context.d.ts +52 -11
  137. package/dist/lib/filter-context.js +56 -12
  138. package/dist/lib/filter-context.js.map +1 -1
  139. package/dist/lib/filter-graph.d.ts +9 -0
  140. package/dist/lib/filter-graph.js +13 -0
  141. package/dist/lib/filter-graph.js.map +1 -1
  142. package/dist/lib/filter.d.ts +21 -0
  143. package/dist/lib/filter.js +28 -0
  144. package/dist/lib/filter.js.map +1 -1
  145. package/dist/lib/format-context.d.ts +48 -14
  146. package/dist/lib/format-context.js +76 -7
  147. package/dist/lib/format-context.js.map +1 -1
  148. package/dist/lib/frame.d.ts +264 -1
  149. package/dist/lib/frame.js +351 -1
  150. package/dist/lib/frame.js.map +1 -1
  151. package/dist/lib/hardware-device-context.d.ts +3 -2
  152. package/dist/lib/hardware-device-context.js.map +1 -1
  153. package/dist/lib/index.d.ts +2 -0
  154. package/dist/lib/index.js +4 -0
  155. package/dist/lib/index.js.map +1 -1
  156. package/dist/lib/input-format.d.ts +21 -0
  157. package/dist/lib/input-format.js +42 -2
  158. package/dist/lib/input-format.js.map +1 -1
  159. package/dist/lib/native-types.d.ts +76 -27
  160. package/dist/lib/option.d.ts +25 -13
  161. package/dist/lib/option.js +28 -0
  162. package/dist/lib/option.js.map +1 -1
  163. package/dist/lib/output-format.d.ts +22 -1
  164. package/dist/lib/output-format.js +28 -0
  165. package/dist/lib/output-format.js.map +1 -1
  166. package/dist/lib/packet.d.ts +35 -0
  167. package/dist/lib/packet.js +52 -2
  168. package/dist/lib/packet.js.map +1 -1
  169. package/dist/lib/rational.d.ts +18 -0
  170. package/dist/lib/rational.js +19 -0
  171. package/dist/lib/rational.js.map +1 -1
  172. package/dist/lib/stream.d.ts +126 -0
  173. package/dist/lib/stream.js +188 -5
  174. package/dist/lib/stream.js.map +1 -1
  175. package/dist/lib/sync-queue.d.ts +179 -0
  176. package/dist/lib/sync-queue.js +197 -0
  177. package/dist/lib/sync-queue.js.map +1 -0
  178. package/dist/lib/types.d.ts +49 -1
  179. package/dist/lib/utilities.d.ts +281 -53
  180. package/dist/lib/utilities.js +298 -55
  181. package/dist/lib/utilities.js.map +1 -1
  182. package/install/check.js +2 -2
  183. package/package.json +37 -26
  184. package/dist/api/fmp4.js +0 -710
  185. package/dist/api/fmp4.js.map +0 -1
  186. package/dist/api/media-input.js +0 -1075
  187. package/dist/api/media-input.js.map +0 -1
  188. package/dist/api/media-output.js +0 -1040
  189. package/dist/api/media-output.js.map +0 -1
  190. package/dist/api/webrtc.d.ts +0 -664
  191. package/dist/api/webrtc.js +0 -1132
  192. 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, AVCodecProp, 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,97 @@ 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;
306
+ /**
307
+ * Codec properties.
308
+ *
309
+ * Bitfield of AV_CODEC_PROP_* flags indicating codec features.
310
+ *
311
+ * Direct mapping to AVCodecDescriptor->props.
312
+ *
313
+ * @example
314
+ * ```typescript
315
+ * import { AV_CODEC_PROP_FIELDS } from 'node-av/constants';
316
+ *
317
+ * const props = params.codecProperties;
318
+ * if (props & AV_CODEC_PROP_FIELDS) {
319
+ * console.log('Codec supports interlaced video (fields)');
320
+ * }
321
+ * ```
322
+ *
323
+ * @see {@link hasProperties} For checking specific properties
324
+ */
325
+ get codecProperties(): AVCodecProp;
326
+ /**
327
+ * Check if codec has specific properties.
328
+ *
329
+ * Tests whether all specified properties are present using bitwise AND.
330
+ *
331
+ * @param props - One or more property values to check
332
+ *
333
+ * @returns true if all specified properties are present, false otherwise
334
+ *
335
+ * @example
336
+ * ```typescript
337
+ * import { AV_CODEC_PROP_FIELDS, AV_CODEC_PROP_REORDER } from 'node-av/constants';
338
+ *
339
+ * if (params.hasProperties(AV_CODEC_PROP_FIELDS)) {
340
+ * console.log('Codec supports interlaced video (fields)');
341
+ * }
342
+ *
343
+ * // Check multiple properties
344
+ * if (params.hasProperties(AV_CODEC_PROP_LOSSY, AV_CODEC_PROP_REORDER)) {
345
+ * console.log('Codec is lossy and supports frame reordering');
346
+ * }
347
+ * ```
348
+ *
349
+ * @see {@link codecProperties} For direct properties access
350
+ */
351
+ hasProperties(...props: AVCodecProp[]): boolean;
241
352
  /**
242
353
  * Allocate codec parameters.
243
354
  *
@@ -347,6 +458,38 @@ export declare class CodecParameters implements NativeWrapper<NativeCodecParamet
347
458
  * @see {@link fromContext} To extract from context
348
459
  */
349
460
  toContext(codecContext: CodecContext): number;
461
+ /**
462
+ * Parse extradata to extract codec parameters.
463
+ *
464
+ * Opens a decoder to parse extradata (SPS/PPS for H.264, etc.) and extract
465
+ * codec parameters like width/height for video or sample_rate for audio.
466
+ * This is used when extradata exists (e.g., from SDP sprop-parameter-sets)
467
+ * but dimensions are missing due to insufficient probesize.
468
+ *
469
+ * Uses FFmpeg's decoder to parse extradata, same as avformat_find_stream_info()
470
+ * does internally. Works for all codecs (H.264, H.265, VP9, AV1, etc.).
471
+ *
472
+ * @returns 0 on success, negative error code on failure
473
+ *
474
+ * @example
475
+ * ```typescript
476
+ * import { FFmpegError } from 'node-av';
477
+ *
478
+ * // After opening RTSP with low probesize
479
+ * const input = await Demuxer.open('rtsp://...', {
480
+ * options: { probesize: 32 }
481
+ * });
482
+ *
483
+ * const stream = input.video();
484
+ * if (stream.codecpar.width === 0 && stream.codecpar.extradata) {
485
+ * // Parse extradata to get dimensions
486
+ * const ret = stream.codecpar.parseExtradata();
487
+ * FFmpegError.throwIfError(ret, 'parseExtradata');
488
+ * console.log(`Dimensions: ${stream.codecpar.width}x${stream.codecpar.height}`);
489
+ * }
490
+ * ```
491
+ */
492
+ parseExtradata(): number;
350
493
  /**
351
494
  * Convert to JSON representation.
352
495
  *
@@ -362,6 +505,91 @@ export declare class CodecParameters implements NativeWrapper<NativeCodecParamet
362
505
  * ```
363
506
  */
364
507
  toJSON(): Record<string, any>;
508
+ /**
509
+ * Get coded side data.
510
+ *
511
+ * Retrieves additional data associated with the codec parameters
512
+ * (e.g., HDR metadata, Dolby Vision configuration, mastering display).
513
+ *
514
+ * Direct mapping to accessing AVCodecParameters.coded_side_data.
515
+ *
516
+ * @param type - Type of side data to retrieve
517
+ *
518
+ * @returns Side data buffer, or null if not present
519
+ *
520
+ * @example
521
+ * ```typescript
522
+ * import { AV_PKT_DATA_MASTERING_DISPLAY_METADATA } from 'node-av/constants';
523
+ *
524
+ * // Get HDR mastering display metadata
525
+ * const hdrData = params.getCodedSideData(AV_PKT_DATA_MASTERING_DISPLAY_METADATA);
526
+ * if (hdrData) {
527
+ * console.log(`HDR metadata: ${hdrData.length} bytes`);
528
+ * }
529
+ * ```
530
+ *
531
+ * @see {@link addCodedSideData} To add side data
532
+ * @see {@link nbCodedSideData} For count of side data entries
533
+ */
534
+ getCodedSideData(type: AVPacketSideDataType): Buffer | null;
535
+ /**
536
+ * Get all coded side data entries.
537
+ *
538
+ * Returns all side data attached to the codec parameters.
539
+ * Each entry contains the type and data buffer.
540
+ * This allows iteration over all side data like FFmpeg CLI does.
541
+ *
542
+ * Direct mapping to accessing AVCodecParameters.coded_side_data array.
543
+ *
544
+ * @returns Array of side data entries with type and data
545
+ *
546
+ * @example
547
+ * ```typescript
548
+ * // Iterate all side data like FFmpeg does (ffmpeg_mux_init.c)
549
+ * const allSideData = params.getAllCodedSideData();
550
+ * for (const sd of allSideData) {
551
+ * console.log(`Type: ${sd.type}, Size: ${sd.data.length}`);
552
+ * // Copy to output stream
553
+ * outParams.addCodedSideData(sd.type, sd.data);
554
+ * }
555
+ * ```
556
+ *
557
+ * @see {@link getCodedSideData} To get specific side data by type
558
+ * @see {@link addCodedSideData} To add side data
559
+ * @see {@link nbCodedSideData} For count of side data entries
560
+ */
561
+ getAllCodedSideData(): {
562
+ type: AVPacketSideDataType;
563
+ data: Buffer;
564
+ }[];
565
+ /**
566
+ * Add coded side data to codec parameters.
567
+ *
568
+ * Attaches additional data to the codec parameters. The data is copied.
569
+ * Commonly used for HDR metadata, Dolby Vision configuration, etc.
570
+ *
571
+ * Direct mapping to av_packet_side_data_add() for coded_side_data.
572
+ *
573
+ * @param type - Type of side data
574
+ *
575
+ * @param data - Side data buffer
576
+ *
577
+ * @returns 0 on success, negative AVERROR on error
578
+ *
579
+ * @example
580
+ * ```typescript
581
+ * import { FFmpegError } from 'node-av';
582
+ * import { AV_PKT_DATA_DOVI_CONF } from 'node-av/constants';
583
+ *
584
+ * // Add Dolby Vision configuration
585
+ * const doviConf = Buffer.from([...]); // Dolby Vision config data
586
+ * const ret = params.addCodedSideData(AV_PKT_DATA_DOVI_CONF, doviConf);
587
+ * FFmpegError.throwIfError(ret, 'addCodedSideData');
588
+ * ```
589
+ *
590
+ * @see {@link getCodedSideData} To retrieve side data
591
+ */
592
+ addCodedSideData(type: AVPacketSideDataType, data: Buffer): number;
365
593
  /**
366
594
  * Get the underlying native CodecParameters object.
367
595
  *
@@ -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,120 @@ 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
+ }
420
+ /**
421
+ * Codec properties.
422
+ *
423
+ * Bitfield of AV_CODEC_PROP_* flags indicating codec features.
424
+ *
425
+ * Direct mapping to AVCodecDescriptor->props.
426
+ *
427
+ * @example
428
+ * ```typescript
429
+ * import { AV_CODEC_PROP_FIELDS } from 'node-av/constants';
430
+ *
431
+ * const props = params.codecProperties;
432
+ * if (props & AV_CODEC_PROP_FIELDS) {
433
+ * console.log('Codec supports interlaced video (fields)');
434
+ * }
435
+ * ```
436
+ *
437
+ * @see {@link hasProperties} For checking specific properties
438
+ */
439
+ get codecProperties() {
440
+ return this.native.codecProperties;
441
+ }
442
+ /**
443
+ * Check if codec has specific properties.
444
+ *
445
+ * Tests whether all specified properties are present using bitwise AND.
446
+ *
447
+ * @param props - One or more property values to check
448
+ *
449
+ * @returns true if all specified properties are present, false otherwise
450
+ *
451
+ * @example
452
+ * ```typescript
453
+ * import { AV_CODEC_PROP_FIELDS, AV_CODEC_PROP_REORDER } from 'node-av/constants';
454
+ *
455
+ * if (params.hasProperties(AV_CODEC_PROP_FIELDS)) {
456
+ * console.log('Codec supports interlaced video (fields)');
457
+ * }
458
+ *
459
+ * // Check multiple properties
460
+ * if (params.hasProperties(AV_CODEC_PROP_LOSSY, AV_CODEC_PROP_REORDER)) {
461
+ * console.log('Codec is lossy and supports frame reordering');
462
+ * }
463
+ * ```
464
+ *
465
+ * @see {@link codecProperties} For direct properties access
466
+ */
467
+ hasProperties(...props) {
468
+ for (const prop of props) {
469
+ if ((this.native.codecProperties & prop) !== prop) {
470
+ return false;
471
+ }
472
+ }
473
+ return true;
474
+ }
333
475
  /**
334
476
  * Allocate codec parameters.
335
477
  *
@@ -449,6 +591,40 @@ export class CodecParameters {
449
591
  toContext(codecContext) {
450
592
  return this.native.toContext(codecContext.getNative());
451
593
  }
594
+ /**
595
+ * Parse extradata to extract codec parameters.
596
+ *
597
+ * Opens a decoder to parse extradata (SPS/PPS for H.264, etc.) and extract
598
+ * codec parameters like width/height for video or sample_rate for audio.
599
+ * This is used when extradata exists (e.g., from SDP sprop-parameter-sets)
600
+ * but dimensions are missing due to insufficient probesize.
601
+ *
602
+ * Uses FFmpeg's decoder to parse extradata, same as avformat_find_stream_info()
603
+ * does internally. Works for all codecs (H.264, H.265, VP9, AV1, etc.).
604
+ *
605
+ * @returns 0 on success, negative error code on failure
606
+ *
607
+ * @example
608
+ * ```typescript
609
+ * import { FFmpegError } from 'node-av';
610
+ *
611
+ * // After opening RTSP with low probesize
612
+ * const input = await Demuxer.open('rtsp://...', {
613
+ * options: { probesize: 32 }
614
+ * });
615
+ *
616
+ * const stream = input.video();
617
+ * if (stream.codecpar.width === 0 && stream.codecpar.extradata) {
618
+ * // Parse extradata to get dimensions
619
+ * const ret = stream.codecpar.parseExtradata();
620
+ * FFmpegError.throwIfError(ret, 'parseExtradata');
621
+ * console.log(`Dimensions: ${stream.codecpar.width}x${stream.codecpar.height}`);
622
+ * }
623
+ * ```
624
+ */
625
+ parseExtradata() {
626
+ return this.native.parseExtradata();
627
+ }
452
628
  /**
453
629
  * Convert to JSON representation.
454
630
  *
@@ -466,6 +642,94 @@ export class CodecParameters {
466
642
  toJSON() {
467
643
  return this.native.toJSON();
468
644
  }
645
+ /**
646
+ * Get coded side data.
647
+ *
648
+ * Retrieves additional data associated with the codec parameters
649
+ * (e.g., HDR metadata, Dolby Vision configuration, mastering display).
650
+ *
651
+ * Direct mapping to accessing AVCodecParameters.coded_side_data.
652
+ *
653
+ * @param type - Type of side data to retrieve
654
+ *
655
+ * @returns Side data buffer, or null if not present
656
+ *
657
+ * @example
658
+ * ```typescript
659
+ * import { AV_PKT_DATA_MASTERING_DISPLAY_METADATA } from 'node-av/constants';
660
+ *
661
+ * // Get HDR mastering display metadata
662
+ * const hdrData = params.getCodedSideData(AV_PKT_DATA_MASTERING_DISPLAY_METADATA);
663
+ * if (hdrData) {
664
+ * console.log(`HDR metadata: ${hdrData.length} bytes`);
665
+ * }
666
+ * ```
667
+ *
668
+ * @see {@link addCodedSideData} To add side data
669
+ * @see {@link nbCodedSideData} For count of side data entries
670
+ */
671
+ getCodedSideData(type) {
672
+ return this.native.getCodedSideData(type);
673
+ }
674
+ /**
675
+ * Get all coded side data entries.
676
+ *
677
+ * Returns all side data attached to the codec parameters.
678
+ * Each entry contains the type and data buffer.
679
+ * This allows iteration over all side data like FFmpeg CLI does.
680
+ *
681
+ * Direct mapping to accessing AVCodecParameters.coded_side_data array.
682
+ *
683
+ * @returns Array of side data entries with type and data
684
+ *
685
+ * @example
686
+ * ```typescript
687
+ * // Iterate all side data like FFmpeg does (ffmpeg_mux_init.c)
688
+ * const allSideData = params.getAllCodedSideData();
689
+ * for (const sd of allSideData) {
690
+ * console.log(`Type: ${sd.type}, Size: ${sd.data.length}`);
691
+ * // Copy to output stream
692
+ * outParams.addCodedSideData(sd.type, sd.data);
693
+ * }
694
+ * ```
695
+ *
696
+ * @see {@link getCodedSideData} To get specific side data by type
697
+ * @see {@link addCodedSideData} To add side data
698
+ * @see {@link nbCodedSideData} For count of side data entries
699
+ */
700
+ getAllCodedSideData() {
701
+ return this.native.getAllCodedSideData();
702
+ }
703
+ /**
704
+ * Add coded side data to codec parameters.
705
+ *
706
+ * Attaches additional data to the codec parameters. The data is copied.
707
+ * Commonly used for HDR metadata, Dolby Vision configuration, etc.
708
+ *
709
+ * Direct mapping to av_packet_side_data_add() for coded_side_data.
710
+ *
711
+ * @param type - Type of side data
712
+ *
713
+ * @param data - Side data buffer
714
+ *
715
+ * @returns 0 on success, negative AVERROR on error
716
+ *
717
+ * @example
718
+ * ```typescript
719
+ * import { FFmpegError } from 'node-av';
720
+ * import { AV_PKT_DATA_DOVI_CONF } from 'node-av/constants';
721
+ *
722
+ * // Add Dolby Vision configuration
723
+ * const doviConf = Buffer.from([...]); // Dolby Vision config data
724
+ * const ret = params.addCodedSideData(AV_PKT_DATA_DOVI_CONF, doviConf);
725
+ * FFmpegError.throwIfError(ret, 'addCodedSideData');
726
+ * ```
727
+ *
728
+ * @see {@link getCodedSideData} To retrieve side data
729
+ */
730
+ addCodedSideData(type, data) {
731
+ return this.native.addCodedSideData(type, data);
732
+ }
469
733
  /**
470
734
  * Get the underlying native CodecParameters object.
471
735
  *
@@ -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"}