@revizly/node-av 5.2.2-beta.1

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 (254) hide show
  1. package/BUILD_LINUX.md +61 -0
  2. package/LICENSE.md +22 -0
  3. package/README.md +662 -0
  4. package/build_mac_local.sh +69 -0
  5. package/dist/api/audio-frame-buffer.d.ts +205 -0
  6. package/dist/api/audio-frame-buffer.js +287 -0
  7. package/dist/api/audio-frame-buffer.js.map +1 -0
  8. package/dist/api/bitstream-filter.d.ts +820 -0
  9. package/dist/api/bitstream-filter.js +1242 -0
  10. package/dist/api/bitstream-filter.js.map +1 -0
  11. package/dist/api/constants.d.ts +44 -0
  12. package/dist/api/constants.js +45 -0
  13. package/dist/api/constants.js.map +1 -0
  14. package/dist/api/data/test_av1.ivf +0 -0
  15. package/dist/api/data/test_h264.h264 +0 -0
  16. package/dist/api/data/test_hevc.h265 +0 -0
  17. package/dist/api/data/test_mjpeg.mjpeg +0 -0
  18. package/dist/api/data/test_vp8.ivf +0 -0
  19. package/dist/api/data/test_vp9.ivf +0 -0
  20. package/dist/api/decoder.d.ts +1088 -0
  21. package/dist/api/decoder.js +1775 -0
  22. package/dist/api/decoder.js.map +1 -0
  23. package/dist/api/demuxer.d.ts +1219 -0
  24. package/dist/api/demuxer.js +2081 -0
  25. package/dist/api/demuxer.js.map +1 -0
  26. package/dist/api/device.d.ts +586 -0
  27. package/dist/api/device.js +961 -0
  28. package/dist/api/device.js.map +1 -0
  29. package/dist/api/encoder.d.ts +1132 -0
  30. package/dist/api/encoder.js +1988 -0
  31. package/dist/api/encoder.js.map +1 -0
  32. package/dist/api/filter-complex.d.ts +821 -0
  33. package/dist/api/filter-complex.js +1604 -0
  34. package/dist/api/filter-complex.js.map +1 -0
  35. package/dist/api/filter-presets.d.ts +1286 -0
  36. package/dist/api/filter-presets.js +2152 -0
  37. package/dist/api/filter-presets.js.map +1 -0
  38. package/dist/api/filter.d.ts +1234 -0
  39. package/dist/api/filter.js +1976 -0
  40. package/dist/api/filter.js.map +1 -0
  41. package/dist/api/fmp4-stream.d.ts +426 -0
  42. package/dist/api/fmp4-stream.js +739 -0
  43. package/dist/api/fmp4-stream.js.map +1 -0
  44. package/dist/api/hardware.d.ts +651 -0
  45. package/dist/api/hardware.js +1260 -0
  46. package/dist/api/hardware.js.map +1 -0
  47. package/dist/api/index.d.ts +17 -0
  48. package/dist/api/index.js +32 -0
  49. package/dist/api/index.js.map +1 -0
  50. package/dist/api/io-stream.d.ts +307 -0
  51. package/dist/api/io-stream.js +282 -0
  52. package/dist/api/io-stream.js.map +1 -0
  53. package/dist/api/muxer.d.ts +957 -0
  54. package/dist/api/muxer.js +2002 -0
  55. package/dist/api/muxer.js.map +1 -0
  56. package/dist/api/pipeline.d.ts +607 -0
  57. package/dist/api/pipeline.js +1145 -0
  58. package/dist/api/pipeline.js.map +1 -0
  59. package/dist/api/utilities/async-queue.d.ts +120 -0
  60. package/dist/api/utilities/async-queue.js +211 -0
  61. package/dist/api/utilities/async-queue.js.map +1 -0
  62. package/dist/api/utilities/audio-sample.d.ts +117 -0
  63. package/dist/api/utilities/audio-sample.js +112 -0
  64. package/dist/api/utilities/audio-sample.js.map +1 -0
  65. package/dist/api/utilities/channel-layout.d.ts +76 -0
  66. package/dist/api/utilities/channel-layout.js +80 -0
  67. package/dist/api/utilities/channel-layout.js.map +1 -0
  68. package/dist/api/utilities/electron-shared-texture.d.ts +328 -0
  69. package/dist/api/utilities/electron-shared-texture.js +503 -0
  70. package/dist/api/utilities/electron-shared-texture.js.map +1 -0
  71. package/dist/api/utilities/image.d.ts +207 -0
  72. package/dist/api/utilities/image.js +213 -0
  73. package/dist/api/utilities/image.js.map +1 -0
  74. package/dist/api/utilities/index.d.ts +12 -0
  75. package/dist/api/utilities/index.js +25 -0
  76. package/dist/api/utilities/index.js.map +1 -0
  77. package/dist/api/utilities/media-type.d.ts +49 -0
  78. package/dist/api/utilities/media-type.js +53 -0
  79. package/dist/api/utilities/media-type.js.map +1 -0
  80. package/dist/api/utilities/pixel-format.d.ts +89 -0
  81. package/dist/api/utilities/pixel-format.js +97 -0
  82. package/dist/api/utilities/pixel-format.js.map +1 -0
  83. package/dist/api/utilities/sample-format.d.ts +129 -0
  84. package/dist/api/utilities/sample-format.js +141 -0
  85. package/dist/api/utilities/sample-format.js.map +1 -0
  86. package/dist/api/utilities/scheduler.d.ts +138 -0
  87. package/dist/api/utilities/scheduler.js +98 -0
  88. package/dist/api/utilities/scheduler.js.map +1 -0
  89. package/dist/api/utilities/streaming.d.ts +186 -0
  90. package/dist/api/utilities/streaming.js +309 -0
  91. package/dist/api/utilities/streaming.js.map +1 -0
  92. package/dist/api/utilities/timestamp.d.ts +193 -0
  93. package/dist/api/utilities/timestamp.js +206 -0
  94. package/dist/api/utilities/timestamp.js.map +1 -0
  95. package/dist/api/utilities/whisper-model.d.ts +310 -0
  96. package/dist/api/utilities/whisper-model.js +528 -0
  97. package/dist/api/utilities/whisper-model.js.map +1 -0
  98. package/dist/api/utils.d.ts +19 -0
  99. package/dist/api/utils.js +39 -0
  100. package/dist/api/utils.js.map +1 -0
  101. package/dist/api/whisper.d.ts +324 -0
  102. package/dist/api/whisper.js +362 -0
  103. package/dist/api/whisper.js.map +1 -0
  104. package/dist/constants/channel-layouts.d.ts +53 -0
  105. package/dist/constants/channel-layouts.js +57 -0
  106. package/dist/constants/channel-layouts.js.map +1 -0
  107. package/dist/constants/constants.d.ts +2325 -0
  108. package/dist/constants/constants.js +1887 -0
  109. package/dist/constants/constants.js.map +1 -0
  110. package/dist/constants/decoders.d.ts +633 -0
  111. package/dist/constants/decoders.js +641 -0
  112. package/dist/constants/decoders.js.map +1 -0
  113. package/dist/constants/encoders.d.ts +295 -0
  114. package/dist/constants/encoders.js +308 -0
  115. package/dist/constants/encoders.js.map +1 -0
  116. package/dist/constants/hardware.d.ts +26 -0
  117. package/dist/constants/hardware.js +27 -0
  118. package/dist/constants/hardware.js.map +1 -0
  119. package/dist/constants/index.d.ts +5 -0
  120. package/dist/constants/index.js +6 -0
  121. package/dist/constants/index.js.map +1 -0
  122. package/dist/ffmpeg/index.d.ts +99 -0
  123. package/dist/ffmpeg/index.js +115 -0
  124. package/dist/ffmpeg/index.js.map +1 -0
  125. package/dist/ffmpeg/utils.d.ts +31 -0
  126. package/dist/ffmpeg/utils.js +68 -0
  127. package/dist/ffmpeg/utils.js.map +1 -0
  128. package/dist/ffmpeg/version.d.ts +6 -0
  129. package/dist/ffmpeg/version.js +7 -0
  130. package/dist/ffmpeg/version.js.map +1 -0
  131. package/dist/index.d.ts +4 -0
  132. package/dist/index.js +9 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/lib/audio-fifo.d.ts +399 -0
  135. package/dist/lib/audio-fifo.js +431 -0
  136. package/dist/lib/audio-fifo.js.map +1 -0
  137. package/dist/lib/binding.d.ts +228 -0
  138. package/dist/lib/binding.js +60 -0
  139. package/dist/lib/binding.js.map +1 -0
  140. package/dist/lib/bitstream-filter-context.d.ts +379 -0
  141. package/dist/lib/bitstream-filter-context.js +441 -0
  142. package/dist/lib/bitstream-filter-context.js.map +1 -0
  143. package/dist/lib/bitstream-filter.d.ts +140 -0
  144. package/dist/lib/bitstream-filter.js +154 -0
  145. package/dist/lib/bitstream-filter.js.map +1 -0
  146. package/dist/lib/codec-context.d.ts +1071 -0
  147. package/dist/lib/codec-context.js +1354 -0
  148. package/dist/lib/codec-context.js.map +1 -0
  149. package/dist/lib/codec-parameters.d.ts +616 -0
  150. package/dist/lib/codec-parameters.js +761 -0
  151. package/dist/lib/codec-parameters.js.map +1 -0
  152. package/dist/lib/codec-parser.d.ts +201 -0
  153. package/dist/lib/codec-parser.js +213 -0
  154. package/dist/lib/codec-parser.js.map +1 -0
  155. package/dist/lib/codec.d.ts +586 -0
  156. package/dist/lib/codec.js +713 -0
  157. package/dist/lib/codec.js.map +1 -0
  158. package/dist/lib/device.d.ts +291 -0
  159. package/dist/lib/device.js +324 -0
  160. package/dist/lib/device.js.map +1 -0
  161. package/dist/lib/dictionary.d.ts +333 -0
  162. package/dist/lib/dictionary.js +372 -0
  163. package/dist/lib/dictionary.js.map +1 -0
  164. package/dist/lib/error.d.ts +242 -0
  165. package/dist/lib/error.js +303 -0
  166. package/dist/lib/error.js.map +1 -0
  167. package/dist/lib/fifo.d.ts +416 -0
  168. package/dist/lib/fifo.js +453 -0
  169. package/dist/lib/fifo.js.map +1 -0
  170. package/dist/lib/filter-context.d.ts +712 -0
  171. package/dist/lib/filter-context.js +789 -0
  172. package/dist/lib/filter-context.js.map +1 -0
  173. package/dist/lib/filter-graph-segment.d.ts +160 -0
  174. package/dist/lib/filter-graph-segment.js +171 -0
  175. package/dist/lib/filter-graph-segment.js.map +1 -0
  176. package/dist/lib/filter-graph.d.ts +641 -0
  177. package/dist/lib/filter-graph.js +704 -0
  178. package/dist/lib/filter-graph.js.map +1 -0
  179. package/dist/lib/filter-inout.d.ts +198 -0
  180. package/dist/lib/filter-inout.js +257 -0
  181. package/dist/lib/filter-inout.js.map +1 -0
  182. package/dist/lib/filter.d.ts +243 -0
  183. package/dist/lib/filter.js +272 -0
  184. package/dist/lib/filter.js.map +1 -0
  185. package/dist/lib/format-context.d.ts +1254 -0
  186. package/dist/lib/format-context.js +1379 -0
  187. package/dist/lib/format-context.js.map +1 -0
  188. package/dist/lib/frame-utils.d.ts +116 -0
  189. package/dist/lib/frame-utils.js +98 -0
  190. package/dist/lib/frame-utils.js.map +1 -0
  191. package/dist/lib/frame.d.ts +1222 -0
  192. package/dist/lib/frame.js +1435 -0
  193. package/dist/lib/frame.js.map +1 -0
  194. package/dist/lib/hardware-device-context.d.ts +362 -0
  195. package/dist/lib/hardware-device-context.js +383 -0
  196. package/dist/lib/hardware-device-context.js.map +1 -0
  197. package/dist/lib/hardware-frames-context.d.ts +419 -0
  198. package/dist/lib/hardware-frames-context.js +477 -0
  199. package/dist/lib/hardware-frames-context.js.map +1 -0
  200. package/dist/lib/index.d.ts +35 -0
  201. package/dist/lib/index.js +60 -0
  202. package/dist/lib/index.js.map +1 -0
  203. package/dist/lib/input-format.d.ts +249 -0
  204. package/dist/lib/input-format.js +306 -0
  205. package/dist/lib/input-format.js.map +1 -0
  206. package/dist/lib/io-context.d.ts +696 -0
  207. package/dist/lib/io-context.js +769 -0
  208. package/dist/lib/io-context.js.map +1 -0
  209. package/dist/lib/log.d.ts +174 -0
  210. package/dist/lib/log.js +184 -0
  211. package/dist/lib/log.js.map +1 -0
  212. package/dist/lib/native-types.d.ts +946 -0
  213. package/dist/lib/native-types.js +2 -0
  214. package/dist/lib/native-types.js.map +1 -0
  215. package/dist/lib/option.d.ts +927 -0
  216. package/dist/lib/option.js +1583 -0
  217. package/dist/lib/option.js.map +1 -0
  218. package/dist/lib/output-format.d.ts +180 -0
  219. package/dist/lib/output-format.js +213 -0
  220. package/dist/lib/output-format.js.map +1 -0
  221. package/dist/lib/packet.d.ts +501 -0
  222. package/dist/lib/packet.js +590 -0
  223. package/dist/lib/packet.js.map +1 -0
  224. package/dist/lib/rational.d.ts +251 -0
  225. package/dist/lib/rational.js +278 -0
  226. package/dist/lib/rational.js.map +1 -0
  227. package/dist/lib/software-resample-context.d.ts +552 -0
  228. package/dist/lib/software-resample-context.js +592 -0
  229. package/dist/lib/software-resample-context.js.map +1 -0
  230. package/dist/lib/software-scale-context.d.ts +344 -0
  231. package/dist/lib/software-scale-context.js +366 -0
  232. package/dist/lib/software-scale-context.js.map +1 -0
  233. package/dist/lib/stream.d.ts +379 -0
  234. package/dist/lib/stream.js +526 -0
  235. package/dist/lib/stream.js.map +1 -0
  236. package/dist/lib/sync-queue.d.ts +179 -0
  237. package/dist/lib/sync-queue.js +197 -0
  238. package/dist/lib/sync-queue.js.map +1 -0
  239. package/dist/lib/types.d.ts +34 -0
  240. package/dist/lib/types.js +2 -0
  241. package/dist/lib/types.js.map +1 -0
  242. package/dist/lib/utilities.d.ts +1127 -0
  243. package/dist/lib/utilities.js +1225 -0
  244. package/dist/lib/utilities.js.map +1 -0
  245. package/dist/utils/electron.d.ts +49 -0
  246. package/dist/utils/electron.js +63 -0
  247. package/dist/utils/electron.js.map +1 -0
  248. package/dist/utils/index.d.ts +4 -0
  249. package/dist/utils/index.js +5 -0
  250. package/dist/utils/index.js.map +1 -0
  251. package/install/check.js +121 -0
  252. package/install/ffmpeg.js +66 -0
  253. package/jellyfin-ffmpeg.patch +181 -0
  254. package/package.json +129 -0
@@ -0,0 +1,97 @@
1
+ import { bindings } from '../../lib/binding.js';
2
+ /**
3
+ * Video pixel format utilities.
4
+ *
5
+ * Provides static methods for querying pixel format properties, converting
6
+ * between format names and values, and checking hardware acceleration support.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { PixelFormat } from 'node-av';
11
+ * import { AV_PIX_FMT_YUV420P, AV_PIX_FMT_CUDA } from 'node-av/constants';
12
+ *
13
+ * // Get format information
14
+ * console.log(PixelFormat.getName(AV_PIX_FMT_YUV420P)); // "yuv420p"
15
+ * console.log(PixelFormat.isHardware(AV_PIX_FMT_CUDA)); // true
16
+ *
17
+ * // Convert between names and values
18
+ * const format = PixelFormat.fromName("yuv420p");
19
+ * console.log(format === AV_PIX_FMT_YUV420P); // true
20
+ * ```
21
+ */
22
+ export class PixelFormatUtils {
23
+ // Private constructor to prevent instantiation
24
+ constructor() { }
25
+ /**
26
+ * Get the name of a pixel format.
27
+ *
28
+ * Returns a string describing the pixel format.
29
+ * Direct mapping to av_get_pix_fmt_name()
30
+ *
31
+ * @param format - Video pixel format
32
+ *
33
+ * @returns Format name string, or null for invalid format
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * import { PixelFormat } from 'node-av';
38
+ * import { AV_PIX_FMT_YUV420P, AV_PIX_FMT_RGB24 } from 'node-av/constants';
39
+ *
40
+ * console.log(PixelFormat.getName(AV_PIX_FMT_YUV420P)); // "yuv420p"
41
+ * console.log(PixelFormat.getName(AV_PIX_FMT_RGB24)); // "rgb24"
42
+ * ```
43
+ */
44
+ static getName(format) {
45
+ return bindings.avGetPixFmtName(format);
46
+ }
47
+ /**
48
+ * Get pixel format from name.
49
+ *
50
+ * Converts a pixel format name string to its enum value.
51
+ * Direct mapping to av_get_pix_fmt()
52
+ *
53
+ * @param name - Pixel format name string
54
+ *
55
+ * @returns Pixel format enum value, or AV_PIX_FMT_NONE for unknown formats
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * import { PixelFormat } from 'node-av';
60
+ * import { AV_PIX_FMT_YUV420P } from 'node-av/constants';
61
+ *
62
+ * const format = PixelFormat.fromName("yuv420p");
63
+ * console.log(format === AV_PIX_FMT_YUV420P); // true
64
+ *
65
+ * const invalid = PixelFormat.fromName("invalid");
66
+ * console.log(invalid === AV_PIX_FMT_NONE); // true
67
+ * ```
68
+ */
69
+ static fromName(name) {
70
+ return bindings.avGetPixFmtFromName(name);
71
+ }
72
+ /**
73
+ * Check if pixel format is hardware accelerated.
74
+ *
75
+ * Returns true if the pixel format represents frames in GPU/hardware memory
76
+ * rather than system memory.
77
+ * Direct mapping to av_pix_fmt_desc_get() and checking for AV_PIX_FMT_FLAG_HWACCEL
78
+ *
79
+ * @param format - Video pixel format
80
+ *
81
+ * @returns True if format is hardware accelerated
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * import { PixelFormat } from 'node-av';
86
+ * import { AV_PIX_FMT_YUV420P, AV_PIX_FMT_CUDA, AV_PIX_FMT_VAAPI } from 'node-av/constants';
87
+ *
88
+ * console.log(PixelFormat.isHardware(AV_PIX_FMT_YUV420P)); // false
89
+ * console.log(PixelFormat.isHardware(AV_PIX_FMT_CUDA)); // true
90
+ * console.log(PixelFormat.isHardware(AV_PIX_FMT_VAAPI)); // true
91
+ * ```
92
+ */
93
+ static isHardware(format) {
94
+ return bindings.avIsHardwarePixelFormat(format);
95
+ }
96
+ }
97
+ //# sourceMappingURL=pixel-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pixel-format.js","sourceRoot":"","sources":["../../../src/api/utilities/pixel-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIhD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,gBAAgB;IAC3B,+CAA+C;IAC/C,gBAAuB,CAAC;IAExB;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,OAAO,CAAC,MAAqB;QAClC,OAAO,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAY;QAC1B,OAAO,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,CAAC,UAAU,CAAC,MAAqB;QACrC,OAAO,QAAQ,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;CACF"}
@@ -0,0 +1,129 @@
1
+ import type { AVSampleFormat } from '../../constants/index.js';
2
+ /**
3
+ * Audio sample format utilities.
4
+ *
5
+ * Provides static methods for querying and converting between audio sample formats.
6
+ * These utilities help with format introspection, conversion between packed/planar
7
+ * layouts, and getting human-readable format information.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { SampleFormat } from 'node-av';
12
+ * import { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLTP } from 'node-av/constants';
13
+ *
14
+ * // Get format information
15
+ * console.log(SampleFormat.getName(AV_SAMPLE_FMT_S16)); // "s16"
16
+ * console.log(SampleFormat.getBytesPerSample(AV_SAMPLE_FMT_S16)); // 2
17
+ * console.log(SampleFormat.isPlanar(AV_SAMPLE_FMT_FLTP)); // true
18
+ *
19
+ * // Convert between packed and planar formats
20
+ * const packed = SampleFormat.getPackedFormat(AV_SAMPLE_FMT_FLTP);
21
+ * const planar = SampleFormat.getPlanarFormat(AV_SAMPLE_FMT_FLT);
22
+ * ```
23
+ */
24
+ export declare class SampleFormatUtils {
25
+ private constructor();
26
+ /**
27
+ * Get bytes per sample for a sample format.
28
+ *
29
+ * Returns the number of bytes required to store one sample in the given format.
30
+ * Direct mapping to av_get_bytes_per_sample()
31
+ *
32
+ * @param format - Audio sample format
33
+ *
34
+ * @returns Number of bytes per sample, or 0 for invalid format
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * import { SampleFormat } from 'node-av';
39
+ * import { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT } from 'node-av/constants';
40
+ *
41
+ * console.log(SampleFormat.getBytesPerSample(AV_SAMPLE_FMT_S16)); // 2
42
+ * console.log(SampleFormat.getBytesPerSample(AV_SAMPLE_FMT_FLT)); // 4
43
+ * ```
44
+ */
45
+ static getBytesPerSample(format: AVSampleFormat): number;
46
+ /**
47
+ * Get the name of a sample format.
48
+ *
49
+ * Returns a string describing the sample format.
50
+ * Direct mapping to av_get_sample_fmt_name()
51
+ *
52
+ * @param format - Audio sample format
53
+ *
54
+ * @returns Format name string, or null for invalid format
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * import { SampleFormat } from 'node-av';
59
+ * import { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLTP } from 'node-av/constants';
60
+ *
61
+ * console.log(SampleFormat.getName(AV_SAMPLE_FMT_S16)); // "s16"
62
+ * console.log(SampleFormat.getName(AV_SAMPLE_FMT_FLTP)); // "fltp"
63
+ * ```
64
+ */
65
+ static getName(format: AVSampleFormat): string | null;
66
+ /**
67
+ * Get packed sample format.
68
+ *
69
+ * Returns the packed variant of the given sample format.
70
+ * If the format is already packed, returns it unchanged.
71
+ * Direct mapping to av_get_packed_sample_fmt()
72
+ *
73
+ * @param format - Audio sample format
74
+ *
75
+ * @returns Packed sample format
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * import { SampleFormat } from 'node-av';
80
+ * import { AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_FLT } from 'node-av/constants';
81
+ *
82
+ * const packed = SampleFormat.getPackedFormat(AV_SAMPLE_FMT_FLTP);
83
+ * console.log(packed === AV_SAMPLE_FMT_FLT); // true
84
+ * ```
85
+ */
86
+ static getPackedFormat(format: AVSampleFormat): AVSampleFormat;
87
+ /**
88
+ * Get planar sample format.
89
+ *
90
+ * Returns the planar variant of the given sample format.
91
+ * If the format is already planar, returns it unchanged.
92
+ * Direct mapping to av_get_planar_sample_fmt()
93
+ *
94
+ * @param format - Audio sample format
95
+ *
96
+ * @returns Planar sample format
97
+ *
98
+ * @example
99
+ * ```typescript
100
+ * import { SampleFormat } from 'node-av';
101
+ * import { AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLTP } from 'node-av/constants';
102
+ *
103
+ * const planar = SampleFormat.getPlanarFormat(AV_SAMPLE_FMT_FLT);
104
+ * console.log(planar === AV_SAMPLE_FMT_FLTP); // true
105
+ * ```
106
+ */
107
+ static getPlanarFormat(format: AVSampleFormat): AVSampleFormat;
108
+ /**
109
+ * Check if sample format is planar.
110
+ *
111
+ * Returns true if the sample format stores each channel in a separate buffer.
112
+ * Returns false if all channels are interleaved in a single buffer.
113
+ * Direct mapping to av_sample_fmt_is_planar()
114
+ *
115
+ * @param format - Audio sample format
116
+ *
117
+ * @returns True if format is planar, false if packed/interleaved
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * import { SampleFormat } from 'node-av';
122
+ * import { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16P } from 'node-av/constants';
123
+ *
124
+ * console.log(SampleFormat.isPlanar(AV_SAMPLE_FMT_S16)); // false (packed)
125
+ * console.log(SampleFormat.isPlanar(AV_SAMPLE_FMT_S16P)); // true (planar)
126
+ * ```
127
+ */
128
+ static isPlanar(format: AVSampleFormat): boolean;
129
+ }
@@ -0,0 +1,141 @@
1
+ import { bindings } from '../../lib/binding.js';
2
+ /**
3
+ * Audio sample format utilities.
4
+ *
5
+ * Provides static methods for querying and converting between audio sample formats.
6
+ * These utilities help with format introspection, conversion between packed/planar
7
+ * layouts, and getting human-readable format information.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { SampleFormat } from 'node-av';
12
+ * import { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLTP } from 'node-av/constants';
13
+ *
14
+ * // Get format information
15
+ * console.log(SampleFormat.getName(AV_SAMPLE_FMT_S16)); // "s16"
16
+ * console.log(SampleFormat.getBytesPerSample(AV_SAMPLE_FMT_S16)); // 2
17
+ * console.log(SampleFormat.isPlanar(AV_SAMPLE_FMT_FLTP)); // true
18
+ *
19
+ * // Convert between packed and planar formats
20
+ * const packed = SampleFormat.getPackedFormat(AV_SAMPLE_FMT_FLTP);
21
+ * const planar = SampleFormat.getPlanarFormat(AV_SAMPLE_FMT_FLT);
22
+ * ```
23
+ */
24
+ export class SampleFormatUtils {
25
+ // Private constructor to prevent instantiation
26
+ constructor() { }
27
+ /**
28
+ * Get bytes per sample for a sample format.
29
+ *
30
+ * Returns the number of bytes required to store one sample in the given format.
31
+ * Direct mapping to av_get_bytes_per_sample()
32
+ *
33
+ * @param format - Audio sample format
34
+ *
35
+ * @returns Number of bytes per sample, or 0 for invalid format
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * import { SampleFormat } from 'node-av';
40
+ * import { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT } from 'node-av/constants';
41
+ *
42
+ * console.log(SampleFormat.getBytesPerSample(AV_SAMPLE_FMT_S16)); // 2
43
+ * console.log(SampleFormat.getBytesPerSample(AV_SAMPLE_FMT_FLT)); // 4
44
+ * ```
45
+ */
46
+ static getBytesPerSample(format) {
47
+ return bindings.avGetBytesPerSample(format);
48
+ }
49
+ /**
50
+ * Get the name of a sample format.
51
+ *
52
+ * Returns a string describing the sample format.
53
+ * Direct mapping to av_get_sample_fmt_name()
54
+ *
55
+ * @param format - Audio sample format
56
+ *
57
+ * @returns Format name string, or null for invalid format
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * import { SampleFormat } from 'node-av';
62
+ * import { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLTP } from 'node-av/constants';
63
+ *
64
+ * console.log(SampleFormat.getName(AV_SAMPLE_FMT_S16)); // "s16"
65
+ * console.log(SampleFormat.getName(AV_SAMPLE_FMT_FLTP)); // "fltp"
66
+ * ```
67
+ */
68
+ static getName(format) {
69
+ return bindings.avGetSampleFmtName(format);
70
+ }
71
+ /**
72
+ * Get packed sample format.
73
+ *
74
+ * Returns the packed variant of the given sample format.
75
+ * If the format is already packed, returns it unchanged.
76
+ * Direct mapping to av_get_packed_sample_fmt()
77
+ *
78
+ * @param format - Audio sample format
79
+ *
80
+ * @returns Packed sample format
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * import { SampleFormat } from 'node-av';
85
+ * import { AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_FLT } from 'node-av/constants';
86
+ *
87
+ * const packed = SampleFormat.getPackedFormat(AV_SAMPLE_FMT_FLTP);
88
+ * console.log(packed === AV_SAMPLE_FMT_FLT); // true
89
+ * ```
90
+ */
91
+ static getPackedFormat(format) {
92
+ return bindings.avGetPackedSampleFmt(format);
93
+ }
94
+ /**
95
+ * Get planar sample format.
96
+ *
97
+ * Returns the planar variant of the given sample format.
98
+ * If the format is already planar, returns it unchanged.
99
+ * Direct mapping to av_get_planar_sample_fmt()
100
+ *
101
+ * @param format - Audio sample format
102
+ *
103
+ * @returns Planar sample format
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * import { SampleFormat } from 'node-av';
108
+ * import { AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLTP } from 'node-av/constants';
109
+ *
110
+ * const planar = SampleFormat.getPlanarFormat(AV_SAMPLE_FMT_FLT);
111
+ * console.log(planar === AV_SAMPLE_FMT_FLTP); // true
112
+ * ```
113
+ */
114
+ static getPlanarFormat(format) {
115
+ return bindings.avGetPlanarSampleFmt(format);
116
+ }
117
+ /**
118
+ * Check if sample format is planar.
119
+ *
120
+ * Returns true if the sample format stores each channel in a separate buffer.
121
+ * Returns false if all channels are interleaved in a single buffer.
122
+ * Direct mapping to av_sample_fmt_is_planar()
123
+ *
124
+ * @param format - Audio sample format
125
+ *
126
+ * @returns True if format is planar, false if packed/interleaved
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * import { SampleFormat } from 'node-av';
131
+ * import { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16P } from 'node-av/constants';
132
+ *
133
+ * console.log(SampleFormat.isPlanar(AV_SAMPLE_FMT_S16)); // false (packed)
134
+ * console.log(SampleFormat.isPlanar(AV_SAMPLE_FMT_S16P)); // true (planar)
135
+ * ```
136
+ */
137
+ static isPlanar(format) {
138
+ return bindings.avSampleFmtIsPlanar(format);
139
+ }
140
+ }
141
+ //# sourceMappingURL=sample-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sample-format.js","sourceRoot":"","sources":["../../../src/api/utilities/sample-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIhD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAO,iBAAiB;IAC5B,+CAA+C;IAC/C,gBAAuB,CAAC;IAExB;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,iBAAiB,CAAC,MAAsB;QAC7C,OAAO,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,OAAO,CAAC,MAAsB;QACnC,OAAO,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,eAAe,CAAC,MAAsB;QAC3C,OAAO,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,eAAe,CAAC,MAAsB;QAC3C,OAAO,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAsB;QACpC,OAAO,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;CACF"}
@@ -0,0 +1,138 @@
1
+ import { Muxer } from '../muxer.js';
2
+ import type { Frame, Packet } from '../../lib/index.js';
3
+ import type { BitStreamFilterAPI } from '../bitstream-filter.js';
4
+ import type { Encoder } from '../encoder.js';
5
+ import type { FilterAPI } from '../filter.js';
6
+ export interface SchedulableComponent<TItem = Packet | Frame> {
7
+ sendToQueue(item: TItem | null): Promise<void>;
8
+ pipeTo(target: FilterAPI | Encoder | BitStreamFilterAPI | Muxer, streamIndex?: number): any;
9
+ }
10
+ /**
11
+ * Pipeline scheduler for chaining components.
12
+ *
13
+ * Allows piping between components (Decoder → Filter → Encoder → Output).
14
+ */
15
+ export declare class Scheduler<TSend = Packet | Frame> {
16
+ private firstComponent;
17
+ /** @internal */
18
+ lastComponent: SchedulableComponent<any>;
19
+ /**
20
+ * @param firstComponent - First component in the pipeline
21
+ *
22
+ * @param lastComponent - Last component in the pipeline (defaults to firstComponent)
23
+ *
24
+ * @internal
25
+ */
26
+ constructor(firstComponent: SchedulableComponent<TSend>, lastComponent?: SchedulableComponent<any>);
27
+ /**
28
+ * Pipe output to a filter component.
29
+ *
30
+ * @param target - Filter to receive frames
31
+ *
32
+ * @returns Scheduler for continued chaining
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * decoder.pipeTo(filter1).pipeTo(filter2)
37
+ * ```
38
+ */
39
+ pipeTo(target: FilterAPI): Scheduler<TSend>;
40
+ /**
41
+ * Pipe output to an encoder component.
42
+ *
43
+ * @param target - Encoder to receive frames
44
+ *
45
+ * @returns Scheduler for continued chaining
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * decoder.pipeTo(filter).pipeTo(encoder)
50
+ * ```
51
+ */
52
+ pipeTo(target: Encoder): Scheduler<TSend>;
53
+ /**
54
+ * Pipe output to a bitstream filter component.
55
+ *
56
+ * @param target - BitStreamFilter to receive packets
57
+ *
58
+ * @returns Scheduler for continued chaining
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * decoder.pipeTo(encoder).pipeTo(bsf).pipeTo(output, 0)
63
+ * ```
64
+ */
65
+ pipeTo(target: BitStreamFilterAPI): Scheduler<TSend>;
66
+ /**
67
+ * Pipe output to a muxer (final stage).
68
+ *
69
+ * @param output - Muxer to write to
70
+ *
71
+ * @param streamIndex - Stream index in output
72
+ *
73
+ * @returns Control interface without pipeTo
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * const control = decoder
78
+ * .pipeTo(encoder)
79
+ * .pipeTo(output, 0);
80
+ *
81
+ * await control.send(packet);
82
+ * ```
83
+ */
84
+ pipeTo(output: Muxer, streamIndex: number): SchedulerControl<TSend>;
85
+ /**
86
+ * Send an item into the pipeline or flush.
87
+ *
88
+ * When item is provided, queues it for processing through the pipeline.
89
+ * When null is provided, triggers flush sequence through all components.
90
+ *
91
+ * @param item - Packet or Frame to process, or null to flush
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * // Send packet for processing
96
+ * await scheduler.send(packet);
97
+ *
98
+ * // Flush pipeline
99
+ * await scheduler.send(null);
100
+ * ```
101
+ */
102
+ send(item: TSend | null): Promise<void>;
103
+ }
104
+ /**
105
+ * Control interface for completed pipelines.
106
+ *
107
+ * Provides control methods without pipeTo() - this is the final
108
+ * stage after piping to Muxer.
109
+ *
110
+ * @template TSend - The input type flowing through the pipeline
111
+ */
112
+ export declare class SchedulerControl<TSend = Packet | Frame> {
113
+ private firstComponent;
114
+ /**
115
+ * @param firstComponent - First component in the pipeline
116
+ *
117
+ * @internal
118
+ */
119
+ constructor(firstComponent: SchedulableComponent<TSend>);
120
+ /**
121
+ * Send an item into the pipeline or flush.
122
+ *
123
+ * When item is provided, queues it for processing through the pipeline.
124
+ * When null is provided, triggers flush sequence through all components.
125
+ *
126
+ * @param item - Packet or Frame to process, or null to flush
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * // Send packet for processing
131
+ * await control.send(packet);
132
+ *
133
+ * // Flush pipeline
134
+ * await control.send(null);
135
+ * ```
136
+ */
137
+ send(item: TSend | null): Promise<void>;
138
+ }
@@ -0,0 +1,98 @@
1
+ import { Muxer } from '../muxer.js';
2
+ /**
3
+ * Pipeline scheduler for chaining components.
4
+ *
5
+ * Allows piping between components (Decoder → Filter → Encoder → Output).
6
+ */
7
+ export class Scheduler {
8
+ firstComponent;
9
+ /** @internal */
10
+ lastComponent;
11
+ /**
12
+ * @param firstComponent - First component in the pipeline
13
+ *
14
+ * @param lastComponent - Last component in the pipeline (defaults to firstComponent)
15
+ *
16
+ * @internal
17
+ */
18
+ constructor(firstComponent, lastComponent) {
19
+ this.firstComponent = firstComponent;
20
+ this.lastComponent = lastComponent ?? firstComponent;
21
+ }
22
+ pipeTo(target, streamIndex) {
23
+ if (typeof this.lastComponent.pipeTo === 'function') {
24
+ if (target instanceof Muxer) {
25
+ // Start the pipe task (encoder -> output)
26
+ this.lastComponent.pipeTo(target, streamIndex);
27
+ // Return control with correct firstComponent (not lastComponent!)
28
+ return new SchedulerControl(this.firstComponent);
29
+ }
30
+ else {
31
+ const resultScheduler = this.lastComponent.pipeTo(target);
32
+ // Keep the original firstComponent, update to new lastComponent
33
+ return new Scheduler(this.firstComponent, resultScheduler.lastComponent);
34
+ }
35
+ }
36
+ throw new Error('Last component does not support pipeTo');
37
+ }
38
+ /**
39
+ * Send an item into the pipeline or flush.
40
+ *
41
+ * When item is provided, queues it for processing through the pipeline.
42
+ * When null is provided, triggers flush sequence through all components.
43
+ *
44
+ * @param item - Packet or Frame to process, or null to flush
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * // Send packet for processing
49
+ * await scheduler.send(packet);
50
+ *
51
+ * // Flush pipeline
52
+ * await scheduler.send(null);
53
+ * ```
54
+ */
55
+ async send(item) {
56
+ await this.firstComponent.sendToQueue(item);
57
+ }
58
+ }
59
+ /**
60
+ * Control interface for completed pipelines.
61
+ *
62
+ * Provides control methods without pipeTo() - this is the final
63
+ * stage after piping to Muxer.
64
+ *
65
+ * @template TSend - The input type flowing through the pipeline
66
+ */
67
+ export class SchedulerControl {
68
+ firstComponent;
69
+ /**
70
+ * @param firstComponent - First component in the pipeline
71
+ *
72
+ * @internal
73
+ */
74
+ constructor(firstComponent) {
75
+ this.firstComponent = firstComponent;
76
+ }
77
+ /**
78
+ * Send an item into the pipeline or flush.
79
+ *
80
+ * When item is provided, queues it for processing through the pipeline.
81
+ * When null is provided, triggers flush sequence through all components.
82
+ *
83
+ * @param item - Packet or Frame to process, or null to flush
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * // Send packet for processing
88
+ * await control.send(packet);
89
+ *
90
+ * // Flush pipeline
91
+ * await control.send(null);
92
+ * ```
93
+ */
94
+ async send(item) {
95
+ await this.firstComponent.sendToQueue(item);
96
+ }
97
+ }
98
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../../src/api/utilities/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAYpC;;;;GAIG;AACH,MAAM,OAAO,SAAS;IACZ,cAAc,CAA8B;IAEpD,gBAAgB;IAChB,aAAa,CAA4B;IAEzC;;;;;;OAMG;IACH,YAAY,cAA2C,EAAE,aAAyC;QAChG,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,aAAa,IAAI,cAAc,CAAC;IACvD,CAAC;IAgED,MAAM,CAAC,MAAwD,EAAE,WAAoB;QACnF,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACpD,IAAI,MAAM,YAAY,KAAK,EAAE,CAAC;gBAC5B,0CAA0C;gBAC1C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;gBAC/C,kEAAkE;gBAClE,OAAO,IAAI,gBAAgB,CAAQ,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC1D,gEAAgE;gBAChE,OAAO,IAAI,SAAS,CAAQ,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,IAAI,CAAC,IAAkB;QAC3B,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,gBAAgB;IACnB,cAAc,CAA8B;IAEpD;;;;OAIG;IACH,YAAY,cAA2C;QACrD,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,IAAI,CAAC,IAAkB;QAC3B,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;CACF"}