@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.
- package/BUILD_LINUX.md +61 -0
- package/LICENSE.md +22 -0
- package/README.md +662 -0
- package/build_mac_local.sh +69 -0
- package/dist/api/audio-frame-buffer.d.ts +205 -0
- package/dist/api/audio-frame-buffer.js +287 -0
- package/dist/api/audio-frame-buffer.js.map +1 -0
- package/dist/api/bitstream-filter.d.ts +820 -0
- package/dist/api/bitstream-filter.js +1242 -0
- package/dist/api/bitstream-filter.js.map +1 -0
- package/dist/api/constants.d.ts +44 -0
- package/dist/api/constants.js +45 -0
- package/dist/api/constants.js.map +1 -0
- package/dist/api/data/test_av1.ivf +0 -0
- package/dist/api/data/test_h264.h264 +0 -0
- package/dist/api/data/test_hevc.h265 +0 -0
- package/dist/api/data/test_mjpeg.mjpeg +0 -0
- package/dist/api/data/test_vp8.ivf +0 -0
- package/dist/api/data/test_vp9.ivf +0 -0
- package/dist/api/decoder.d.ts +1088 -0
- package/dist/api/decoder.js +1775 -0
- package/dist/api/decoder.js.map +1 -0
- package/dist/api/demuxer.d.ts +1219 -0
- package/dist/api/demuxer.js +2081 -0
- package/dist/api/demuxer.js.map +1 -0
- package/dist/api/device.d.ts +586 -0
- package/dist/api/device.js +961 -0
- package/dist/api/device.js.map +1 -0
- package/dist/api/encoder.d.ts +1132 -0
- package/dist/api/encoder.js +1988 -0
- package/dist/api/encoder.js.map +1 -0
- package/dist/api/filter-complex.d.ts +821 -0
- package/dist/api/filter-complex.js +1604 -0
- package/dist/api/filter-complex.js.map +1 -0
- package/dist/api/filter-presets.d.ts +1286 -0
- package/dist/api/filter-presets.js +2152 -0
- package/dist/api/filter-presets.js.map +1 -0
- package/dist/api/filter.d.ts +1234 -0
- package/dist/api/filter.js +1976 -0
- package/dist/api/filter.js.map +1 -0
- package/dist/api/fmp4-stream.d.ts +426 -0
- package/dist/api/fmp4-stream.js +739 -0
- package/dist/api/fmp4-stream.js.map +1 -0
- package/dist/api/hardware.d.ts +651 -0
- package/dist/api/hardware.js +1260 -0
- package/dist/api/hardware.js.map +1 -0
- package/dist/api/index.d.ts +17 -0
- package/dist/api/index.js +32 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/io-stream.d.ts +307 -0
- package/dist/api/io-stream.js +282 -0
- package/dist/api/io-stream.js.map +1 -0
- package/dist/api/muxer.d.ts +957 -0
- package/dist/api/muxer.js +2002 -0
- package/dist/api/muxer.js.map +1 -0
- package/dist/api/pipeline.d.ts +607 -0
- package/dist/api/pipeline.js +1145 -0
- package/dist/api/pipeline.js.map +1 -0
- package/dist/api/utilities/async-queue.d.ts +120 -0
- package/dist/api/utilities/async-queue.js +211 -0
- package/dist/api/utilities/async-queue.js.map +1 -0
- package/dist/api/utilities/audio-sample.d.ts +117 -0
- package/dist/api/utilities/audio-sample.js +112 -0
- package/dist/api/utilities/audio-sample.js.map +1 -0
- package/dist/api/utilities/channel-layout.d.ts +76 -0
- package/dist/api/utilities/channel-layout.js +80 -0
- package/dist/api/utilities/channel-layout.js.map +1 -0
- package/dist/api/utilities/electron-shared-texture.d.ts +328 -0
- package/dist/api/utilities/electron-shared-texture.js +503 -0
- package/dist/api/utilities/electron-shared-texture.js.map +1 -0
- package/dist/api/utilities/image.d.ts +207 -0
- package/dist/api/utilities/image.js +213 -0
- package/dist/api/utilities/image.js.map +1 -0
- package/dist/api/utilities/index.d.ts +12 -0
- package/dist/api/utilities/index.js +25 -0
- package/dist/api/utilities/index.js.map +1 -0
- package/dist/api/utilities/media-type.d.ts +49 -0
- package/dist/api/utilities/media-type.js +53 -0
- package/dist/api/utilities/media-type.js.map +1 -0
- package/dist/api/utilities/pixel-format.d.ts +89 -0
- package/dist/api/utilities/pixel-format.js +97 -0
- package/dist/api/utilities/pixel-format.js.map +1 -0
- package/dist/api/utilities/sample-format.d.ts +129 -0
- package/dist/api/utilities/sample-format.js +141 -0
- package/dist/api/utilities/sample-format.js.map +1 -0
- package/dist/api/utilities/scheduler.d.ts +138 -0
- package/dist/api/utilities/scheduler.js +98 -0
- package/dist/api/utilities/scheduler.js.map +1 -0
- package/dist/api/utilities/streaming.d.ts +186 -0
- package/dist/api/utilities/streaming.js +309 -0
- package/dist/api/utilities/streaming.js.map +1 -0
- package/dist/api/utilities/timestamp.d.ts +193 -0
- package/dist/api/utilities/timestamp.js +206 -0
- package/dist/api/utilities/timestamp.js.map +1 -0
- package/dist/api/utilities/whisper-model.d.ts +310 -0
- package/dist/api/utilities/whisper-model.js +528 -0
- package/dist/api/utilities/whisper-model.js.map +1 -0
- package/dist/api/utils.d.ts +19 -0
- package/dist/api/utils.js +39 -0
- package/dist/api/utils.js.map +1 -0
- package/dist/api/whisper.d.ts +324 -0
- package/dist/api/whisper.js +362 -0
- package/dist/api/whisper.js.map +1 -0
- package/dist/constants/channel-layouts.d.ts +53 -0
- package/dist/constants/channel-layouts.js +57 -0
- package/dist/constants/channel-layouts.js.map +1 -0
- package/dist/constants/constants.d.ts +2325 -0
- package/dist/constants/constants.js +1887 -0
- package/dist/constants/constants.js.map +1 -0
- package/dist/constants/decoders.d.ts +633 -0
- package/dist/constants/decoders.js +641 -0
- package/dist/constants/decoders.js.map +1 -0
- package/dist/constants/encoders.d.ts +295 -0
- package/dist/constants/encoders.js +308 -0
- package/dist/constants/encoders.js.map +1 -0
- package/dist/constants/hardware.d.ts +26 -0
- package/dist/constants/hardware.js +27 -0
- package/dist/constants/hardware.js.map +1 -0
- package/dist/constants/index.d.ts +5 -0
- package/dist/constants/index.js +6 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/ffmpeg/index.d.ts +99 -0
- package/dist/ffmpeg/index.js +115 -0
- package/dist/ffmpeg/index.js.map +1 -0
- package/dist/ffmpeg/utils.d.ts +31 -0
- package/dist/ffmpeg/utils.js +68 -0
- package/dist/ffmpeg/utils.js.map +1 -0
- package/dist/ffmpeg/version.d.ts +6 -0
- package/dist/ffmpeg/version.js +7 -0
- package/dist/ffmpeg/version.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/audio-fifo.d.ts +399 -0
- package/dist/lib/audio-fifo.js +431 -0
- package/dist/lib/audio-fifo.js.map +1 -0
- package/dist/lib/binding.d.ts +228 -0
- package/dist/lib/binding.js +60 -0
- package/dist/lib/binding.js.map +1 -0
- package/dist/lib/bitstream-filter-context.d.ts +379 -0
- package/dist/lib/bitstream-filter-context.js +441 -0
- package/dist/lib/bitstream-filter-context.js.map +1 -0
- package/dist/lib/bitstream-filter.d.ts +140 -0
- package/dist/lib/bitstream-filter.js +154 -0
- package/dist/lib/bitstream-filter.js.map +1 -0
- package/dist/lib/codec-context.d.ts +1071 -0
- package/dist/lib/codec-context.js +1354 -0
- package/dist/lib/codec-context.js.map +1 -0
- package/dist/lib/codec-parameters.d.ts +616 -0
- package/dist/lib/codec-parameters.js +761 -0
- package/dist/lib/codec-parameters.js.map +1 -0
- package/dist/lib/codec-parser.d.ts +201 -0
- package/dist/lib/codec-parser.js +213 -0
- package/dist/lib/codec-parser.js.map +1 -0
- package/dist/lib/codec.d.ts +586 -0
- package/dist/lib/codec.js +713 -0
- package/dist/lib/codec.js.map +1 -0
- package/dist/lib/device.d.ts +291 -0
- package/dist/lib/device.js +324 -0
- package/dist/lib/device.js.map +1 -0
- package/dist/lib/dictionary.d.ts +333 -0
- package/dist/lib/dictionary.js +372 -0
- package/dist/lib/dictionary.js.map +1 -0
- package/dist/lib/error.d.ts +242 -0
- package/dist/lib/error.js +303 -0
- package/dist/lib/error.js.map +1 -0
- package/dist/lib/fifo.d.ts +416 -0
- package/dist/lib/fifo.js +453 -0
- package/dist/lib/fifo.js.map +1 -0
- package/dist/lib/filter-context.d.ts +712 -0
- package/dist/lib/filter-context.js +789 -0
- package/dist/lib/filter-context.js.map +1 -0
- package/dist/lib/filter-graph-segment.d.ts +160 -0
- package/dist/lib/filter-graph-segment.js +171 -0
- package/dist/lib/filter-graph-segment.js.map +1 -0
- package/dist/lib/filter-graph.d.ts +641 -0
- package/dist/lib/filter-graph.js +704 -0
- package/dist/lib/filter-graph.js.map +1 -0
- package/dist/lib/filter-inout.d.ts +198 -0
- package/dist/lib/filter-inout.js +257 -0
- package/dist/lib/filter-inout.js.map +1 -0
- package/dist/lib/filter.d.ts +243 -0
- package/dist/lib/filter.js +272 -0
- package/dist/lib/filter.js.map +1 -0
- package/dist/lib/format-context.d.ts +1254 -0
- package/dist/lib/format-context.js +1379 -0
- package/dist/lib/format-context.js.map +1 -0
- package/dist/lib/frame-utils.d.ts +116 -0
- package/dist/lib/frame-utils.js +98 -0
- package/dist/lib/frame-utils.js.map +1 -0
- package/dist/lib/frame.d.ts +1222 -0
- package/dist/lib/frame.js +1435 -0
- package/dist/lib/frame.js.map +1 -0
- package/dist/lib/hardware-device-context.d.ts +362 -0
- package/dist/lib/hardware-device-context.js +383 -0
- package/dist/lib/hardware-device-context.js.map +1 -0
- package/dist/lib/hardware-frames-context.d.ts +419 -0
- package/dist/lib/hardware-frames-context.js +477 -0
- package/dist/lib/hardware-frames-context.js.map +1 -0
- package/dist/lib/index.d.ts +35 -0
- package/dist/lib/index.js +60 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/input-format.d.ts +249 -0
- package/dist/lib/input-format.js +306 -0
- package/dist/lib/input-format.js.map +1 -0
- package/dist/lib/io-context.d.ts +696 -0
- package/dist/lib/io-context.js +769 -0
- package/dist/lib/io-context.js.map +1 -0
- package/dist/lib/log.d.ts +174 -0
- package/dist/lib/log.js +184 -0
- package/dist/lib/log.js.map +1 -0
- package/dist/lib/native-types.d.ts +946 -0
- package/dist/lib/native-types.js +2 -0
- package/dist/lib/native-types.js.map +1 -0
- package/dist/lib/option.d.ts +927 -0
- package/dist/lib/option.js +1583 -0
- package/dist/lib/option.js.map +1 -0
- package/dist/lib/output-format.d.ts +180 -0
- package/dist/lib/output-format.js +213 -0
- package/dist/lib/output-format.js.map +1 -0
- package/dist/lib/packet.d.ts +501 -0
- package/dist/lib/packet.js +590 -0
- package/dist/lib/packet.js.map +1 -0
- package/dist/lib/rational.d.ts +251 -0
- package/dist/lib/rational.js +278 -0
- package/dist/lib/rational.js.map +1 -0
- package/dist/lib/software-resample-context.d.ts +552 -0
- package/dist/lib/software-resample-context.js +592 -0
- package/dist/lib/software-resample-context.js.map +1 -0
- package/dist/lib/software-scale-context.d.ts +344 -0
- package/dist/lib/software-scale-context.js +366 -0
- package/dist/lib/software-scale-context.js.map +1 -0
- package/dist/lib/stream.d.ts +379 -0
- package/dist/lib/stream.js +526 -0
- package/dist/lib/stream.js.map +1 -0
- package/dist/lib/sync-queue.d.ts +179 -0
- package/dist/lib/sync-queue.js +197 -0
- package/dist/lib/sync-queue.js.map +1 -0
- package/dist/lib/types.d.ts +34 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/utilities.d.ts +1127 -0
- package/dist/lib/utilities.js +1225 -0
- package/dist/lib/utilities.js.map +1 -0
- package/dist/utils/electron.d.ts +49 -0
- package/dist/utils/electron.js +63 -0
- package/dist/utils/electron.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/install/check.js +121 -0
- package/install/ffmpeg.js +66 -0
- package/jellyfin-ffmpeg.patch +181 -0
- 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"}
|