@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,586 @@
|
|
|
1
|
+
import { Rational } from './rational.js';
|
|
2
|
+
import type { AVCodecCap, AVCodecID, AVHWDeviceType, AVMediaType, AVPixelFormat, AVSampleFormat } from '../constants/constants.js';
|
|
3
|
+
import type { FFDecoderCodec } from '../constants/decoders.js';
|
|
4
|
+
import type { FFEncoderCodec } from '../constants/encoders.js';
|
|
5
|
+
import type { FFHWDeviceType } from '../constants/hardware.js';
|
|
6
|
+
import type { NativeCodec, NativeWrapper } from './native-types.js';
|
|
7
|
+
import type { ChannelLayout } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Codec profile definition
|
|
10
|
+
*/
|
|
11
|
+
export interface CodecProfile {
|
|
12
|
+
/** Profile ID (FF_PROFILE_*) */
|
|
13
|
+
profile: number;
|
|
14
|
+
/** Human-readable profile name */
|
|
15
|
+
name?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Codec descriptor for audio/video encoding and decoding.
|
|
19
|
+
*
|
|
20
|
+
* Represents an encoder or decoder implementation that can process media data.
|
|
21
|
+
* Contains codec capabilities, supported formats, and hardware acceleration information.
|
|
22
|
+
* Used to create codec contexts for actual encoding/decoding operations.
|
|
23
|
+
* Supports both software and hardware-accelerated codecs.
|
|
24
|
+
*
|
|
25
|
+
* Direct mapping to FFmpeg's AVCodec.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* import { Codec, FFmpegError } from 'node-av';
|
|
30
|
+
* import { AV_CODEC_ID_H264, FF_ENCODER_LIBX264 } from 'node-av/constants';
|
|
31
|
+
*
|
|
32
|
+
* // Find decoder by ID
|
|
33
|
+
* const decoder = Codec.findDecoder(AV_CODEC_ID_H264);
|
|
34
|
+
* if (!decoder) {
|
|
35
|
+
* throw new Error('H.264 decoder not available');
|
|
36
|
+
* }
|
|
37
|
+
*
|
|
38
|
+
* // Find encoder by name
|
|
39
|
+
* const encoder = Codec.findEncoderByName(FF_ENCODER_LIBX264);
|
|
40
|
+
* if (!encoder) {
|
|
41
|
+
* throw new Error('libx264 encoder not available');
|
|
42
|
+
* }
|
|
43
|
+
*
|
|
44
|
+
* // Check capabilities
|
|
45
|
+
* console.log(`Codec: ${decoder.name}`);
|
|
46
|
+
* console.log(`Type: ${decoder.type}`);
|
|
47
|
+
* console.log(`Hardware: ${decoder.hasHardwareAcceleration()}`);
|
|
48
|
+
*
|
|
49
|
+
* // Get supported pixel formats
|
|
50
|
+
* const formats = decoder.pixelFormats;
|
|
51
|
+
* if (formats) {
|
|
52
|
+
* console.log(`Supported formats: ${formats.join(', ')}`);
|
|
53
|
+
* }
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* @see [AVCodec](https://ffmpeg.org/doxygen/trunk/structAVCodec.html) - FFmpeg Doxygen
|
|
57
|
+
* @see {@link CodecContext} For encoding/decoding operations
|
|
58
|
+
*/
|
|
59
|
+
export declare class Codec implements NativeWrapper<NativeCodec> {
|
|
60
|
+
private native;
|
|
61
|
+
/**
|
|
62
|
+
* @param native - The native codec instance
|
|
63
|
+
*
|
|
64
|
+
* @internal
|
|
65
|
+
*/
|
|
66
|
+
constructor(native: NativeCodec);
|
|
67
|
+
/**
|
|
68
|
+
* Find a decoder by codec ID.
|
|
69
|
+
*
|
|
70
|
+
* Searches for a decoder that can decode the specified codec format.
|
|
71
|
+
*
|
|
72
|
+
* Direct mapping to avcodec_find_decoder().
|
|
73
|
+
*
|
|
74
|
+
* @param id - Codec ID to search for
|
|
75
|
+
*
|
|
76
|
+
* @returns Decoder if found, null otherwise
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* import { AV_CODEC_ID_H264, AV_CODEC_ID_AAC } from 'node-av/constants';
|
|
81
|
+
*
|
|
82
|
+
* // Find H.264 video decoder
|
|
83
|
+
* const h264 = Codec.findDecoder(AV_CODEC_ID_H264);
|
|
84
|
+
* if (h264) {
|
|
85
|
+
* console.log(`Found: ${h264.name}`);
|
|
86
|
+
* }
|
|
87
|
+
*
|
|
88
|
+
* // Find AAC audio decoder
|
|
89
|
+
* const aac = Codec.findDecoder(AV_CODEC_ID_AAC);
|
|
90
|
+
* ```
|
|
91
|
+
*
|
|
92
|
+
* @see {@link findDecoderByName} To find by name
|
|
93
|
+
* @see {@link findEncoder} To find encoders
|
|
94
|
+
*/
|
|
95
|
+
static findDecoder(id: AVCodecID): Codec | null;
|
|
96
|
+
/**
|
|
97
|
+
* Find a decoder by name.
|
|
98
|
+
*
|
|
99
|
+
* Searches for a specific decoder implementation by name.
|
|
100
|
+
* Useful when multiple decoders exist for the same codec.
|
|
101
|
+
*
|
|
102
|
+
* Direct mapping to avcodec_find_decoder_by_name().
|
|
103
|
+
*
|
|
104
|
+
* @param name - Decoder name
|
|
105
|
+
*
|
|
106
|
+
* @returns Decoder if found, null otherwise
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```typescript
|
|
110
|
+
* // Find specific H.264 decoder
|
|
111
|
+
* const decoder = Codec.findDecoderByName('h264_cuvid');
|
|
112
|
+
* if (decoder) {
|
|
113
|
+
* console.log('Found NVIDIA hardware decoder');
|
|
114
|
+
* }
|
|
115
|
+
*
|
|
116
|
+
* // Find software decoder
|
|
117
|
+
* const sw = Codec.findDecoderByName('h264');
|
|
118
|
+
* ```
|
|
119
|
+
*
|
|
120
|
+
* @see {@link findDecoder} To find by codec ID
|
|
121
|
+
*/
|
|
122
|
+
static findDecoderByName(name: FFDecoderCodec): Codec | null;
|
|
123
|
+
/**
|
|
124
|
+
* Find an encoder by codec ID.
|
|
125
|
+
*
|
|
126
|
+
* Searches for an encoder that can encode to the specified codec format.
|
|
127
|
+
*
|
|
128
|
+
* Direct mapping to avcodec_find_encoder().
|
|
129
|
+
*
|
|
130
|
+
* @param id - Codec ID to search for
|
|
131
|
+
*
|
|
132
|
+
* @returns Encoder if found, null otherwise
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* import { AV_CODEC_ID_H264, AV_CODEC_ID_AAC } from 'node-av/constants';
|
|
137
|
+
*
|
|
138
|
+
* // Find H.264 video encoder
|
|
139
|
+
* const h264 = Codec.findEncoder(AV_CODEC_ID_H264);
|
|
140
|
+
* if (h264) {
|
|
141
|
+
* console.log(`Found: ${h264.name}`);
|
|
142
|
+
* }
|
|
143
|
+
*
|
|
144
|
+
* // Find AAC audio encoder
|
|
145
|
+
* const aac = Codec.findEncoder(AV_CODEC_ID_AAC);
|
|
146
|
+
* ```
|
|
147
|
+
*
|
|
148
|
+
* @see {@link findEncoderByName} To find by name
|
|
149
|
+
* @see {@link findDecoder} To find decoders
|
|
150
|
+
*/
|
|
151
|
+
static findEncoder(id: AVCodecID): Codec | null;
|
|
152
|
+
/**
|
|
153
|
+
* Find an encoder by name.
|
|
154
|
+
*
|
|
155
|
+
* Searches for a specific encoder implementation by name.
|
|
156
|
+
* Useful when multiple encoders exist for the same codec.
|
|
157
|
+
*
|
|
158
|
+
* Direct mapping to avcodec_find_encoder_by_name().
|
|
159
|
+
*
|
|
160
|
+
* @param name - Encoder name
|
|
161
|
+
*
|
|
162
|
+
* @returns Encoder if found, null otherwise
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
* ```typescript
|
|
166
|
+
* // Find specific H.264 encoder
|
|
167
|
+
* const x264 = Codec.findEncoderByName(FF_ENCODER_LIBX264);
|
|
168
|
+
* if (x264) {
|
|
169
|
+
* console.log('Found x264 encoder');
|
|
170
|
+
* }
|
|
171
|
+
*
|
|
172
|
+
* // Find hardware encoder
|
|
173
|
+
* const nvenc = Codec.findEncoderByName('h264_nvenc');
|
|
174
|
+
* ```
|
|
175
|
+
*
|
|
176
|
+
* @see {@link findEncoder} To find by codec ID
|
|
177
|
+
*/
|
|
178
|
+
static findEncoderByName(name: FFEncoderCodec): Codec | null;
|
|
179
|
+
/**
|
|
180
|
+
* Get list of all available codecs.
|
|
181
|
+
*
|
|
182
|
+
* Returns all registered codecs (both encoders and decoders).
|
|
183
|
+
*
|
|
184
|
+
* @returns Array of all available codecs
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```typescript
|
|
188
|
+
* // List all codecs
|
|
189
|
+
* const codecs = Codec.getCodecList();
|
|
190
|
+
* console.log(`Total codecs: ${codecs.length}`);
|
|
191
|
+
*
|
|
192
|
+
* // Filter encoders
|
|
193
|
+
* const encoders = codecs.filter(c => c.isEncoder());
|
|
194
|
+
* console.log(`Encoders: ${encoders.length}`);
|
|
195
|
+
*
|
|
196
|
+
* // Filter hardware codecs
|
|
197
|
+
* const hw = codecs.filter(c => c.hasHardwareAcceleration());
|
|
198
|
+
* console.log(`Hardware codecs: ${hw.length}`);
|
|
199
|
+
* ```
|
|
200
|
+
*
|
|
201
|
+
* @see {@link iterateCodecs} For memory-efficient iteration
|
|
202
|
+
*/
|
|
203
|
+
static getCodecList(): Codec[];
|
|
204
|
+
/**
|
|
205
|
+
* Iterate through available codecs.
|
|
206
|
+
*
|
|
207
|
+
* Memory-efficient way to iterate through all codecs.
|
|
208
|
+
* Uses an opaque pointer to track iteration state.
|
|
209
|
+
*
|
|
210
|
+
* Direct mapping to av_codec_iterate().
|
|
211
|
+
*
|
|
212
|
+
* @param opaque - Iteration state (null to start)
|
|
213
|
+
*
|
|
214
|
+
* @returns Next codec and state, or null when done
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
217
|
+
* ```typescript
|
|
218
|
+
* // Iterate all codecs
|
|
219
|
+
* let iter = null;
|
|
220
|
+
* let result;
|
|
221
|
+
* while ((result = Codec.iterateCodecs(iter))) {
|
|
222
|
+
* console.log(`Codec: ${result.codec.name}`);
|
|
223
|
+
* iter = result.opaque;
|
|
224
|
+
* }
|
|
225
|
+
* ```
|
|
226
|
+
*
|
|
227
|
+
* @see {@link getCodecList} For simple array access
|
|
228
|
+
*/
|
|
229
|
+
static iterateCodecs(opaque?: bigint | null): {
|
|
230
|
+
codec: Codec;
|
|
231
|
+
opaque: bigint;
|
|
232
|
+
} | null;
|
|
233
|
+
/**
|
|
234
|
+
* Codec name.
|
|
235
|
+
*
|
|
236
|
+
* Short name identifier for the codec (e.g., 'h264', 'aac').
|
|
237
|
+
*
|
|
238
|
+
* Direct mapping to AVCodec->name.
|
|
239
|
+
*/
|
|
240
|
+
get name(): string | null;
|
|
241
|
+
/**
|
|
242
|
+
* Codec long name.
|
|
243
|
+
*
|
|
244
|
+
* Human-readable description of the codec.
|
|
245
|
+
*
|
|
246
|
+
* Direct mapping to AVCodec->long_name.
|
|
247
|
+
*/
|
|
248
|
+
get longName(): string | null;
|
|
249
|
+
/**
|
|
250
|
+
* Media type.
|
|
251
|
+
*
|
|
252
|
+
* Type of media this codec processes (video, audio, subtitle, etc.).
|
|
253
|
+
*
|
|
254
|
+
* Direct mapping to AVCodec->type.
|
|
255
|
+
*/
|
|
256
|
+
get type(): AVMediaType;
|
|
257
|
+
/**
|
|
258
|
+
* Codec ID.
|
|
259
|
+
*
|
|
260
|
+
* Unique identifier for the codec format.
|
|
261
|
+
*
|
|
262
|
+
* Direct mapping to AVCodec->id.
|
|
263
|
+
*/
|
|
264
|
+
get id(): AVCodecID;
|
|
265
|
+
/**
|
|
266
|
+
* Codec capabilities.
|
|
267
|
+
*
|
|
268
|
+
* Bitfield of AV_CODEC_CAP_* flags indicating codec features.
|
|
269
|
+
*
|
|
270
|
+
* Direct mapping to AVCodec->capabilities.
|
|
271
|
+
*/
|
|
272
|
+
get capabilities(): AVCodecCap;
|
|
273
|
+
/**
|
|
274
|
+
* Check if codec has specific capabilities.
|
|
275
|
+
*
|
|
276
|
+
* Tests whether all specified capabilities are present using bitwise AND.
|
|
277
|
+
*
|
|
278
|
+
* @param caps - One or more capability values to check
|
|
279
|
+
*
|
|
280
|
+
* @returns true if all specified capabilities are present, false otherwise
|
|
281
|
+
*
|
|
282
|
+
* @example
|
|
283
|
+
* ```typescript
|
|
284
|
+
* import { AV_CODEC_CAP_HARDWARE } from 'node-av/constants';
|
|
285
|
+
*
|
|
286
|
+
* if (codec.hasCapabilities(AV_CODEC_CAP_HARDWARE)) {
|
|
287
|
+
* console.log('This codec supports hardware acceleration');
|
|
288
|
+
* }
|
|
289
|
+
* ```
|
|
290
|
+
*
|
|
291
|
+
* @see {@link capabilities} For direct capabilities access
|
|
292
|
+
*/
|
|
293
|
+
hasCapabilities(...caps: AVCodecCap[]): boolean;
|
|
294
|
+
/**
|
|
295
|
+
* Maximum lowres value.
|
|
296
|
+
*
|
|
297
|
+
* Maximum value for lowres decoding (0 = no lowres support).
|
|
298
|
+
*
|
|
299
|
+
* Direct mapping to AVCodec->max_lowres.
|
|
300
|
+
*/
|
|
301
|
+
get maxLowres(): number;
|
|
302
|
+
/**
|
|
303
|
+
* Supported profiles.
|
|
304
|
+
*
|
|
305
|
+
* Array of profiles this codec can handle (e.g., baseline, main, high).
|
|
306
|
+
*
|
|
307
|
+
* Direct mapping to AVCodec->profiles.
|
|
308
|
+
*/
|
|
309
|
+
get profiles(): CodecProfile[] | null;
|
|
310
|
+
/**
|
|
311
|
+
* Wrapper name.
|
|
312
|
+
*
|
|
313
|
+
* Name of the codec wrapper, if this is a wrapper codec.
|
|
314
|
+
*
|
|
315
|
+
* Direct mapping to AVCodec->wrapper_name.
|
|
316
|
+
*/
|
|
317
|
+
get wrapper(): string | null;
|
|
318
|
+
/**
|
|
319
|
+
* Supported frame rates.
|
|
320
|
+
*
|
|
321
|
+
* Array of frame rates this video codec supports.
|
|
322
|
+
* Null for audio codecs or if all rates are supported.
|
|
323
|
+
*
|
|
324
|
+
* Direct mapping to AVCodec->supported_framerates.
|
|
325
|
+
*/
|
|
326
|
+
get supportedFramerates(): Rational[] | null;
|
|
327
|
+
/**
|
|
328
|
+
* Supported pixel formats.
|
|
329
|
+
*
|
|
330
|
+
* Array of pixel formats this video codec supports.
|
|
331
|
+
* Null for audio codecs.
|
|
332
|
+
*
|
|
333
|
+
* Direct mapping to AVCodec->pix_fmts.
|
|
334
|
+
*/
|
|
335
|
+
get pixelFormats(): AVPixelFormat[] | null;
|
|
336
|
+
/**
|
|
337
|
+
* Supported sample rates.
|
|
338
|
+
*
|
|
339
|
+
* Array of sample rates this audio codec supports.
|
|
340
|
+
* Null for video codecs or if all rates are supported.
|
|
341
|
+
*
|
|
342
|
+
* Direct mapping to AVCodec->supported_samplerates.
|
|
343
|
+
*/
|
|
344
|
+
get supportedSamplerates(): number[] | null;
|
|
345
|
+
/**
|
|
346
|
+
* Supported sample formats.
|
|
347
|
+
*
|
|
348
|
+
* Array of sample formats this audio codec supports.
|
|
349
|
+
* Null for video codecs.
|
|
350
|
+
*
|
|
351
|
+
* Direct mapping to AVCodec->sample_fmts.
|
|
352
|
+
*/
|
|
353
|
+
get sampleFormats(): AVSampleFormat[] | null;
|
|
354
|
+
/**
|
|
355
|
+
* Supported channel layouts.
|
|
356
|
+
*
|
|
357
|
+
* Array of channel layouts this audio codec supports.
|
|
358
|
+
* Null for video codecs.
|
|
359
|
+
*
|
|
360
|
+
* Direct mapping to AVCodec->ch_layouts.
|
|
361
|
+
*/
|
|
362
|
+
get channelLayouts(): ChannelLayout[] | null;
|
|
363
|
+
/**
|
|
364
|
+
* Check if codec is an encoder.
|
|
365
|
+
*
|
|
366
|
+
* @returns True if this codec can encode
|
|
367
|
+
*
|
|
368
|
+
* @example
|
|
369
|
+
* ```typescript
|
|
370
|
+
* const codec = Codec.findEncoderByName(FF_ENCODER_LIBX264);
|
|
371
|
+
* if (codec?.isEncoder()) {
|
|
372
|
+
* console.log('This is an encoder');
|
|
373
|
+
* }
|
|
374
|
+
* ```
|
|
375
|
+
*
|
|
376
|
+
* @see {@link isDecoder} To check for decoders
|
|
377
|
+
*/
|
|
378
|
+
isEncoder(): boolean;
|
|
379
|
+
/**
|
|
380
|
+
* Check if codec is a decoder.
|
|
381
|
+
*
|
|
382
|
+
* @returns True if this codec can decode
|
|
383
|
+
*
|
|
384
|
+
* @example
|
|
385
|
+
* ```typescript
|
|
386
|
+
* const codec = Codec.findDecoder(AV_CODEC_ID_H264);
|
|
387
|
+
* if (codec?.isDecoder()) {
|
|
388
|
+
* console.log('This is a decoder');
|
|
389
|
+
* }
|
|
390
|
+
* ```
|
|
391
|
+
*
|
|
392
|
+
* @see {@link isEncoder} To check for encoders
|
|
393
|
+
*/
|
|
394
|
+
isDecoder(): boolean;
|
|
395
|
+
/**
|
|
396
|
+
* Check if codec is experimental.
|
|
397
|
+
*
|
|
398
|
+
* Experimental codecs require explicit opt-in to use.
|
|
399
|
+
*
|
|
400
|
+
* @returns True if codec is marked experimental
|
|
401
|
+
*
|
|
402
|
+
* @example
|
|
403
|
+
* ```typescript
|
|
404
|
+
* if (codec.isExperimental()) {
|
|
405
|
+
* console.warn('This codec is experimental');
|
|
406
|
+
* // Need to set strict_std_compliance = -2
|
|
407
|
+
* }
|
|
408
|
+
* ```
|
|
409
|
+
*/
|
|
410
|
+
isExperimental(): boolean;
|
|
411
|
+
/**
|
|
412
|
+
* Check if codec supports hardware acceleration.
|
|
413
|
+
*
|
|
414
|
+
* Checks if the codec has any hardware configuration.
|
|
415
|
+
*
|
|
416
|
+
* @returns True if hardware acceleration is available
|
|
417
|
+
*
|
|
418
|
+
* @example
|
|
419
|
+
* ```typescript
|
|
420
|
+
* const codec = Codec.findDecoderByName('h264_cuvid');
|
|
421
|
+
* if (codec?.hasHardwareAcceleration()) {
|
|
422
|
+
* console.log('Hardware acceleration available');
|
|
423
|
+
* }
|
|
424
|
+
* ```
|
|
425
|
+
*
|
|
426
|
+
* @see {@link getSupportedDeviceTypes} For specific device types
|
|
427
|
+
*/
|
|
428
|
+
hasHardwareAcceleration(): boolean;
|
|
429
|
+
/**
|
|
430
|
+
* Check if codec supports specific device type.
|
|
431
|
+
*
|
|
432
|
+
* @param deviceType - Hardware device type to check
|
|
433
|
+
*
|
|
434
|
+
* @returns True if device type is supported
|
|
435
|
+
*
|
|
436
|
+
* @example
|
|
437
|
+
* ```typescript
|
|
438
|
+
* import { AV_HWDEVICE_TYPE_CUDA } from 'node-av/constants';
|
|
439
|
+
*
|
|
440
|
+
* if (codec.supportsDevice(AV_HWDEVICE_TYPE_CUDA)) {
|
|
441
|
+
* console.log('Supports NVIDIA CUDA');
|
|
442
|
+
* }
|
|
443
|
+
* ```
|
|
444
|
+
*
|
|
445
|
+
* @see {@link getSupportedDeviceTypes} For all supported types
|
|
446
|
+
*/
|
|
447
|
+
supportsDevice(deviceType: AVHWDeviceType | FFHWDeviceType): boolean;
|
|
448
|
+
/**
|
|
449
|
+
* Check if decoder supports hardware acceleration.
|
|
450
|
+
*
|
|
451
|
+
* @param deviceType - Optional specific device type
|
|
452
|
+
*
|
|
453
|
+
* @returns True if hardware decoding is supported
|
|
454
|
+
*
|
|
455
|
+
* @example
|
|
456
|
+
* ```typescript
|
|
457
|
+
* import { AV_HWDEVICE_TYPE_VIDEOTOOLBOX } from 'node-av/constants';
|
|
458
|
+
*
|
|
459
|
+
* // Check any hardware support
|
|
460
|
+
* if (codec.isHardwareAcceleratedDecoder()) {
|
|
461
|
+
* console.log('Hardware decoding available');
|
|
462
|
+
* }
|
|
463
|
+
*
|
|
464
|
+
* // Check specific device
|
|
465
|
+
* if (codec.isHardwareAcceleratedDecoder(AV_HWDEVICE_TYPE_VIDEOTOOLBOX)) {
|
|
466
|
+
* console.log('VideoToolbox decoding available');
|
|
467
|
+
* }
|
|
468
|
+
* ```
|
|
469
|
+
*/
|
|
470
|
+
isHardwareAcceleratedDecoder(deviceType?: AVHWDeviceType | FFHWDeviceType): boolean;
|
|
471
|
+
/**
|
|
472
|
+
* Check if encoder supports hardware acceleration.
|
|
473
|
+
*
|
|
474
|
+
* @param deviceType - Optional specific device type
|
|
475
|
+
*
|
|
476
|
+
* @returns True if hardware encoding is supported
|
|
477
|
+
*
|
|
478
|
+
* @example
|
|
479
|
+
* ```typescript
|
|
480
|
+
* import { AV_HWDEVICE_TYPE_VAAPI } from 'node-av/constants';
|
|
481
|
+
*
|
|
482
|
+
* // Check any hardware support
|
|
483
|
+
* if (codec.isHardwareAcceleratedEncoder()) {
|
|
484
|
+
* console.log('Hardware encoding available');
|
|
485
|
+
* }
|
|
486
|
+
*
|
|
487
|
+
* // Check specific device
|
|
488
|
+
* if (codec.isHardwareAcceleratedEncoder(AV_HWDEVICE_TYPE_VAAPI)) {
|
|
489
|
+
* console.log('VAAPI encoding available');
|
|
490
|
+
* }
|
|
491
|
+
* ```
|
|
492
|
+
*/
|
|
493
|
+
isHardwareAcceleratedEncoder(deviceType?: AVHWDeviceType | FFHWDeviceType): boolean;
|
|
494
|
+
/**
|
|
495
|
+
* Get supported hardware device types.
|
|
496
|
+
*
|
|
497
|
+
* Returns all hardware acceleration types this codec supports.
|
|
498
|
+
*
|
|
499
|
+
* @returns Array of supported device types
|
|
500
|
+
*
|
|
501
|
+
* @example
|
|
502
|
+
* ```typescript
|
|
503
|
+
* const devices = codec.getSupportedDeviceTypes();
|
|
504
|
+
* console.log('Supported devices:', devices.map(d => {
|
|
505
|
+
* switch(d) {
|
|
506
|
+
* case AV_HWDEVICE_TYPE_CUDA: return 'CUDA';
|
|
507
|
+
* case AV_HWDEVICE_TYPE_VAAPI: return 'VAAPI';
|
|
508
|
+
* default: return 'Unknown';
|
|
509
|
+
* }
|
|
510
|
+
* }));
|
|
511
|
+
* ```
|
|
512
|
+
*
|
|
513
|
+
* @see {@link supportsDevice} To check specific device
|
|
514
|
+
*/
|
|
515
|
+
getSupportedDeviceTypes(): AVHWDeviceType[];
|
|
516
|
+
/**
|
|
517
|
+
* Get hardware method flags for device type.
|
|
518
|
+
*
|
|
519
|
+
* Returns the hardware configuration methods for a specific device.
|
|
520
|
+
*
|
|
521
|
+
* @param deviceType - Device type to query
|
|
522
|
+
*
|
|
523
|
+
* @returns Method flags, or null if not supported
|
|
524
|
+
*
|
|
525
|
+
* @example
|
|
526
|
+
* ```typescript
|
|
527
|
+
* import { AV_HWDEVICE_TYPE_CUDA } from 'node-av/constants';
|
|
528
|
+
*
|
|
529
|
+
* const methods = codec.getHardwareMethod(AV_HWDEVICE_TYPE_CUDA);
|
|
530
|
+
* if (methods) {
|
|
531
|
+
* if (methods & AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX) {
|
|
532
|
+
* console.log('Supports device context');
|
|
533
|
+
* }
|
|
534
|
+
* }
|
|
535
|
+
* ```
|
|
536
|
+
*/
|
|
537
|
+
getHardwareMethod(deviceType: AVHWDeviceType | FFHWDeviceType): number | null;
|
|
538
|
+
/**
|
|
539
|
+
* Get hardware configuration at index.
|
|
540
|
+
*
|
|
541
|
+
* Retrieves hardware acceleration configuration details.
|
|
542
|
+
*
|
|
543
|
+
* Direct mapping to avcodec_get_hw_config().
|
|
544
|
+
*
|
|
545
|
+
* @param index - Configuration index
|
|
546
|
+
*
|
|
547
|
+
* @returns Hardware configuration, or null if index out of range
|
|
548
|
+
*
|
|
549
|
+
* @example
|
|
550
|
+
* ```typescript
|
|
551
|
+
* // Enumerate all hardware configs
|
|
552
|
+
* for (let i = 0; ; i++) {
|
|
553
|
+
* const config = codec.getHwConfig(i);
|
|
554
|
+
* if (!config) break;
|
|
555
|
+
*
|
|
556
|
+
* console.log(`Config ${i}:`);
|
|
557
|
+
* console.log(` Pixel format: ${config.pixFmt}`);
|
|
558
|
+
* console.log(` Device type: ${config.deviceType}`);
|
|
559
|
+
* console.log(` Methods: 0x${config.methods.toString(16)}`);
|
|
560
|
+
* }
|
|
561
|
+
* ```
|
|
562
|
+
*/
|
|
563
|
+
getHwConfig(index: number): {
|
|
564
|
+
pixFmt: AVPixelFormat;
|
|
565
|
+
methods: number;
|
|
566
|
+
deviceType: AVHWDeviceType;
|
|
567
|
+
} | null;
|
|
568
|
+
/**
|
|
569
|
+
* Get the underlying native Codec object.
|
|
570
|
+
*
|
|
571
|
+
* @returns The native Codec binding object
|
|
572
|
+
*
|
|
573
|
+
* @internal
|
|
574
|
+
*/
|
|
575
|
+
getNative(): NativeCodec;
|
|
576
|
+
/**
|
|
577
|
+
* Create codec from native instance.
|
|
578
|
+
*
|
|
579
|
+
* @param native - Native codec instance
|
|
580
|
+
*
|
|
581
|
+
* @returns Codec wrapper or null
|
|
582
|
+
*
|
|
583
|
+
* @internal
|
|
584
|
+
*/
|
|
585
|
+
static fromNative(native: NativeCodec | null): Codec | null;
|
|
586
|
+
}
|