node-av 3.1.3 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -52
- package/binding.gyp +4 -0
- package/dist/api/audio-frame-buffer.d.ts +201 -0
- package/dist/api/audio-frame-buffer.js +275 -0
- package/dist/api/audio-frame-buffer.js.map +1 -0
- package/dist/api/bitstream-filter.d.ts +319 -78
- package/dist/api/bitstream-filter.js +680 -151
- package/dist/api/bitstream-filter.js.map +1 -1
- 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_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 +279 -17
- package/dist/api/decoder.js +998 -209
- package/dist/api/decoder.js.map +1 -1
- package/dist/api/{media-input.d.ts → demuxer.d.ts} +294 -44
- package/dist/api/demuxer.js +1968 -0
- package/dist/api/demuxer.js.map +1 -0
- package/dist/api/encoder.d.ts +308 -50
- package/dist/api/encoder.js +1133 -111
- package/dist/api/encoder.js.map +1 -1
- package/dist/api/filter-presets.d.ts +12 -5
- package/dist/api/filter-presets.js +21 -7
- package/dist/api/filter-presets.js.map +1 -1
- package/dist/api/filter.d.ts +406 -40
- package/dist/api/filter.js +966 -139
- package/dist/api/filter.js.map +1 -1
- package/dist/api/{fmp4.d.ts → fmp4-stream.d.ts} +141 -140
- package/dist/api/fmp4-stream.js +539 -0
- package/dist/api/fmp4-stream.js.map +1 -0
- package/dist/api/hardware.d.ts +58 -6
- package/dist/api/hardware.js +127 -11
- package/dist/api/hardware.js.map +1 -1
- package/dist/api/index.d.ts +6 -4
- package/dist/api/index.js +14 -8
- package/dist/api/index.js.map +1 -1
- package/dist/api/io-stream.d.ts +3 -3
- package/dist/api/io-stream.js +5 -4
- package/dist/api/io-stream.js.map +1 -1
- package/dist/api/{media-output.d.ts → muxer.d.ts} +274 -60
- package/dist/api/muxer.js +1934 -0
- package/dist/api/muxer.js.map +1 -0
- package/dist/api/pipeline.d.ts +77 -29
- package/dist/api/pipeline.js +435 -425
- package/dist/api/pipeline.js.map +1 -1
- package/dist/api/rtp-stream.d.ts +312 -0
- package/dist/api/rtp-stream.js +630 -0
- package/dist/api/rtp-stream.js.map +1 -0
- package/dist/api/types.d.ts +476 -55
- package/dist/api/utilities/async-queue.d.ts +91 -0
- package/dist/api/utilities/async-queue.js +162 -0
- package/dist/api/utilities/async-queue.js.map +1 -0
- package/dist/api/utilities/audio-sample.d.ts +1 -1
- package/dist/api/utilities/image.d.ts +1 -1
- package/dist/api/utilities/index.d.ts +2 -0
- package/dist/api/utilities/index.js +4 -0
- package/dist/api/utilities/index.js.map +1 -1
- package/dist/api/utilities/media-type.d.ts +1 -1
- package/dist/api/utilities/pixel-format.d.ts +1 -1
- package/dist/api/utilities/sample-format.d.ts +1 -1
- package/dist/api/utilities/scheduler.d.ts +169 -0
- package/dist/api/utilities/scheduler.js +136 -0
- package/dist/api/utilities/scheduler.js.map +1 -0
- package/dist/api/utilities/streaming.d.ts +74 -15
- package/dist/api/utilities/streaming.js +170 -12
- package/dist/api/utilities/streaming.js.map +1 -1
- package/dist/api/utilities/timestamp.d.ts +1 -1
- package/dist/api/webrtc-stream.d.ts +288 -0
- package/dist/api/webrtc-stream.js +440 -0
- package/dist/api/webrtc-stream.js.map +1 -0
- package/dist/constants/constants.d.ts +51 -1
- package/dist/constants/constants.js +47 -1
- package/dist/constants/constants.js.map +1 -1
- package/dist/constants/encoders.d.ts +2 -1
- package/dist/constants/encoders.js +4 -3
- package/dist/constants/encoders.js.map +1 -1
- 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 +1 -0
- package/dist/constants/index.js +1 -0
- package/dist/constants/index.js.map +1 -1
- package/dist/lib/binding.d.ts +19 -8
- package/dist/lib/binding.js.map +1 -1
- package/dist/lib/codec-context.d.ts +87 -0
- package/dist/lib/codec-context.js +125 -4
- package/dist/lib/codec-context.js.map +1 -1
- package/dist/lib/codec-parameters.d.ts +183 -1
- package/dist/lib/codec-parameters.js +209 -0
- package/dist/lib/codec-parameters.js.map +1 -1
- package/dist/lib/codec-parser.d.ts +23 -0
- package/dist/lib/codec-parser.js +25 -0
- package/dist/lib/codec-parser.js.map +1 -1
- package/dist/lib/codec.d.ts +26 -4
- package/dist/lib/codec.js +35 -0
- package/dist/lib/codec.js.map +1 -1
- package/dist/lib/dictionary.js +1 -0
- package/dist/lib/dictionary.js.map +1 -1
- package/dist/lib/error.js +1 -1
- package/dist/lib/error.js.map +1 -1
- package/dist/lib/filter-context.d.ts +52 -11
- package/dist/lib/filter-context.js +56 -12
- package/dist/lib/filter-context.js.map +1 -1
- package/dist/lib/filter-graph.d.ts +9 -0
- package/dist/lib/filter-graph.js +13 -0
- package/dist/lib/filter-graph.js.map +1 -1
- package/dist/lib/filter.d.ts +21 -0
- package/dist/lib/filter.js +28 -0
- package/dist/lib/filter.js.map +1 -1
- package/dist/lib/format-context.d.ts +48 -14
- package/dist/lib/format-context.js +76 -7
- package/dist/lib/format-context.js.map +1 -1
- package/dist/lib/frame.d.ts +168 -0
- package/dist/lib/frame.js +212 -0
- package/dist/lib/frame.js.map +1 -1
- package/dist/lib/hardware-device-context.d.ts +3 -2
- package/dist/lib/hardware-device-context.js.map +1 -1
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.js +2 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/input-format.d.ts +21 -0
- package/dist/lib/input-format.js +42 -2
- package/dist/lib/input-format.js.map +1 -1
- package/dist/lib/native-types.d.ts +48 -26
- package/dist/lib/option.d.ts +25 -13
- package/dist/lib/option.js +28 -0
- package/dist/lib/option.js.map +1 -1
- package/dist/lib/output-format.d.ts +22 -1
- package/dist/lib/output-format.js +28 -0
- package/dist/lib/output-format.js.map +1 -1
- package/dist/lib/packet.d.ts +35 -0
- package/dist/lib/packet.js +52 -2
- package/dist/lib/packet.js.map +1 -1
- package/dist/lib/stream.d.ts +126 -0
- package/dist/lib/stream.js +188 -5
- package/dist/lib/stream.js.map +1 -1
- 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 +27 -1
- package/dist/lib/utilities.d.ts +281 -53
- package/dist/lib/utilities.js +298 -55
- package/dist/lib/utilities.js.map +1 -1
- package/package.json +20 -19
- package/dist/api/fmp4.js +0 -710
- package/dist/api/fmp4.js.map +0 -1
- package/dist/api/media-input.js +0 -1075
- package/dist/api/media-input.js.map +0 -1
- package/dist/api/media-output.js +0 -1040
- package/dist/api/media-output.js.map +0 -1
- package/dist/api/webrtc.d.ts +0 -664
- package/dist/api/webrtc.js +0 -1132
- package/dist/api/webrtc.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Rational } from './rational.js';
|
|
2
|
-
import type { AVChromaLocation, AVCodecID, AVColorPrimaries, AVColorRange, AVColorSpace, AVColorTransferCharacteristic, AVMediaType, AVPixelFormat, AVProfile, AVSampleFormat } from '../constants/constants.js';
|
|
2
|
+
import type { AVChromaLocation, AVCodecID, AVColorPrimaries, AVColorRange, AVColorSpace, AVColorTransferCharacteristic, AVMediaType, AVPacketSideDataType, AVPixelFormat, AVProfile, AVSampleFormat } from '../constants/constants.js';
|
|
3
3
|
import type { CodecContext } from './codec-context.js';
|
|
4
4
|
import type { NativeCodecParameters, NativeWrapper } from './native-types.js';
|
|
5
5
|
import type { ChannelLayout } from './types.js';
|
|
@@ -112,6 +112,26 @@ export declare class CodecParameters implements NativeWrapper<NativeCodecParamet
|
|
|
112
112
|
*/
|
|
113
113
|
get bitRate(): bigint;
|
|
114
114
|
set bitRate(value: bigint);
|
|
115
|
+
/**
|
|
116
|
+
* Number of bits per coded sample.
|
|
117
|
+
*
|
|
118
|
+
* Bits per sample/pixel from the demuxer (needed by some codecs).
|
|
119
|
+
* For uncompressed formats, this is the bits per sample.
|
|
120
|
+
*
|
|
121
|
+
* Direct mapping to AVCodecParameters->bits_per_coded_sample.
|
|
122
|
+
*/
|
|
123
|
+
get bitsPerCodedSample(): number;
|
|
124
|
+
set bitsPerCodedSample(value: number);
|
|
125
|
+
/**
|
|
126
|
+
* Number of bits per raw sample.
|
|
127
|
+
*
|
|
128
|
+
* Bits per sample before compression/encoding.
|
|
129
|
+
* Only set when different from bitsPerCodedSample.
|
|
130
|
+
*
|
|
131
|
+
* Direct mapping to AVCodecParameters->bits_per_raw_sample.
|
|
132
|
+
*/
|
|
133
|
+
get bitsPerRawSample(): number;
|
|
134
|
+
set bitsPerRawSample(value: number);
|
|
115
135
|
/**
|
|
116
136
|
* Codec profile.
|
|
117
137
|
*
|
|
@@ -238,6 +258,51 @@ export declare class CodecParameters implements NativeWrapper<NativeCodecParamet
|
|
|
238
258
|
*/
|
|
239
259
|
get sampleRate(): number;
|
|
240
260
|
set sampleRate(value: number);
|
|
261
|
+
/**
|
|
262
|
+
* Audio frame size in samples.
|
|
263
|
+
*
|
|
264
|
+
* Number of samples per audio frame for codecs with constant frame size.
|
|
265
|
+
* For AAC this is typically 1024, for MP3 it's 1152.
|
|
266
|
+
* For codecs with variable frame size, this may be 0.
|
|
267
|
+
*
|
|
268
|
+
* Direct mapping to AVCodecParameters->frame_size.
|
|
269
|
+
*/
|
|
270
|
+
get frameSize(): number;
|
|
271
|
+
set frameSize(value: number);
|
|
272
|
+
/**
|
|
273
|
+
* Initial audio padding.
|
|
274
|
+
*
|
|
275
|
+
* Amount of padding (priming) samples at the beginning of the audio stream.
|
|
276
|
+
* For AAC encoding, this is typically 1024 samples.
|
|
277
|
+
* The muxer uses this value to correctly calculate packet timestamps.
|
|
278
|
+
*
|
|
279
|
+
* Direct mapping to AVCodecParameters->initial_padding.
|
|
280
|
+
*/
|
|
281
|
+
get initialPadding(): number;
|
|
282
|
+
set initialPadding(value: number);
|
|
283
|
+
/**
|
|
284
|
+
* Video delay in frames.
|
|
285
|
+
*
|
|
286
|
+
* Number of frames the decoded output will be delayed relative to the encoded input.
|
|
287
|
+
* Used for timestamp correction in video streams.
|
|
288
|
+
*
|
|
289
|
+
* Direct mapping to AVCodecParameters->video_delay.
|
|
290
|
+
*/
|
|
291
|
+
get videoDelay(): number;
|
|
292
|
+
set videoDelay(value: number);
|
|
293
|
+
/**
|
|
294
|
+
* Number of coded side data entries.
|
|
295
|
+
*
|
|
296
|
+
* Returns the count of coded side data attached to codec parameters.
|
|
297
|
+
*
|
|
298
|
+
* @returns Number of side data entries
|
|
299
|
+
*
|
|
300
|
+
* @example
|
|
301
|
+
* ```typescript
|
|
302
|
+
* console.log(`Codec has ${params.nbCodedSideData} side data entries`);
|
|
303
|
+
* ```
|
|
304
|
+
*/
|
|
305
|
+
get nbCodedSideData(): number;
|
|
241
306
|
/**
|
|
242
307
|
* Allocate codec parameters.
|
|
243
308
|
*
|
|
@@ -347,6 +412,38 @@ export declare class CodecParameters implements NativeWrapper<NativeCodecParamet
|
|
|
347
412
|
* @see {@link fromContext} To extract from context
|
|
348
413
|
*/
|
|
349
414
|
toContext(codecContext: CodecContext): number;
|
|
415
|
+
/**
|
|
416
|
+
* Parse extradata to extract codec parameters.
|
|
417
|
+
*
|
|
418
|
+
* Opens a decoder to parse extradata (SPS/PPS for H.264, etc.) and extract
|
|
419
|
+
* codec parameters like width/height for video or sample_rate for audio.
|
|
420
|
+
* This is used when extradata exists (e.g., from SDP sprop-parameter-sets)
|
|
421
|
+
* but dimensions are missing due to insufficient probesize.
|
|
422
|
+
*
|
|
423
|
+
* Uses FFmpeg's decoder to parse extradata, same as avformat_find_stream_info()
|
|
424
|
+
* does internally. Works for all codecs (H.264, H.265, VP9, AV1, etc.).
|
|
425
|
+
*
|
|
426
|
+
* @returns 0 on success, negative error code on failure
|
|
427
|
+
*
|
|
428
|
+
* @example
|
|
429
|
+
* ```typescript
|
|
430
|
+
* import { FFmpegError } from 'node-av';
|
|
431
|
+
*
|
|
432
|
+
* // After opening RTSP with low probesize
|
|
433
|
+
* const input = await Demuxer.open('rtsp://...', {
|
|
434
|
+
* options: { probesize: 32 }
|
|
435
|
+
* });
|
|
436
|
+
*
|
|
437
|
+
* const stream = input.video();
|
|
438
|
+
* if (stream.codecpar.width === 0 && stream.codecpar.extradata) {
|
|
439
|
+
* // Parse extradata to get dimensions
|
|
440
|
+
* const ret = stream.codecpar.parseExtradata();
|
|
441
|
+
* FFmpegError.throwIfError(ret, 'parseExtradata');
|
|
442
|
+
* console.log(`Dimensions: ${stream.codecpar.width}x${stream.codecpar.height}`);
|
|
443
|
+
* }
|
|
444
|
+
* ```
|
|
445
|
+
*/
|
|
446
|
+
parseExtradata(): number;
|
|
350
447
|
/**
|
|
351
448
|
* Convert to JSON representation.
|
|
352
449
|
*
|
|
@@ -362,6 +459,91 @@ export declare class CodecParameters implements NativeWrapper<NativeCodecParamet
|
|
|
362
459
|
* ```
|
|
363
460
|
*/
|
|
364
461
|
toJSON(): Record<string, any>;
|
|
462
|
+
/**
|
|
463
|
+
* Get coded side data.
|
|
464
|
+
*
|
|
465
|
+
* Retrieves additional data associated with the codec parameters
|
|
466
|
+
* (e.g., HDR metadata, Dolby Vision configuration, mastering display).
|
|
467
|
+
*
|
|
468
|
+
* Direct mapping to accessing AVCodecParameters.coded_side_data.
|
|
469
|
+
*
|
|
470
|
+
* @param type - Type of side data to retrieve
|
|
471
|
+
*
|
|
472
|
+
* @returns Side data buffer, or null if not present
|
|
473
|
+
*
|
|
474
|
+
* @example
|
|
475
|
+
* ```typescript
|
|
476
|
+
* import { AV_PKT_DATA_MASTERING_DISPLAY_METADATA } from 'node-av/constants';
|
|
477
|
+
*
|
|
478
|
+
* // Get HDR mastering display metadata
|
|
479
|
+
* const hdrData = params.getCodedSideData(AV_PKT_DATA_MASTERING_DISPLAY_METADATA);
|
|
480
|
+
* if (hdrData) {
|
|
481
|
+
* console.log(`HDR metadata: ${hdrData.length} bytes`);
|
|
482
|
+
* }
|
|
483
|
+
* ```
|
|
484
|
+
*
|
|
485
|
+
* @see {@link addCodedSideData} To add side data
|
|
486
|
+
* @see {@link nbCodedSideData} For count of side data entries
|
|
487
|
+
*/
|
|
488
|
+
getCodedSideData(type: AVPacketSideDataType): Buffer | null;
|
|
489
|
+
/**
|
|
490
|
+
* Get all coded side data entries.
|
|
491
|
+
*
|
|
492
|
+
* Returns all side data attached to the codec parameters.
|
|
493
|
+
* Each entry contains the type and data buffer.
|
|
494
|
+
* This allows iteration over all side data like FFmpeg CLI does.
|
|
495
|
+
*
|
|
496
|
+
* Direct mapping to accessing AVCodecParameters.coded_side_data array.
|
|
497
|
+
*
|
|
498
|
+
* @returns Array of side data entries with type and data
|
|
499
|
+
*
|
|
500
|
+
* @example
|
|
501
|
+
* ```typescript
|
|
502
|
+
* // Iterate all side data like FFmpeg does (ffmpeg_mux_init.c)
|
|
503
|
+
* const allSideData = params.getAllCodedSideData();
|
|
504
|
+
* for (const sd of allSideData) {
|
|
505
|
+
* console.log(`Type: ${sd.type}, Size: ${sd.data.length}`);
|
|
506
|
+
* // Copy to output stream
|
|
507
|
+
* outParams.addCodedSideData(sd.type, sd.data);
|
|
508
|
+
* }
|
|
509
|
+
* ```
|
|
510
|
+
*
|
|
511
|
+
* @see {@link getCodedSideData} To get specific side data by type
|
|
512
|
+
* @see {@link addCodedSideData} To add side data
|
|
513
|
+
* @see {@link nbCodedSideData} For count of side data entries
|
|
514
|
+
*/
|
|
515
|
+
getAllCodedSideData(): {
|
|
516
|
+
type: AVPacketSideDataType;
|
|
517
|
+
data: Buffer;
|
|
518
|
+
}[];
|
|
519
|
+
/**
|
|
520
|
+
* Add coded side data to codec parameters.
|
|
521
|
+
*
|
|
522
|
+
* Attaches additional data to the codec parameters. The data is copied.
|
|
523
|
+
* Commonly used for HDR metadata, Dolby Vision configuration, etc.
|
|
524
|
+
*
|
|
525
|
+
* Direct mapping to av_packet_side_data_add() for coded_side_data.
|
|
526
|
+
*
|
|
527
|
+
* @param type - Type of side data
|
|
528
|
+
*
|
|
529
|
+
* @param data - Side data buffer
|
|
530
|
+
*
|
|
531
|
+
* @returns 0 on success, negative AVERROR on error
|
|
532
|
+
*
|
|
533
|
+
* @example
|
|
534
|
+
* ```typescript
|
|
535
|
+
* import { FFmpegError } from 'node-av';
|
|
536
|
+
* import { AV_PKT_DATA_DOVI_CONF } from 'node-av/constants';
|
|
537
|
+
*
|
|
538
|
+
* // Add Dolby Vision configuration
|
|
539
|
+
* const doviConf = Buffer.from([...]); // Dolby Vision config data
|
|
540
|
+
* const ret = params.addCodedSideData(AV_PKT_DATA_DOVI_CONF, doviConf);
|
|
541
|
+
* FFmpegError.throwIfError(ret, 'addCodedSideData');
|
|
542
|
+
* ```
|
|
543
|
+
*
|
|
544
|
+
* @see {@link getCodedSideData} To retrieve side data
|
|
545
|
+
*/
|
|
546
|
+
addCodedSideData(type: AVPacketSideDataType, data: Buffer): number;
|
|
365
547
|
/**
|
|
366
548
|
* Get the underlying native CodecParameters object.
|
|
367
549
|
*
|
|
@@ -146,6 +146,34 @@ export class CodecParameters {
|
|
|
146
146
|
set bitRate(value) {
|
|
147
147
|
this.native.bitRate = value;
|
|
148
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Number of bits per coded sample.
|
|
151
|
+
*
|
|
152
|
+
* Bits per sample/pixel from the demuxer (needed by some codecs).
|
|
153
|
+
* For uncompressed formats, this is the bits per sample.
|
|
154
|
+
*
|
|
155
|
+
* Direct mapping to AVCodecParameters->bits_per_coded_sample.
|
|
156
|
+
*/
|
|
157
|
+
get bitsPerCodedSample() {
|
|
158
|
+
return this.native.bitsPerCodedSample;
|
|
159
|
+
}
|
|
160
|
+
set bitsPerCodedSample(value) {
|
|
161
|
+
this.native.bitsPerCodedSample = value;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Number of bits per raw sample.
|
|
165
|
+
*
|
|
166
|
+
* Bits per sample before compression/encoding.
|
|
167
|
+
* Only set when different from bitsPerCodedSample.
|
|
168
|
+
*
|
|
169
|
+
* Direct mapping to AVCodecParameters->bits_per_raw_sample.
|
|
170
|
+
*/
|
|
171
|
+
get bitsPerRawSample() {
|
|
172
|
+
return this.native.bitsPerRawSample;
|
|
173
|
+
}
|
|
174
|
+
set bitsPerRawSample(value) {
|
|
175
|
+
this.native.bitsPerRawSample = value;
|
|
176
|
+
}
|
|
149
177
|
/**
|
|
150
178
|
* Codec profile.
|
|
151
179
|
*
|
|
@@ -330,6 +358,65 @@ export class CodecParameters {
|
|
|
330
358
|
set sampleRate(value) {
|
|
331
359
|
this.native.sampleRate = value;
|
|
332
360
|
}
|
|
361
|
+
/**
|
|
362
|
+
* Audio frame size in samples.
|
|
363
|
+
*
|
|
364
|
+
* Number of samples per audio frame for codecs with constant frame size.
|
|
365
|
+
* For AAC this is typically 1024, for MP3 it's 1152.
|
|
366
|
+
* For codecs with variable frame size, this may be 0.
|
|
367
|
+
*
|
|
368
|
+
* Direct mapping to AVCodecParameters->frame_size.
|
|
369
|
+
*/
|
|
370
|
+
get frameSize() {
|
|
371
|
+
return this.native.frameSize;
|
|
372
|
+
}
|
|
373
|
+
set frameSize(value) {
|
|
374
|
+
this.native.frameSize = value;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Initial audio padding.
|
|
378
|
+
*
|
|
379
|
+
* Amount of padding (priming) samples at the beginning of the audio stream.
|
|
380
|
+
* For AAC encoding, this is typically 1024 samples.
|
|
381
|
+
* The muxer uses this value to correctly calculate packet timestamps.
|
|
382
|
+
*
|
|
383
|
+
* Direct mapping to AVCodecParameters->initial_padding.
|
|
384
|
+
*/
|
|
385
|
+
get initialPadding() {
|
|
386
|
+
return this.native.initialPadding;
|
|
387
|
+
}
|
|
388
|
+
set initialPadding(value) {
|
|
389
|
+
this.native.initialPadding = value;
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Video delay in frames.
|
|
393
|
+
*
|
|
394
|
+
* Number of frames the decoded output will be delayed relative to the encoded input.
|
|
395
|
+
* Used for timestamp correction in video streams.
|
|
396
|
+
*
|
|
397
|
+
* Direct mapping to AVCodecParameters->video_delay.
|
|
398
|
+
*/
|
|
399
|
+
get videoDelay() {
|
|
400
|
+
return this.native.videoDelay;
|
|
401
|
+
}
|
|
402
|
+
set videoDelay(value) {
|
|
403
|
+
this.native.videoDelay = value;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Number of coded side data entries.
|
|
407
|
+
*
|
|
408
|
+
* Returns the count of coded side data attached to codec parameters.
|
|
409
|
+
*
|
|
410
|
+
* @returns Number of side data entries
|
|
411
|
+
*
|
|
412
|
+
* @example
|
|
413
|
+
* ```typescript
|
|
414
|
+
* console.log(`Codec has ${params.nbCodedSideData} side data entries`);
|
|
415
|
+
* ```
|
|
416
|
+
*/
|
|
417
|
+
get nbCodedSideData() {
|
|
418
|
+
return this.native.nbCodedSideData;
|
|
419
|
+
}
|
|
333
420
|
/**
|
|
334
421
|
* Allocate codec parameters.
|
|
335
422
|
*
|
|
@@ -449,6 +536,40 @@ export class CodecParameters {
|
|
|
449
536
|
toContext(codecContext) {
|
|
450
537
|
return this.native.toContext(codecContext.getNative());
|
|
451
538
|
}
|
|
539
|
+
/**
|
|
540
|
+
* Parse extradata to extract codec parameters.
|
|
541
|
+
*
|
|
542
|
+
* Opens a decoder to parse extradata (SPS/PPS for H.264, etc.) and extract
|
|
543
|
+
* codec parameters like width/height for video or sample_rate for audio.
|
|
544
|
+
* This is used when extradata exists (e.g., from SDP sprop-parameter-sets)
|
|
545
|
+
* but dimensions are missing due to insufficient probesize.
|
|
546
|
+
*
|
|
547
|
+
* Uses FFmpeg's decoder to parse extradata, same as avformat_find_stream_info()
|
|
548
|
+
* does internally. Works for all codecs (H.264, H.265, VP9, AV1, etc.).
|
|
549
|
+
*
|
|
550
|
+
* @returns 0 on success, negative error code on failure
|
|
551
|
+
*
|
|
552
|
+
* @example
|
|
553
|
+
* ```typescript
|
|
554
|
+
* import { FFmpegError } from 'node-av';
|
|
555
|
+
*
|
|
556
|
+
* // After opening RTSP with low probesize
|
|
557
|
+
* const input = await Demuxer.open('rtsp://...', {
|
|
558
|
+
* options: { probesize: 32 }
|
|
559
|
+
* });
|
|
560
|
+
*
|
|
561
|
+
* const stream = input.video();
|
|
562
|
+
* if (stream.codecpar.width === 0 && stream.codecpar.extradata) {
|
|
563
|
+
* // Parse extradata to get dimensions
|
|
564
|
+
* const ret = stream.codecpar.parseExtradata();
|
|
565
|
+
* FFmpegError.throwIfError(ret, 'parseExtradata');
|
|
566
|
+
* console.log(`Dimensions: ${stream.codecpar.width}x${stream.codecpar.height}`);
|
|
567
|
+
* }
|
|
568
|
+
* ```
|
|
569
|
+
*/
|
|
570
|
+
parseExtradata() {
|
|
571
|
+
return this.native.parseExtradata();
|
|
572
|
+
}
|
|
452
573
|
/**
|
|
453
574
|
* Convert to JSON representation.
|
|
454
575
|
*
|
|
@@ -466,6 +587,94 @@ export class CodecParameters {
|
|
|
466
587
|
toJSON() {
|
|
467
588
|
return this.native.toJSON();
|
|
468
589
|
}
|
|
590
|
+
/**
|
|
591
|
+
* Get coded side data.
|
|
592
|
+
*
|
|
593
|
+
* Retrieves additional data associated with the codec parameters
|
|
594
|
+
* (e.g., HDR metadata, Dolby Vision configuration, mastering display).
|
|
595
|
+
*
|
|
596
|
+
* Direct mapping to accessing AVCodecParameters.coded_side_data.
|
|
597
|
+
*
|
|
598
|
+
* @param type - Type of side data to retrieve
|
|
599
|
+
*
|
|
600
|
+
* @returns Side data buffer, or null if not present
|
|
601
|
+
*
|
|
602
|
+
* @example
|
|
603
|
+
* ```typescript
|
|
604
|
+
* import { AV_PKT_DATA_MASTERING_DISPLAY_METADATA } from 'node-av/constants';
|
|
605
|
+
*
|
|
606
|
+
* // Get HDR mastering display metadata
|
|
607
|
+
* const hdrData = params.getCodedSideData(AV_PKT_DATA_MASTERING_DISPLAY_METADATA);
|
|
608
|
+
* if (hdrData) {
|
|
609
|
+
* console.log(`HDR metadata: ${hdrData.length} bytes`);
|
|
610
|
+
* }
|
|
611
|
+
* ```
|
|
612
|
+
*
|
|
613
|
+
* @see {@link addCodedSideData} To add side data
|
|
614
|
+
* @see {@link nbCodedSideData} For count of side data entries
|
|
615
|
+
*/
|
|
616
|
+
getCodedSideData(type) {
|
|
617
|
+
return this.native.getCodedSideData(type);
|
|
618
|
+
}
|
|
619
|
+
/**
|
|
620
|
+
* Get all coded side data entries.
|
|
621
|
+
*
|
|
622
|
+
* Returns all side data attached to the codec parameters.
|
|
623
|
+
* Each entry contains the type and data buffer.
|
|
624
|
+
* This allows iteration over all side data like FFmpeg CLI does.
|
|
625
|
+
*
|
|
626
|
+
* Direct mapping to accessing AVCodecParameters.coded_side_data array.
|
|
627
|
+
*
|
|
628
|
+
* @returns Array of side data entries with type and data
|
|
629
|
+
*
|
|
630
|
+
* @example
|
|
631
|
+
* ```typescript
|
|
632
|
+
* // Iterate all side data like FFmpeg does (ffmpeg_mux_init.c)
|
|
633
|
+
* const allSideData = params.getAllCodedSideData();
|
|
634
|
+
* for (const sd of allSideData) {
|
|
635
|
+
* console.log(`Type: ${sd.type}, Size: ${sd.data.length}`);
|
|
636
|
+
* // Copy to output stream
|
|
637
|
+
* outParams.addCodedSideData(sd.type, sd.data);
|
|
638
|
+
* }
|
|
639
|
+
* ```
|
|
640
|
+
*
|
|
641
|
+
* @see {@link getCodedSideData} To get specific side data by type
|
|
642
|
+
* @see {@link addCodedSideData} To add side data
|
|
643
|
+
* @see {@link nbCodedSideData} For count of side data entries
|
|
644
|
+
*/
|
|
645
|
+
getAllCodedSideData() {
|
|
646
|
+
return this.native.getAllCodedSideData();
|
|
647
|
+
}
|
|
648
|
+
/**
|
|
649
|
+
* Add coded side data to codec parameters.
|
|
650
|
+
*
|
|
651
|
+
* Attaches additional data to the codec parameters. The data is copied.
|
|
652
|
+
* Commonly used for HDR metadata, Dolby Vision configuration, etc.
|
|
653
|
+
*
|
|
654
|
+
* Direct mapping to av_packet_side_data_add() for coded_side_data.
|
|
655
|
+
*
|
|
656
|
+
* @param type - Type of side data
|
|
657
|
+
*
|
|
658
|
+
* @param data - Side data buffer
|
|
659
|
+
*
|
|
660
|
+
* @returns 0 on success, negative AVERROR on error
|
|
661
|
+
*
|
|
662
|
+
* @example
|
|
663
|
+
* ```typescript
|
|
664
|
+
* import { FFmpegError } from 'node-av';
|
|
665
|
+
* import { AV_PKT_DATA_DOVI_CONF } from 'node-av/constants';
|
|
666
|
+
*
|
|
667
|
+
* // Add Dolby Vision configuration
|
|
668
|
+
* const doviConf = Buffer.from([...]); // Dolby Vision config data
|
|
669
|
+
* const ret = params.addCodedSideData(AV_PKT_DATA_DOVI_CONF, doviConf);
|
|
670
|
+
* FFmpegError.throwIfError(ret, 'addCodedSideData');
|
|
671
|
+
* ```
|
|
672
|
+
*
|
|
673
|
+
* @see {@link getCodedSideData} To retrieve side data
|
|
674
|
+
*/
|
|
675
|
+
addCodedSideData(type, data) {
|
|
676
|
+
return this.native.addCodedSideData(type, data);
|
|
677
|
+
}
|
|
469
678
|
/**
|
|
470
679
|
* Get the underlying native CodecParameters object.
|
|
471
680
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec-parameters.js","sourceRoot":"","sources":["../../src/lib/codec-parameters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"codec-parameters.js","sourceRoot":"","sources":["../../src/lib/codec-parameters.ts"],"names":[],"mappings":"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"}
|
|
@@ -133,6 +133,29 @@ export declare class CodecParser implements Disposable, NativeWrapper<NativeCode
|
|
|
133
133
|
* @see {@link init} To initialize parser
|
|
134
134
|
*/
|
|
135
135
|
parse2(codecContext: CodecContext, packet: Packet, data: Buffer, pts: bigint, dts: bigint, pos: number): number;
|
|
136
|
+
/**
|
|
137
|
+
* Number of pictures to repeat for field-based interlaced content.
|
|
138
|
+
*
|
|
139
|
+
* Used to calculate frame duration for interlaced video:
|
|
140
|
+
* `frame_duration = (1 + repeat_pict) * time_base`
|
|
141
|
+
*
|
|
142
|
+
* Commonly used in H.264 to display telecined material.
|
|
143
|
+
* Value comes from the codec parser after parsing a frame.
|
|
144
|
+
*
|
|
145
|
+
* Direct mapping to AVCodecParserContext.repeat_pict.
|
|
146
|
+
*
|
|
147
|
+
* @returns Repeat picture count (0 for progressive, >0 for interlaced)
|
|
148
|
+
*
|
|
149
|
+
* @example
|
|
150
|
+
* ```typescript
|
|
151
|
+
* const parser = stream.parser;
|
|
152
|
+
* if (parser) {
|
|
153
|
+
* const fields = 1 + parser.repeatPict;
|
|
154
|
+
* console.log(`Frame uses ${fields} fields`);
|
|
155
|
+
* }
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
get repeatPict(): number;
|
|
136
159
|
/**
|
|
137
160
|
* Close the codec parser.
|
|
138
161
|
*
|
package/dist/lib/codec-parser.js
CHANGED
|
@@ -136,6 +136,31 @@ export class CodecParser {
|
|
|
136
136
|
parse2(codecContext, packet, data, pts, dts, pos) {
|
|
137
137
|
return this.native.parse2(codecContext.getNative(), packet.getNative(), data, pts, dts, pos);
|
|
138
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* Number of pictures to repeat for field-based interlaced content.
|
|
141
|
+
*
|
|
142
|
+
* Used to calculate frame duration for interlaced video:
|
|
143
|
+
* `frame_duration = (1 + repeat_pict) * time_base`
|
|
144
|
+
*
|
|
145
|
+
* Commonly used in H.264 to display telecined material.
|
|
146
|
+
* Value comes from the codec parser after parsing a frame.
|
|
147
|
+
*
|
|
148
|
+
* Direct mapping to AVCodecParserContext.repeat_pict.
|
|
149
|
+
*
|
|
150
|
+
* @returns Repeat picture count (0 for progressive, >0 for interlaced)
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* ```typescript
|
|
154
|
+
* const parser = stream.parser;
|
|
155
|
+
* if (parser) {
|
|
156
|
+
* const fields = 1 + parser.repeatPict;
|
|
157
|
+
* console.log(`Frame uses ${fields} fields`);
|
|
158
|
+
* }
|
|
159
|
+
* ```
|
|
160
|
+
*/
|
|
161
|
+
get repeatPict() {
|
|
162
|
+
return this.native.repeatPict;
|
|
163
|
+
}
|
|
139
164
|
/**
|
|
140
165
|
* Close the codec parser.
|
|
141
166
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec-parser.js","sourceRoot":"","sources":["../../src/lib/codec-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAOxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,OAAO,WAAW;IACd,MAAM,CAAoB;IAElC;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC3C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,IAAI,CAAC,OAAkB;QACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwDG;IACH,MAAM,CAAC,YAA0B,EAAE,MAAc,EAAE,IAAY,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW;QACpG,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/F,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED;;;;;;OAMG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,CAAC,MAAM,CAAC,OAAO,CAAC;QACd,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"codec-parser.js","sourceRoot":"","sources":["../../src/lib/codec-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAOxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,OAAO,WAAW;IACd,MAAM,CAAoB;IAElC;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC3C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,IAAI,CAAC,OAAkB;QACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwDG;IACH,MAAM,CAAC,YAA0B,EAAE,MAAc,EAAE,IAAY,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW;QACpG,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/F,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IAChC,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED;;;;;;OAMG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,CAAC,MAAM,CAAC,OAAO,CAAC;QACd,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;CACF"}
|
package/dist/lib/codec.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { Rational } from './rational.js';
|
|
|
2
2
|
import type { AVCodecCap, AVCodecID, AVHWDeviceType, AVMediaType, AVPixelFormat, AVSampleFormat } from '../constants/constants.js';
|
|
3
3
|
import type { FFDecoderCodec } from '../constants/decoders.js';
|
|
4
4
|
import type { FFEncoderCodec } from '../constants/encoders.js';
|
|
5
|
+
import type { FFHWDeviceType } from '../constants/hardware.js';
|
|
5
6
|
import type { NativeCodec, NativeWrapper } from './native-types.js';
|
|
6
7
|
import type { ChannelLayout, CodecProfile } from './types.js';
|
|
7
8
|
/**
|
|
@@ -260,6 +261,27 @@ export declare class Codec implements NativeWrapper<NativeCodec> {
|
|
|
260
261
|
* Direct mapping to AVCodec->capabilities.
|
|
261
262
|
*/
|
|
262
263
|
get capabilities(): AVCodecCap;
|
|
264
|
+
/**
|
|
265
|
+
* Check if codec has specific capabilities.
|
|
266
|
+
*
|
|
267
|
+
* Tests whether all specified capabilities are present using bitwise AND.
|
|
268
|
+
*
|
|
269
|
+
* @param caps - One or more capability values to check
|
|
270
|
+
*
|
|
271
|
+
* @returns true if all specified capabilities are present, false otherwise
|
|
272
|
+
*
|
|
273
|
+
* @example
|
|
274
|
+
* ```typescript
|
|
275
|
+
* import { AV_CODEC_CAP_HARDWARE } from 'node-av/constants';
|
|
276
|
+
*
|
|
277
|
+
* if (codec.hasCapabilities(AV_CODEC_CAP_HARDWARE)) {
|
|
278
|
+
* console.log('This codec supports hardware acceleration');
|
|
279
|
+
* }
|
|
280
|
+
* ```
|
|
281
|
+
*
|
|
282
|
+
* @see {@link capabilities} For direct capabilities access
|
|
283
|
+
*/
|
|
284
|
+
hasCapabilities(...caps: AVCodecCap[]): boolean;
|
|
263
285
|
/**
|
|
264
286
|
* Maximum lowres value.
|
|
265
287
|
*
|
|
@@ -413,7 +435,7 @@ export declare class Codec implements NativeWrapper<NativeCodec> {
|
|
|
413
435
|
*
|
|
414
436
|
* @see {@link getSupportedDeviceTypes} For all supported types
|
|
415
437
|
*/
|
|
416
|
-
supportsDevice(deviceType: AVHWDeviceType): boolean;
|
|
438
|
+
supportsDevice(deviceType: AVHWDeviceType | FFHWDeviceType): boolean;
|
|
417
439
|
/**
|
|
418
440
|
* Check if decoder supports hardware acceleration.
|
|
419
441
|
*
|
|
@@ -436,7 +458,7 @@ export declare class Codec implements NativeWrapper<NativeCodec> {
|
|
|
436
458
|
* }
|
|
437
459
|
* ```
|
|
438
460
|
*/
|
|
439
|
-
isHardwareAcceleratedDecoder(deviceType?: AVHWDeviceType): boolean;
|
|
461
|
+
isHardwareAcceleratedDecoder(deviceType?: AVHWDeviceType | FFHWDeviceType): boolean;
|
|
440
462
|
/**
|
|
441
463
|
* Check if encoder supports hardware acceleration.
|
|
442
464
|
*
|
|
@@ -459,7 +481,7 @@ export declare class Codec implements NativeWrapper<NativeCodec> {
|
|
|
459
481
|
* }
|
|
460
482
|
* ```
|
|
461
483
|
*/
|
|
462
|
-
isHardwareAcceleratedEncoder(deviceType?: AVHWDeviceType): boolean;
|
|
484
|
+
isHardwareAcceleratedEncoder(deviceType?: AVHWDeviceType | FFHWDeviceType): boolean;
|
|
463
485
|
/**
|
|
464
486
|
* Get supported hardware device types.
|
|
465
487
|
*
|
|
@@ -503,7 +525,7 @@ export declare class Codec implements NativeWrapper<NativeCodec> {
|
|
|
503
525
|
* }
|
|
504
526
|
* ```
|
|
505
527
|
*/
|
|
506
|
-
getHardwareMethod(deviceType: AVHWDeviceType): number | null;
|
|
528
|
+
getHardwareMethod(deviceType: AVHWDeviceType | FFHWDeviceType): number | null;
|
|
507
529
|
/**
|
|
508
530
|
* Get hardware configuration at index.
|
|
509
531
|
*
|
package/dist/lib/codec.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX, AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX } from '../constants/constants.js';
|
|
2
2
|
import { bindings } from './binding.js';
|
|
3
3
|
import { Rational } from './rational.js';
|
|
4
|
+
import { avGetHardwareDeviceTypeFromName } from './utilities.js';
|
|
4
5
|
/**
|
|
5
6
|
* Codec descriptor for audio/video encoding and decoding.
|
|
6
7
|
*
|
|
@@ -289,6 +290,34 @@ export class Codec {
|
|
|
289
290
|
get capabilities() {
|
|
290
291
|
return this.native.capabilities;
|
|
291
292
|
}
|
|
293
|
+
/**
|
|
294
|
+
* Check if codec has specific capabilities.
|
|
295
|
+
*
|
|
296
|
+
* Tests whether all specified capabilities are present using bitwise AND.
|
|
297
|
+
*
|
|
298
|
+
* @param caps - One or more capability values to check
|
|
299
|
+
*
|
|
300
|
+
* @returns true if all specified capabilities are present, false otherwise
|
|
301
|
+
*
|
|
302
|
+
* @example
|
|
303
|
+
* ```typescript
|
|
304
|
+
* import { AV_CODEC_CAP_HARDWARE } from 'node-av/constants';
|
|
305
|
+
*
|
|
306
|
+
* if (codec.hasCapabilities(AV_CODEC_CAP_HARDWARE)) {
|
|
307
|
+
* console.log('This codec supports hardware acceleration');
|
|
308
|
+
* }
|
|
309
|
+
* ```
|
|
310
|
+
*
|
|
311
|
+
* @see {@link capabilities} For direct capabilities access
|
|
312
|
+
*/
|
|
313
|
+
hasCapabilities(...caps) {
|
|
314
|
+
for (const cap of caps) {
|
|
315
|
+
if ((this.native.capabilities & cap) !== cap) {
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return true;
|
|
320
|
+
}
|
|
292
321
|
/**
|
|
293
322
|
* Maximum lowres value.
|
|
294
323
|
*
|
|
@@ -486,6 +515,9 @@ export class Codec {
|
|
|
486
515
|
const config = this.getHwConfig(i);
|
|
487
516
|
if (!config)
|
|
488
517
|
break;
|
|
518
|
+
if (typeof deviceType === 'string') {
|
|
519
|
+
deviceType = avGetHardwareDeviceTypeFromName(deviceType);
|
|
520
|
+
}
|
|
489
521
|
// Check if this config is for the requested device type
|
|
490
522
|
if (config.deviceType === deviceType) {
|
|
491
523
|
// Check if it has any valid hardware method
|
|
@@ -616,6 +648,9 @@ export class Codec {
|
|
|
616
648
|
const config = this.getHwConfig(i);
|
|
617
649
|
if (!config)
|
|
618
650
|
break;
|
|
651
|
+
if (typeof deviceType === 'string') {
|
|
652
|
+
deviceType = avGetHardwareDeviceTypeFromName(deviceType);
|
|
653
|
+
}
|
|
619
654
|
if (config.deviceType === deviceType) {
|
|
620
655
|
return config.methods;
|
|
621
656
|
}
|