@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 @@
|
|
|
1
|
+
{"version":3,"file":"fmp4-stream.js","sourceRoot":"","sources":["../../src/api/fmp4-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,651 @@
|
|
|
1
|
+
import { Codec } from '../lib/codec.js';
|
|
2
|
+
import { HardwareDeviceContext } from '../lib/hardware-device-context.js';
|
|
3
|
+
import { Stream } from '../lib/stream.js';
|
|
4
|
+
import type { AVCodecID, AVHWDeviceType, AVPixelFormat, FFDecoderCodec, FFEncoderCodec, FFHWDeviceType } from '../constants/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Base codec names supported across different hardware types.
|
|
7
|
+
*/
|
|
8
|
+
export type BaseCodecName = 'av1' | 'h264' | 'hevc' | 'h263' | 'mpeg2' | 'mpeg4' | 'vp8' | 'vp9' | 'mjpeg' | 'prores';
|
|
9
|
+
/**
|
|
10
|
+
* Hardware acceleration configuration options.
|
|
11
|
+
*/
|
|
12
|
+
export interface HardwareOptions {
|
|
13
|
+
/**
|
|
14
|
+
* Device path or index (e.g., '0' for first GPU).
|
|
15
|
+
*/
|
|
16
|
+
device?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Device initialization options.
|
|
19
|
+
*/
|
|
20
|
+
options?: Record<string, string>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* High-level hardware acceleration management.
|
|
24
|
+
*
|
|
25
|
+
* Provides automatic detection and configuration of hardware acceleration for media processing.
|
|
26
|
+
* Manages device contexts for GPU-accelerated encoding and decoding operations.
|
|
27
|
+
* Supports various hardware types including VideoToolbox, CUDA, VAAPI, D3D11VA, and more.
|
|
28
|
+
* Essential for high-performance video processing with reduced CPU usage.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* import { HardwareContext } from 'node-av/api';
|
|
33
|
+
* import { AV_HWDEVICE_TYPE_CUDA } from 'node-av/constants';
|
|
34
|
+
*
|
|
35
|
+
* // Auto-detect best available hardware
|
|
36
|
+
* const hw = HardwareContext.auto();
|
|
37
|
+
* if (hw) {
|
|
38
|
+
* console.log(`Using hardware: ${hw.deviceTypeName}`);
|
|
39
|
+
* const decoder = await Decoder.create(stream, { hardware: hw });
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* // Use specific hardware type
|
|
46
|
+
* const hw = HardwareContext.create(AV_HWDEVICE_TYPE_CUDA);
|
|
47
|
+
* const encoderCodec = hw?.getEncoderCodec('h264') ?? FF_ENCODER_LIBX264;
|
|
48
|
+
* const encoder = await Encoder.create(encoderCodec, { ... });
|
|
49
|
+
* hw.dispose();
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* @see {@link Decoder} For hardware-accelerated decoding
|
|
53
|
+
* @see {@link Encoder} For hardware-accelerated encoding
|
|
54
|
+
*/
|
|
55
|
+
export declare class HardwareContext implements Disposable {
|
|
56
|
+
private static _autoTested;
|
|
57
|
+
private static _autoCachedType;
|
|
58
|
+
private _deviceContext;
|
|
59
|
+
private _deviceType;
|
|
60
|
+
private _deviceTypeName;
|
|
61
|
+
private _devicePixelFormat;
|
|
62
|
+
private _isDisposed;
|
|
63
|
+
/**
|
|
64
|
+
* @param deviceContext - Initialized hardware device context
|
|
65
|
+
*
|
|
66
|
+
* @param deviceType - Hardware device type enum
|
|
67
|
+
*
|
|
68
|
+
* @param deviceTypeName - Human-readable device type name
|
|
69
|
+
*
|
|
70
|
+
* @internal
|
|
71
|
+
*/
|
|
72
|
+
private constructor();
|
|
73
|
+
/**
|
|
74
|
+
* Auto-detect and create the best available hardware context.
|
|
75
|
+
*
|
|
76
|
+
* Tries hardware types in order of preference based on platform.
|
|
77
|
+
* Returns null if no hardware acceleration is available.
|
|
78
|
+
* Platform-specific preference order ensures optimal performance.
|
|
79
|
+
*
|
|
80
|
+
* @param options - Optional hardware configuration
|
|
81
|
+
*
|
|
82
|
+
* @returns Hardware context or null if unavailable
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* const hw = HardwareContext.auto();
|
|
87
|
+
* if (hw) {
|
|
88
|
+
* console.log(`Auto-detected: ${hw.deviceTypeName}`);
|
|
89
|
+
* // Use for decoder/encoder
|
|
90
|
+
* }
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* // With specific device
|
|
96
|
+
* const hw = HardwareContext.auto({
|
|
97
|
+
* deviceName: '/dev/dri/renderD128'
|
|
98
|
+
* });
|
|
99
|
+
* ```
|
|
100
|
+
*
|
|
101
|
+
* @see {@link create} For specific hardware type
|
|
102
|
+
* @see {@link listAvailable} To check available types
|
|
103
|
+
*/
|
|
104
|
+
static auto(options?: HardwareOptions): HardwareContext | null;
|
|
105
|
+
/**
|
|
106
|
+
* Reset the auto-detection cache.
|
|
107
|
+
*
|
|
108
|
+
* Forces the next call to auto() to re-test hardware availability.
|
|
109
|
+
* Useful for testing or if hardware availability may have changed.
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```typescript
|
|
113
|
+
* HardwareContext.resetAutoCache();
|
|
114
|
+
* const hw = HardwareContext.auto(); // Will re-test
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
static resetAutoCache(): void;
|
|
118
|
+
/**
|
|
119
|
+
* Create a hardware context for a specific device type.
|
|
120
|
+
*
|
|
121
|
+
* Creates and initializes a hardware device context.
|
|
122
|
+
* Throws if the device type is not supported or initialization fails.
|
|
123
|
+
*
|
|
124
|
+
* Direct mapping to av_hwdevice_ctx_create().
|
|
125
|
+
*
|
|
126
|
+
* @param deviceType - Hardware device type from AVHWDeviceType
|
|
127
|
+
*
|
|
128
|
+
* @param device - Optional device specifier (e.g., GPU index, device path)
|
|
129
|
+
*
|
|
130
|
+
* @param options - Optional device initialization options
|
|
131
|
+
*
|
|
132
|
+
* @returns Initialized hardware context or null if HardwareContext could not be created
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* import { AV_HWDEVICE_TYPE_CUDA } from 'node-av/constants';
|
|
137
|
+
*
|
|
138
|
+
* // CUDA with specific GPU
|
|
139
|
+
* const cuda = HardwareContext.create(AV_HWDEVICE_TYPE_CUDA, '0');
|
|
140
|
+
* ```
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```typescript
|
|
144
|
+
* import { AV_HWDEVICE_TYPE_VAAPI } from 'node-av/constants';
|
|
145
|
+
*
|
|
146
|
+
* // VAAPI with render device
|
|
147
|
+
* const vaapi = HardwareContext.create(
|
|
148
|
+
* AV_HWDEVICE_TYPE_VAAPI,
|
|
149
|
+
* '/dev/dri/renderD128'
|
|
150
|
+
* );
|
|
151
|
+
* ```
|
|
152
|
+
*
|
|
153
|
+
* @see {@link auto} For automatic detection
|
|
154
|
+
* @see {@link HardwareDeviceContext} For low-level API
|
|
155
|
+
*/
|
|
156
|
+
static create(deviceType: AVHWDeviceType | FFHWDeviceType, device?: string, options?: Record<string, string>): HardwareContext | null;
|
|
157
|
+
/**
|
|
158
|
+
* Create a derived hardware device context.
|
|
159
|
+
*
|
|
160
|
+
* Creates a new hardware context derived from an existing one.
|
|
161
|
+
* Allows creating contexts on different device types that can share
|
|
162
|
+
* memory or resources with the source device. Useful for cross-device
|
|
163
|
+
* pipelines (e.g., VAAPI → OpenCL, CUDA → Vulkan).
|
|
164
|
+
*
|
|
165
|
+
* Direct mapping to av_hwdevice_ctx_create_derived().
|
|
166
|
+
*
|
|
167
|
+
* @param source - Source hardware context to derive from
|
|
168
|
+
*
|
|
169
|
+
* @param targetType - Target device type to create
|
|
170
|
+
*
|
|
171
|
+
* @returns New hardware context or null if derivation fails
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* ```typescript
|
|
175
|
+
* import { AV_HWDEVICE_TYPE_VAAPI, AV_HWDEVICE_TYPE_OPENCL } from 'node-av/constants';
|
|
176
|
+
*
|
|
177
|
+
* // Create VAAPI device for decoding
|
|
178
|
+
* const vaapi = HardwareContext.create(AV_HWDEVICE_TYPE_VAAPI);
|
|
179
|
+
*
|
|
180
|
+
* // Derive OpenCL device for filtering (shares memory with VAAPI)
|
|
181
|
+
* const opencl = HardwareContext.derive(vaapi, AV_HWDEVICE_TYPE_OPENCL);
|
|
182
|
+
*
|
|
183
|
+
* if (opencl) {
|
|
184
|
+
* // Decode with VAAPI
|
|
185
|
+
* const decoder = await Decoder.create(stream, { hardware: vaapi });
|
|
186
|
+
*
|
|
187
|
+
* // Filter with OpenCL (overrides frame's VAAPI context)
|
|
188
|
+
* const filter = FilterAPI.create('program_opencl=...', { hardware: opencl });
|
|
189
|
+
*
|
|
190
|
+
* for await (const frame of decoder.frames()) {
|
|
191
|
+
* // frame has VAAPI context, but filter uses OpenCL
|
|
192
|
+
* const filtered = await filter.apply(frame);
|
|
193
|
+
* }
|
|
194
|
+
* }
|
|
195
|
+
* ```
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* ```typescript
|
|
199
|
+
* // CUDA → Vulkan derivation
|
|
200
|
+
* const cuda = HardwareContext.create(AV_HWDEVICE_TYPE_CUDA);
|
|
201
|
+
* const vulkan = HardwareContext.derive(cuda, AV_HWDEVICE_TYPE_VULKAN);
|
|
202
|
+
* ```
|
|
203
|
+
*
|
|
204
|
+
* @see {@link create} For creating independent device
|
|
205
|
+
*/
|
|
206
|
+
static derive(source: HardwareContext, targetType: AVHWDeviceType | FFHWDeviceType): HardwareContext | null;
|
|
207
|
+
/**
|
|
208
|
+
* List all available hardware device types.
|
|
209
|
+
*
|
|
210
|
+
* Enumerates all hardware types supported by the FFmpeg build.
|
|
211
|
+
* Useful for checking hardware capabilities at runtime.
|
|
212
|
+
*
|
|
213
|
+
* Direct mapping to av_hwdevice_iterate_types().
|
|
214
|
+
*
|
|
215
|
+
* @returns Array of available device type names
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
* ```typescript
|
|
219
|
+
* const available = HardwareContext.listAvailable();
|
|
220
|
+
* console.log('Available hardware:', available.join(', '));
|
|
221
|
+
* // Output: "cuda, vaapi, videotoolbox"
|
|
222
|
+
* ```
|
|
223
|
+
*
|
|
224
|
+
* @see {@link auto} For automatic selection
|
|
225
|
+
*/
|
|
226
|
+
static listAvailable(): string[];
|
|
227
|
+
/**
|
|
228
|
+
* Get the hardware device context.
|
|
229
|
+
*
|
|
230
|
+
* Used internally by encoders and decoders for hardware acceleration.
|
|
231
|
+
* Can be assigned to CodecContext.hwDeviceCtx.
|
|
232
|
+
*
|
|
233
|
+
* @example
|
|
234
|
+
* ```typescript
|
|
235
|
+
* codecContext.hwDeviceCtx = hw.deviceContext;
|
|
236
|
+
* ```
|
|
237
|
+
*/
|
|
238
|
+
get deviceContext(): HardwareDeviceContext;
|
|
239
|
+
/**
|
|
240
|
+
* Get the device type enum value.
|
|
241
|
+
*
|
|
242
|
+
* @example
|
|
243
|
+
* ```typescript
|
|
244
|
+
* if (hw.deviceType === AV_HWDEVICE_TYPE_CUDA) {
|
|
245
|
+
* console.log('Using NVIDIA GPU');
|
|
246
|
+
* }
|
|
247
|
+
* ```
|
|
248
|
+
*/
|
|
249
|
+
get deviceType(): AVHWDeviceType;
|
|
250
|
+
/**
|
|
251
|
+
* Get the hardware device type name.
|
|
252
|
+
*
|
|
253
|
+
* Human-readable device type string.
|
|
254
|
+
*
|
|
255
|
+
* @example
|
|
256
|
+
* ```typescript
|
|
257
|
+
* console.log(`Hardware type: ${hw.deviceTypeName}`);
|
|
258
|
+
* // Output: "cuda" or "videotoolbox" etc.
|
|
259
|
+
* ```
|
|
260
|
+
*/
|
|
261
|
+
get deviceTypeName(): FFHWDeviceType;
|
|
262
|
+
/**
|
|
263
|
+
* Get the device pixel format.
|
|
264
|
+
*
|
|
265
|
+
* Hardware-specific pixel format for frame allocation.
|
|
266
|
+
*
|
|
267
|
+
* @example
|
|
268
|
+
* ```typescript
|
|
269
|
+
* frame.format = hw.devicePixelFormat;
|
|
270
|
+
* ```
|
|
271
|
+
*/
|
|
272
|
+
get devicePixelFormat(): AVPixelFormat;
|
|
273
|
+
/**
|
|
274
|
+
* Check if this hardware context has been disposed.
|
|
275
|
+
*
|
|
276
|
+
* @example
|
|
277
|
+
* ```typescript
|
|
278
|
+
* if (!hw.isDisposed) {
|
|
279
|
+
* hw.dispose();
|
|
280
|
+
* }
|
|
281
|
+
* ```
|
|
282
|
+
*/
|
|
283
|
+
get isDisposed(): boolean;
|
|
284
|
+
/**
|
|
285
|
+
* Get hardware frame constraints.
|
|
286
|
+
*
|
|
287
|
+
* Returns the resolution limits and supported pixel formats for this hardware device.
|
|
288
|
+
* Essential for validating encoder/decoder parameters before initialization.
|
|
289
|
+
*
|
|
290
|
+
* Direct mapping to av_hwdevice_get_hwframe_constraints().
|
|
291
|
+
*
|
|
292
|
+
* @param hwconfig - Optional hardware configuration pointer
|
|
293
|
+
*
|
|
294
|
+
* @returns Constraints object with resolution limits and formats, or null if not available
|
|
295
|
+
*
|
|
296
|
+
* @example
|
|
297
|
+
* ```typescript
|
|
298
|
+
* const hw = HardwareContext.auto();
|
|
299
|
+
* if (hw) {
|
|
300
|
+
* const constraints = hw.getFrameConstraints();
|
|
301
|
+
* if (constraints) {
|
|
302
|
+
* console.log(`Resolution: ${constraints.minWidth}x${constraints.minHeight} to ${constraints.maxWidth}x${constraints.maxHeight}`);
|
|
303
|
+
* console.log('Hardware formats:', constraints.validHwFormats);
|
|
304
|
+
* console.log('Software formats:', constraints.validSwFormats);
|
|
305
|
+
* }
|
|
306
|
+
* }
|
|
307
|
+
* ```
|
|
308
|
+
*
|
|
309
|
+
* @example
|
|
310
|
+
* ```typescript
|
|
311
|
+
* import { AV_HWDEVICE_TYPE_VIDEOTOOLBOX } from 'node-av/constants';
|
|
312
|
+
*
|
|
313
|
+
* // VideoToolbox has resolution limits
|
|
314
|
+
* const hw = HardwareContext.create(AV_HWDEVICE_TYPE_VIDEOTOOLBOX);
|
|
315
|
+
* const constraints = hw?.getFrameConstraints();
|
|
316
|
+
* if (constraints && (width > constraints.maxWidth || height > constraints.maxHeight)) {
|
|
317
|
+
* console.log('Resolution exceeds hardware limits, falling back to software encoder');
|
|
318
|
+
* }
|
|
319
|
+
* ```
|
|
320
|
+
*
|
|
321
|
+
* @see {@link HardwareDeviceContext.getHwframeConstraints} For low-level API
|
|
322
|
+
*/
|
|
323
|
+
getFrameConstraints(hwconfig?: bigint): {
|
|
324
|
+
validHwFormats?: number[];
|
|
325
|
+
validSwFormats?: number[];
|
|
326
|
+
minWidth: number;
|
|
327
|
+
minHeight: number;
|
|
328
|
+
maxWidth: number;
|
|
329
|
+
maxHeight: number;
|
|
330
|
+
} | null;
|
|
331
|
+
/**
|
|
332
|
+
* Check if this hardware type supports a specific codec.
|
|
333
|
+
*
|
|
334
|
+
* Queries FFmpeg's codec configurations to verify hardware support.
|
|
335
|
+
* Checks both decoder and encoder support based on parameters.
|
|
336
|
+
*
|
|
337
|
+
* Direct mapping to avcodec_get_hw_config().
|
|
338
|
+
*
|
|
339
|
+
* @param codecId - Codec ID from AVCodecID enum
|
|
340
|
+
*
|
|
341
|
+
* @param isEncoder - Check for encoder support (default: decoder)
|
|
342
|
+
*
|
|
343
|
+
* @returns true if codec is supported
|
|
344
|
+
*
|
|
345
|
+
* @example
|
|
346
|
+
* ```typescript
|
|
347
|
+
* import { AV_CODEC_ID_H264 } from 'node-av/constants';
|
|
348
|
+
*
|
|
349
|
+
* if (hw.supportsCodec(AV_CODEC_ID_H264, true)) {
|
|
350
|
+
* // Can use hardware H.264 encoder
|
|
351
|
+
* }
|
|
352
|
+
* ```
|
|
353
|
+
*
|
|
354
|
+
* @see {@link findSupportedCodecs} For all supported codecs
|
|
355
|
+
*/
|
|
356
|
+
supportsCodec(codecId: AVCodecID, isEncoder?: boolean): boolean;
|
|
357
|
+
/**
|
|
358
|
+
* Check if this hardware supports a specific pixel format for a codec.
|
|
359
|
+
*
|
|
360
|
+
* Verifies pixel format compatibility with hardware codec.
|
|
361
|
+
* Important for ensuring format compatibility in pipelines.
|
|
362
|
+
*
|
|
363
|
+
* @param codecId - Codec ID from AVCodecID enum
|
|
364
|
+
*
|
|
365
|
+
* @param pixelFormat - Pixel format to check
|
|
366
|
+
*
|
|
367
|
+
* @param isEncoder - Check for encoder (default: decoder)
|
|
368
|
+
*
|
|
369
|
+
* @returns true if pixel format is supported
|
|
370
|
+
*
|
|
371
|
+
* @example
|
|
372
|
+
* ```typescript
|
|
373
|
+
* import { AV_CODEC_ID_H264, AV_PIX_FMT_NV12 } from 'node-av/constants';
|
|
374
|
+
*
|
|
375
|
+
* if (hw.supportsPixelFormat(AV_CODEC_ID_H264, AV_PIX_FMT_NV12)) {
|
|
376
|
+
* // Can use NV12 format with H.264
|
|
377
|
+
* }
|
|
378
|
+
* ```
|
|
379
|
+
*
|
|
380
|
+
* @see {@link supportsCodec} For basic codec support
|
|
381
|
+
*/
|
|
382
|
+
supportsPixelFormat(codecId: AVCodecID, pixelFormat: AVPixelFormat, isEncoder?: boolean): boolean;
|
|
383
|
+
/**
|
|
384
|
+
* Get the appropriate encoder codec for a given base codec name.
|
|
385
|
+
*
|
|
386
|
+
* Maps generic codec names to hardware-specific encoder implementations.
|
|
387
|
+
* Returns null if no hardware encoder is available for the codec.
|
|
388
|
+
* Automatically tests encoder viability before returning.
|
|
389
|
+
*
|
|
390
|
+
* @param codecOrStream - Generic codec name (e.g., 'h264', 'hevc', 'av1'), AVCodecID or Stream
|
|
391
|
+
*
|
|
392
|
+
* @param validate - Whether to validate encoder by testing (default: false)
|
|
393
|
+
*
|
|
394
|
+
* @returns Hardware encoder codec or null if unsupported
|
|
395
|
+
*
|
|
396
|
+
* @example
|
|
397
|
+
* ```typescript
|
|
398
|
+
* const encoderCodec = hw.getEncoderCodec('h264');
|
|
399
|
+
* if (encoderCodec) {
|
|
400
|
+
* console.log(`Using encoder: ${encoderCodec.name}`);
|
|
401
|
+
* // e.g., "h264_nvenc" for CUDA
|
|
402
|
+
* }
|
|
403
|
+
* ```
|
|
404
|
+
*
|
|
405
|
+
* @example
|
|
406
|
+
* ```typescript
|
|
407
|
+
* // Use with Encoder.create
|
|
408
|
+
* const codec = hw.getEncoderCodec('hevc');
|
|
409
|
+
* if (codec) {
|
|
410
|
+
* const encoder = await Encoder.create(codec, { ... });
|
|
411
|
+
* }
|
|
412
|
+
* ```
|
|
413
|
+
*
|
|
414
|
+
* @see {@link Encoder.create} For using the codec
|
|
415
|
+
*/
|
|
416
|
+
getEncoderCodec(codecOrStream: BaseCodecName | AVCodecID | Stream, validate?: boolean): Codec | null;
|
|
417
|
+
/**
|
|
418
|
+
* Get the appropriate decoder codec for a given base codec name.
|
|
419
|
+
*
|
|
420
|
+
* Maps generic codec names to hardware-specific decoder implementations.
|
|
421
|
+
* Returns null if no hardware decoder is available for the codec.
|
|
422
|
+
* Automatically searches for decoders that support this hardware device type.
|
|
423
|
+
*
|
|
424
|
+
* @param codec - Generic codec name (e.g., 'h264', 'hevc', 'av1') or AVCodecID
|
|
425
|
+
*
|
|
426
|
+
* @returns Hardware decoder codec or null if unsupported
|
|
427
|
+
*
|
|
428
|
+
* @example
|
|
429
|
+
* ```typescript
|
|
430
|
+
* const decoderCodec = hw.getDecoderCodec('hevc');
|
|
431
|
+
* if (decoderCodec) {
|
|
432
|
+
* console.log(`Using decoder: ${decoderCodec.name}`);
|
|
433
|
+
* // e.g., "hevc_qsv" for QSV
|
|
434
|
+
* }
|
|
435
|
+
* ```
|
|
436
|
+
*
|
|
437
|
+
* @example
|
|
438
|
+
* ```typescript
|
|
439
|
+
* // Use with Decoder.create
|
|
440
|
+
* const codec = hw.getDecoderCodec(AV_CODEC_ID_H264);
|
|
441
|
+
* if (codec) {
|
|
442
|
+
* const decoder = await Decoder.create(stream, { hardware: hw });
|
|
443
|
+
* }
|
|
444
|
+
* ```
|
|
445
|
+
*
|
|
446
|
+
* @see {@link Decoder.create} For using the codec
|
|
447
|
+
* @see {@link getEncoderCodec} For hardware encoders
|
|
448
|
+
*/
|
|
449
|
+
getDecoderCodec(codec: BaseCodecName | AVCodecID): Codec | null;
|
|
450
|
+
/**
|
|
451
|
+
* Test if hardware acceleration is working by decoding a test frame.
|
|
452
|
+
*
|
|
453
|
+
* Creates a simple decoder and attempts to decode with hardware acceleration.
|
|
454
|
+
* Returns true if hardware decoding succeeds, false otherwise.
|
|
455
|
+
* Useful for validating hardware setup before processing.
|
|
456
|
+
*
|
|
457
|
+
* @param codecId - Codec ID to test (default: H.264)
|
|
458
|
+
*
|
|
459
|
+
* @returns Promise that resolves to true if hardware works
|
|
460
|
+
*
|
|
461
|
+
* @example
|
|
462
|
+
* ```typescript
|
|
463
|
+
* const hw = HardwareContext.auto();
|
|
464
|
+
* if (hw && await hw.testDecoder()) {
|
|
465
|
+
* console.log('Hardware acceleration working!');
|
|
466
|
+
* // Proceed with hardware decoding/encoding
|
|
467
|
+
* } else {
|
|
468
|
+
* console.log('Hardware acceleration not available');
|
|
469
|
+
* // Fall back to software
|
|
470
|
+
* }
|
|
471
|
+
* ```
|
|
472
|
+
*
|
|
473
|
+
* @example
|
|
474
|
+
* ```typescript
|
|
475
|
+
* // Test specific hardware
|
|
476
|
+
* const cuda = HardwareContext.create(AV_HWDEVICE_TYPE_CUDA);
|
|
477
|
+
* if (cuda && await cuda.testDecoder()) {
|
|
478
|
+
* console.log('CUDA acceleration works');
|
|
479
|
+
* }
|
|
480
|
+
* ```
|
|
481
|
+
*
|
|
482
|
+
* @see {@link supportsCodec} For checking codec support
|
|
483
|
+
*/
|
|
484
|
+
testDecoder(codecId?: AVCodecID): boolean;
|
|
485
|
+
/**
|
|
486
|
+
* Test if hardware encoding works with a specific codec pair.
|
|
487
|
+
*
|
|
488
|
+
* Attempts to decode and re-encode a test frame using hardware acceleration.
|
|
489
|
+
* Validates both decoding and encoding paths for the given codecs.
|
|
490
|
+
*
|
|
491
|
+
* @param decoderCodec - Codec name, ID, or instance to use for decoding
|
|
492
|
+
*
|
|
493
|
+
* @param encoderCodec - Codec name or instance to use for encoding
|
|
494
|
+
*
|
|
495
|
+
* @returns true if both decoding and encoding succeed
|
|
496
|
+
*
|
|
497
|
+
* @example
|
|
498
|
+
* ```typescript
|
|
499
|
+
* import { AV_CODEC_ID_H264 } from 'node-av/constants';
|
|
500
|
+
*
|
|
501
|
+
* const hw = HardwareContext.auto();
|
|
502
|
+
* if (hw && hw.testEncoder(AV_CODEC_ID_H264, AV_CODEC_ID_H264)) {
|
|
503
|
+
* console.log('Hardware H.264 encoding works!');
|
|
504
|
+
* }
|
|
505
|
+
* ```
|
|
506
|
+
*
|
|
507
|
+
* @see {@link getEncoderCodec} For obtaining hardware encoder codec
|
|
508
|
+
*/
|
|
509
|
+
testEncoder(decoderCodec: FFDecoderCodec | Codec | AVCodecID, encoderCodec: FFEncoderCodec | Codec): boolean;
|
|
510
|
+
/**
|
|
511
|
+
* Find all codecs that support this hardware device.
|
|
512
|
+
*
|
|
513
|
+
* Iterates through all available codecs and checks hardware compatibility.
|
|
514
|
+
* Useful for discovering available hardware acceleration options.
|
|
515
|
+
*
|
|
516
|
+
* Direct mapping to av_codec_iterate() with hardware config checks.
|
|
517
|
+
*
|
|
518
|
+
* @param isEncoder - Find encoders (true) or decoders (false)
|
|
519
|
+
*
|
|
520
|
+
* @returns Array of codec names that support this hardware
|
|
521
|
+
*
|
|
522
|
+
* @example
|
|
523
|
+
* ```typescript
|
|
524
|
+
* const decoders = hw.findSupportedCodecs(false);
|
|
525
|
+
* console.log('Hardware decoders:', decoders);
|
|
526
|
+
* // ["h264_cuvid", "hevc_cuvid", ...]
|
|
527
|
+
*
|
|
528
|
+
* const encoders = hw.findSupportedCodecs(true);
|
|
529
|
+
* console.log('Hardware encoders:', encoders);
|
|
530
|
+
* // ["h264_nvenc", "hevc_nvenc", ...]
|
|
531
|
+
* ```
|
|
532
|
+
*
|
|
533
|
+
* @see {@link supportsCodec} For checking specific codec
|
|
534
|
+
*/
|
|
535
|
+
findSupportedCodecs(isEncoder?: boolean): string[];
|
|
536
|
+
/**
|
|
537
|
+
* Clean up and free hardware resources.
|
|
538
|
+
*
|
|
539
|
+
* Releases the hardware device context.
|
|
540
|
+
* Safe to call multiple times.
|
|
541
|
+
* Automatically called by Symbol.dispose.
|
|
542
|
+
*
|
|
543
|
+
* @example
|
|
544
|
+
* ```typescript
|
|
545
|
+
* const hw = HardwareContext.auto();
|
|
546
|
+
* try {
|
|
547
|
+
* // Use hardware
|
|
548
|
+
* } finally {
|
|
549
|
+
* hw?.dispose();
|
|
550
|
+
* }
|
|
551
|
+
* ```
|
|
552
|
+
*
|
|
553
|
+
* @see {@link Symbol.dispose} For automatic cleanup
|
|
554
|
+
*/
|
|
555
|
+
dispose(): void;
|
|
556
|
+
/**
|
|
557
|
+
* Test hardware decoding with a specific codec.
|
|
558
|
+
*
|
|
559
|
+
* @param decoderCodec - Decoder codec name, ID, or instance to test
|
|
560
|
+
*
|
|
561
|
+
* @param encoderCodec - Optional encoder codec name or instance to test
|
|
562
|
+
*
|
|
563
|
+
* @param useFilter - Whether to test hwdownload filter (default: true)
|
|
564
|
+
*
|
|
565
|
+
* @returns true if decoding succeeds
|
|
566
|
+
*
|
|
567
|
+
* @internal
|
|
568
|
+
*/
|
|
569
|
+
private testCodec;
|
|
570
|
+
/**
|
|
571
|
+
* Map AVCodecID to base codec name for hardware encoder lookup.
|
|
572
|
+
*
|
|
573
|
+
* Converts codec IDs to generic codec names used for encoder naming.
|
|
574
|
+
* Used internally to find hardware-specific encoder implementations.
|
|
575
|
+
*
|
|
576
|
+
* @param codecId - AVCodecID enum value
|
|
577
|
+
*
|
|
578
|
+
* @returns Base codec name or null if unsupported
|
|
579
|
+
*
|
|
580
|
+
* @internal
|
|
581
|
+
*/
|
|
582
|
+
private getBaseCodecName;
|
|
583
|
+
/**
|
|
584
|
+
* Map base codec name to AVCodecID for internal use.
|
|
585
|
+
*
|
|
586
|
+
* Converts generic codec names to AVCodecID enum values.
|
|
587
|
+
* Used internally for codec testing and validation.
|
|
588
|
+
*
|
|
589
|
+
* @param codecBaseName - Base codec name string
|
|
590
|
+
*
|
|
591
|
+
* @returns Corresponding AVCodecID or null if unsupported
|
|
592
|
+
*
|
|
593
|
+
* @internal
|
|
594
|
+
*/
|
|
595
|
+
private getCodecIDFromBaseName;
|
|
596
|
+
/**
|
|
597
|
+
* Get the hardware decoder pixel format for this device type.
|
|
598
|
+
*
|
|
599
|
+
* Maps device types to their corresponding pixel formats.
|
|
600
|
+
* Used internally for frame format configuration.
|
|
601
|
+
*
|
|
602
|
+
* @returns Hardware-specific pixel format
|
|
603
|
+
*
|
|
604
|
+
* @internal
|
|
605
|
+
*/
|
|
606
|
+
private getHardwareDecoderPixelFormat;
|
|
607
|
+
/**
|
|
608
|
+
* Create hardware context from device type.
|
|
609
|
+
*
|
|
610
|
+
* Internal factory method using av_hwdevice_ctx_create().
|
|
611
|
+
*
|
|
612
|
+
* @param deviceType - AVHWDeviceType enum value
|
|
613
|
+
*
|
|
614
|
+
* @param device - Optional device specifier
|
|
615
|
+
*
|
|
616
|
+
* @param options - Optional device options
|
|
617
|
+
*
|
|
618
|
+
* @returns Hardware context or null if creation fails
|
|
619
|
+
*
|
|
620
|
+
* @internal
|
|
621
|
+
*/
|
|
622
|
+
private static createFromType;
|
|
623
|
+
/**
|
|
624
|
+
* Get platform-specific preference order for hardware types.
|
|
625
|
+
*
|
|
626
|
+
* Returns available hardware types sorted by platform preference.
|
|
627
|
+
* Ensures optimal hardware selection for each platform.
|
|
628
|
+
*
|
|
629
|
+
* @returns Array of AVHWDeviceType values in preference order
|
|
630
|
+
*
|
|
631
|
+
* @internal
|
|
632
|
+
*/
|
|
633
|
+
private static getPreferenceOrder;
|
|
634
|
+
/**
|
|
635
|
+
* Dispose of hardware context.
|
|
636
|
+
*
|
|
637
|
+
* Implements Disposable interface for automatic cleanup.
|
|
638
|
+
* Equivalent to calling dispose().
|
|
639
|
+
*
|
|
640
|
+
* @example
|
|
641
|
+
* ```typescript
|
|
642
|
+
* {
|
|
643
|
+
* using hw = HardwareContext.auto();
|
|
644
|
+
* // Use hardware context...
|
|
645
|
+
* } // Automatically disposed
|
|
646
|
+
* ```
|
|
647
|
+
*
|
|
648
|
+
* @see {@link dispose} For manual cleanup
|
|
649
|
+
*/
|
|
650
|
+
[Symbol.dispose](): void;
|
|
651
|
+
}
|