webcodecs-node 0.3.0 → 0.5.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/dist/__tests__/AudioData.test.js +2 -1
- package/dist/__tests__/AudioData.test.js.map +1 -1
- package/dist/__tests__/AudioDecoder.test.js +5 -5
- package/dist/__tests__/AudioDecoder.test.js.map +1 -1
- package/dist/__tests__/AudioEncoder.test.js +3 -3
- package/dist/__tests__/AudioEncoder.test.js.map +1 -1
- package/dist/__tests__/EncodedChunks.test.js +3 -2
- package/dist/__tests__/EncodedChunks.test.js.map +1 -1
- package/dist/__tests__/HardwareAcceleration.test.js +2 -1
- package/dist/__tests__/HardwareAcceleration.test.js.map +1 -1
- package/dist/__tests__/ImageDecoder.test.js +16 -45
- package/dist/__tests__/ImageDecoder.test.js.map +1 -1
- package/dist/__tests__/NodeAvDecoder.test.js +12 -5
- package/dist/__tests__/NodeAvDecoder.test.js.map +1 -1
- package/dist/__tests__/VideoDecoder.test.js +5 -5
- package/dist/__tests__/VideoDecoder.test.js.map +1 -1
- package/dist/__tests__/VideoEncoder.test.js +3 -3
- package/dist/__tests__/VideoEncoder.test.js.map +1 -1
- package/dist/__tests__/VideoFrame.test.js +4 -1
- package/dist/__tests__/VideoFrame.test.js.map +1 -1
- package/dist/backends/types.d.ts +6 -3
- package/dist/backends/types.d.ts.map +1 -1
- package/dist/backends/types.js +2 -2
- package/dist/backends/types.js.map +1 -1
- package/dist/codec-utils/audio-codecs.d.ts +60 -0
- package/dist/codec-utils/audio-codecs.d.ts.map +1 -0
- package/dist/codec-utils/audio-codecs.js +117 -0
- package/dist/codec-utils/audio-codecs.js.map +1 -0
- package/dist/codec-utils/formats.d.ts +42 -0
- package/dist/codec-utils/formats.d.ts.map +1 -0
- package/dist/codec-utils/formats.js +147 -0
- package/dist/codec-utils/formats.js.map +1 -0
- package/dist/codec-utils/index.d.ts +9 -0
- package/dist/codec-utils/index.d.ts.map +1 -0
- package/dist/codec-utils/index.js +12 -0
- package/dist/codec-utils/index.js.map +1 -0
- package/dist/codec-utils/types.d.ts +87 -0
- package/dist/codec-utils/types.d.ts.map +1 -0
- package/dist/codec-utils/types.js +10 -0
- package/dist/codec-utils/types.js.map +1 -0
- package/dist/containers/Demuxer.d.ts +114 -0
- package/dist/containers/Demuxer.d.ts.map +1 -0
- package/dist/containers/Demuxer.js +256 -0
- package/dist/containers/Demuxer.js.map +1 -0
- package/dist/containers/Muxer.d.ts +142 -0
- package/dist/containers/Muxer.d.ts.map +1 -0
- package/dist/containers/Muxer.js +295 -0
- package/dist/containers/Muxer.js.map +1 -0
- package/dist/containers/extract.d.ts +25 -0
- package/dist/containers/extract.d.ts.map +1 -0
- package/dist/containers/extract.js +64 -0
- package/dist/containers/extract.js.map +1 -0
- package/dist/containers/index.d.ts +40 -0
- package/dist/containers/index.d.ts.map +1 -0
- package/dist/containers/index.js +41 -0
- package/dist/containers/index.js.map +1 -0
- package/dist/containers/transcode.d.ts +138 -0
- package/dist/containers/transcode.d.ts.map +1 -0
- package/dist/containers/transcode.js +536 -0
- package/dist/containers/transcode.js.map +1 -0
- package/dist/core/AudioData.d.ts +4 -0
- package/dist/core/AudioData.d.ts.map +1 -1
- package/dist/core/AudioData.js +56 -4
- package/dist/core/AudioData.js.map +1 -1
- package/dist/core/EncodedAudioChunk.d.ts +1 -1
- package/dist/core/EncodedAudioChunk.d.ts.map +1 -1
- package/dist/core/EncodedAudioChunk.js +1 -1
- package/dist/core/EncodedAudioChunk.js.map +1 -1
- package/dist/core/EncodedVideoChunk.d.ts.map +1 -1
- package/dist/core/EncodedVideoChunk.js +3 -19
- package/dist/core/EncodedVideoChunk.js.map +1 -1
- package/dist/core/VideoFrame.d.ts +6 -1
- package/dist/core/VideoFrame.d.ts.map +1 -1
- package/dist/core/VideoFrame.js +130 -17
- package/dist/core/VideoFrame.js.map +1 -1
- package/dist/decoders/AudioDecoder.d.ts +8 -0
- package/dist/decoders/AudioDecoder.d.ts.map +1 -1
- package/dist/decoders/AudioDecoder.js +62 -32
- package/dist/decoders/AudioDecoder.js.map +1 -1
- package/dist/decoders/ImageDecoder.d.ts +0 -3
- package/dist/decoders/ImageDecoder.d.ts.map +1 -1
- package/dist/decoders/ImageDecoder.js +13 -225
- package/dist/decoders/ImageDecoder.js.map +1 -1
- package/dist/decoders/VideoDecoder.d.ts +8 -0
- package/dist/decoders/VideoDecoder.d.ts.map +1 -1
- package/dist/decoders/VideoDecoder.js +76 -46
- package/dist/decoders/VideoDecoder.js.map +1 -1
- package/dist/demos/demo-1080p-transcode.d.ts +8 -0
- package/dist/demos/demo-1080p-transcode.d.ts.map +1 -0
- package/dist/demos/demo-1080p-transcode.js +188 -0
- package/dist/demos/demo-1080p-transcode.js.map +1 -0
- package/dist/demos/demo-containers.d.ts +7 -0
- package/dist/demos/demo-containers.d.ts.map +1 -0
- package/dist/demos/demo-containers.js +140 -0
- package/dist/demos/demo-containers.js.map +1 -0
- package/dist/demos/demo-four-corners.js +4 -4
- package/dist/demos/demo-four-corners.js.map +1 -1
- package/dist/demos/demo-hwaccel-conversion.js +1 -1
- package/dist/demos/demo-hwaccel-conversion.js.map +1 -1
- package/dist/demos/demo-hwaccel.js +1 -1
- package/dist/demos/demo-hwaccel.js.map +1 -1
- package/dist/demos/demo-samples.js +4 -4
- package/dist/demos/demo-samples.js.map +1 -1
- package/dist/demos/demo-streaming.js +6 -6
- package/dist/demos/demo-streaming.js.map +1 -1
- package/dist/encoders/AudioEncoder.d.ts +8 -0
- package/dist/encoders/AudioEncoder.d.ts.map +1 -1
- package/dist/encoders/AudioEncoder.js +68 -26
- package/dist/encoders/AudioEncoder.js.map +1 -1
- package/dist/encoders/VideoEncoder.d.ts +8 -0
- package/dist/encoders/VideoEncoder.d.ts.map +1 -1
- package/dist/encoders/VideoEncoder.js +64 -13
- package/dist/encoders/VideoEncoder.js.map +1 -1
- package/dist/ffmpeg/index.d.ts +3 -2
- package/dist/ffmpeg/index.d.ts.map +1 -1
- package/dist/ffmpeg/index.js +3 -3
- package/dist/ffmpeg/index.js.map +1 -1
- package/dist/formats/conversions/batch-converter.d.ts +61 -0
- package/dist/formats/conversions/batch-converter.d.ts.map +1 -0
- package/dist/formats/conversions/batch-converter.js +274 -0
- package/dist/formats/conversions/batch-converter.js.map +1 -0
- package/dist/formats/conversions/frame-converter.d.ts.map +1 -1
- package/dist/formats/conversions/frame-converter.js +17 -10
- package/dist/formats/conversions/frame-converter.js.map +1 -1
- package/dist/formats/conversions/index.d.ts +1 -0
- package/dist/formats/conversions/index.d.ts.map +1 -1
- package/dist/formats/conversions/index.js +2 -0
- package/dist/formats/conversions/index.js.map +1 -1
- package/dist/hardware/decoder-args.d.ts +2 -7
- package/dist/hardware/decoder-args.d.ts.map +1 -1
- package/dist/hardware/decoder-args.js +2 -32
- package/dist/hardware/decoder-args.js.map +1 -1
- package/dist/hardware/encoder-args.d.ts +2 -11
- package/dist/hardware/encoder-args.d.ts.map +1 -1
- package/dist/hardware/encoder-args.js +2 -71
- package/dist/hardware/encoder-args.js.map +1 -1
- package/dist/hardware/index.d.ts +2 -2
- package/dist/hardware/index.d.ts.map +1 -1
- package/dist/hardware/index.js +2 -2
- package/dist/hardware/index.js.map +1 -1
- package/dist/index.d.ts +5 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -6
- package/dist/index.js.map +1 -1
- package/dist/mediabunny/FFmpegAudioDecoder.d.ts +3 -2
- package/dist/mediabunny/FFmpegAudioDecoder.d.ts.map +1 -1
- package/dist/mediabunny/FFmpegAudioDecoder.js +5 -8
- package/dist/mediabunny/FFmpegAudioDecoder.js.map +1 -1
- package/dist/mediabunny/FFmpegAudioEncoder.d.ts +3 -2
- package/dist/mediabunny/FFmpegAudioEncoder.d.ts.map +1 -1
- package/dist/mediabunny/FFmpegAudioEncoder.js +3 -2
- package/dist/mediabunny/FFmpegAudioEncoder.js.map +1 -1
- package/dist/mediabunny/FFmpegVideoDecoder.d.ts +4 -3
- package/dist/mediabunny/FFmpegVideoDecoder.d.ts.map +1 -1
- package/dist/mediabunny/FFmpegVideoDecoder.js +6 -9
- package/dist/mediabunny/FFmpegVideoDecoder.js.map +1 -1
- package/dist/mediabunny/FFmpegVideoEncoder.d.ts +4 -3
- package/dist/mediabunny/FFmpegVideoEncoder.d.ts.map +1 -1
- package/dist/mediabunny/FFmpegVideoEncoder.js +4 -3
- package/dist/mediabunny/FFmpegVideoEncoder.js.map +1 -1
- package/dist/node-av/NodeAvAudioDecoder.d.ts +2 -2
- package/dist/node-av/NodeAvAudioDecoder.d.ts.map +1 -1
- package/dist/node-av/NodeAvAudioDecoder.js +63 -56
- package/dist/node-av/NodeAvAudioDecoder.js.map +1 -1
- package/dist/node-av/NodeAvAudioEncoder.d.ts +6 -0
- package/dist/node-av/NodeAvAudioEncoder.d.ts.map +1 -1
- package/dist/node-av/NodeAvAudioEncoder.js +166 -45
- package/dist/node-av/NodeAvAudioEncoder.js.map +1 -1
- package/dist/node-av/NodeAvImageDecoder.d.ts +28 -9
- package/dist/node-av/NodeAvImageDecoder.d.ts.map +1 -1
- package/dist/node-av/NodeAvImageDecoder.js +156 -37
- package/dist/node-av/NodeAvImageDecoder.js.map +1 -1
- package/dist/node-av/NodeAvVideoDecoder.d.ts +1 -1
- package/dist/node-av/NodeAvVideoDecoder.d.ts.map +1 -1
- package/dist/node-av/NodeAvVideoDecoder.js +20 -16
- package/dist/node-av/NodeAvVideoDecoder.js.map +1 -1
- package/dist/node-av/NodeAvVideoEncoder.d.ts +12 -0
- package/dist/node-av/NodeAvVideoEncoder.d.ts.map +1 -1
- package/dist/node-av/NodeAvVideoEncoder.js +175 -63
- package/dist/node-av/NodeAvVideoEncoder.js.map +1 -1
- package/dist/polyfill.d.ts.map +1 -1
- package/dist/polyfill.js +11 -9
- package/dist/polyfill.js.map +1 -1
- package/dist/utils/aac.d.ts.map +1 -1
- package/dist/utils/aac.js +6 -0
- package/dist/utils/aac.js.map +1 -1
- package/dist/utils/buffer-pool.d.ts +109 -0
- package/dist/utils/buffer-pool.d.ts.map +1 -0
- package/dist/utils/buffer-pool.js +278 -0
- package/dist/utils/buffer-pool.js.map +1 -0
- package/dist/utils/codec-cache.d.ts +65 -0
- package/dist/utils/codec-cache.d.ts.map +1 -0
- package/dist/utils/codec-cache.js +116 -0
- package/dist/utils/codec-cache.js.map +1 -0
- package/dist/utils/errors.d.ts +62 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +84 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/hardware-pool.d.ts +88 -0
- package/dist/utils/hardware-pool.d.ts.map +1 -0
- package/dist/utils/hardware-pool.js +266 -0
- package/dist/utils/hardware-pool.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/timeout.d.ts +44 -0
- package/dist/utils/timeout.d.ts.map +1 -0
- package/dist/utils/timeout.js +73 -0
- package/dist/utils/timeout.js.map +1 -0
- package/dist/utils/type-guards.d.ts +11 -1
- package/dist/utils/type-guards.d.ts.map +1 -1
- package/dist/utils/type-guards.js.map +1 -1
- package/package.json +13 -35
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codec format mappings
|
|
3
|
+
*
|
|
4
|
+
* Converts between WebCodecs formats and libav formats used by node-av.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Map WebCodecs pixel format to libav pixel format
|
|
8
|
+
*/
|
|
9
|
+
export declare function pixelFormatToFFmpeg(format: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Map libav pixel format to WebCodecs pixel format
|
|
12
|
+
*/
|
|
13
|
+
export declare function ffmpegToPixelFormat(format: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Map WebCodecs codec string to libav encoder codec
|
|
16
|
+
*/
|
|
17
|
+
export declare function webCodecToFFmpegCodec(webCodec: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Map WebCodecs codec to container format
|
|
20
|
+
*/
|
|
21
|
+
export declare function webCodecToContainerFormat(webCodec: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Calculate frame size in bytes for a given pixel format and dimensions
|
|
24
|
+
*/
|
|
25
|
+
export declare function calculateFrameSize(format: string, width: number, height: number): number;
|
|
26
|
+
/**
|
|
27
|
+
* MIME type to format mapping for ImageDecoder
|
|
28
|
+
*/
|
|
29
|
+
export declare const IMAGE_MIME_TO_FFMPEG: Record<string, {
|
|
30
|
+
format: string;
|
|
31
|
+
decoder?: string;
|
|
32
|
+
autoDetect?: boolean;
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* Audio codec mappings
|
|
36
|
+
*/
|
|
37
|
+
export declare const AUDIO_CODEC_MAP: Record<string, string>;
|
|
38
|
+
/**
|
|
39
|
+
* Get libav audio codec from WebCodecs codec string
|
|
40
|
+
*/
|
|
41
|
+
export declare function webCodecToFFmpegAudioCodec(codec: string): string;
|
|
42
|
+
//# sourceMappingURL=formats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formats.d.ts","sourceRoot":"","sources":["../../src/codec-utils/formats.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAa1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAa1D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgB9D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgBlE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAkCxF;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,CAU3G,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CASlD,CAAC;AAEF;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGhE"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codec format mappings
|
|
3
|
+
*
|
|
4
|
+
* Converts between WebCodecs formats and libav formats used by node-av.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Map WebCodecs pixel format to libav pixel format
|
|
8
|
+
*/
|
|
9
|
+
export function pixelFormatToFFmpeg(format) {
|
|
10
|
+
const formatMap = {
|
|
11
|
+
'I420': 'yuv420p',
|
|
12
|
+
'I420A': 'yuva420p',
|
|
13
|
+
'I422': 'yuv422p',
|
|
14
|
+
'I444': 'yuv444p',
|
|
15
|
+
'NV12': 'nv12',
|
|
16
|
+
'RGBA': 'rgba',
|
|
17
|
+
'RGBX': 'rgb0',
|
|
18
|
+
'BGRA': 'bgra',
|
|
19
|
+
'BGRX': 'bgr0',
|
|
20
|
+
};
|
|
21
|
+
return formatMap[format] || format.toLowerCase();
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Map libav pixel format to WebCodecs pixel format
|
|
25
|
+
*/
|
|
26
|
+
export function ffmpegToPixelFormat(format) {
|
|
27
|
+
const formatMap = {
|
|
28
|
+
'yuv420p': 'I420',
|
|
29
|
+
'yuva420p': 'I420A',
|
|
30
|
+
'yuv422p': 'I422',
|
|
31
|
+
'yuv444p': 'I444',
|
|
32
|
+
'nv12': 'NV12',
|
|
33
|
+
'rgba': 'RGBA',
|
|
34
|
+
'rgb0': 'RGBX',
|
|
35
|
+
'bgra': 'BGRA',
|
|
36
|
+
'bgr0': 'BGRX',
|
|
37
|
+
};
|
|
38
|
+
return formatMap[format] || format.toUpperCase();
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Map WebCodecs codec string to libav encoder codec
|
|
42
|
+
*/
|
|
43
|
+
export function webCodecToFFmpegCodec(webCodec) {
|
|
44
|
+
const codecBase = webCodec.split('.')[0].toLowerCase();
|
|
45
|
+
const codecMap = {
|
|
46
|
+
'avc1': 'libx264',
|
|
47
|
+
'avc3': 'libx264',
|
|
48
|
+
'hev1': 'libx265',
|
|
49
|
+
'hvc1': 'libx265',
|
|
50
|
+
'vp8': 'libvpx',
|
|
51
|
+
'vp09': 'libvpx-vp9',
|
|
52
|
+
'vp9': 'libvpx-vp9',
|
|
53
|
+
'av01': 'libaom-av1',
|
|
54
|
+
'av1': 'libaom-av1',
|
|
55
|
+
};
|
|
56
|
+
return codecMap[codecBase] || codecBase;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Map WebCodecs codec to container format
|
|
60
|
+
*/
|
|
61
|
+
export function webCodecToContainerFormat(webCodec) {
|
|
62
|
+
const codecBase = webCodec.split('.')[0].toLowerCase();
|
|
63
|
+
const formatMap = {
|
|
64
|
+
'avc1': 'h264',
|
|
65
|
+
'avc3': 'h264',
|
|
66
|
+
'hev1': 'hevc',
|
|
67
|
+
'hvc1': 'hevc',
|
|
68
|
+
'vp8': 'ivf',
|
|
69
|
+
'vp09': 'ivf',
|
|
70
|
+
'vp9': 'ivf',
|
|
71
|
+
'av01': 'ivf',
|
|
72
|
+
'av1': 'ivf',
|
|
73
|
+
};
|
|
74
|
+
return formatMap[codecBase] || 'rawvideo';
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Calculate frame size in bytes for a given pixel format and dimensions
|
|
78
|
+
*/
|
|
79
|
+
export function calculateFrameSize(format, width, height) {
|
|
80
|
+
const chromaW = Math.ceil(width / 2);
|
|
81
|
+
const chromaH = Math.ceil(height / 2);
|
|
82
|
+
switch (format.toUpperCase()) {
|
|
83
|
+
case 'I420':
|
|
84
|
+
case 'YUV420P':
|
|
85
|
+
// Y: width * height, U: chromaW * chromaH, V: chromaW * chromaH
|
|
86
|
+
return width * height + 2 * chromaW * chromaH;
|
|
87
|
+
case 'I420A':
|
|
88
|
+
case 'YUVA420P':
|
|
89
|
+
// I420 + Alpha plane
|
|
90
|
+
return width * height * 2 + 2 * chromaW * chromaH;
|
|
91
|
+
case 'I422':
|
|
92
|
+
case 'YUV422P':
|
|
93
|
+
// Y: width * height, U: chromaW * height, V: chromaW * height
|
|
94
|
+
return width * height + 2 * chromaW * height;
|
|
95
|
+
case 'I444':
|
|
96
|
+
case 'YUV444P':
|
|
97
|
+
// Y, U, V all full size
|
|
98
|
+
return width * height * 3;
|
|
99
|
+
case 'NV12':
|
|
100
|
+
// Y: width * height, UV interleaved: width * chromaH
|
|
101
|
+
return width * height + width * chromaH;
|
|
102
|
+
case 'RGBA':
|
|
103
|
+
case 'RGBX':
|
|
104
|
+
case 'BGRA':
|
|
105
|
+
case 'BGRX':
|
|
106
|
+
case 'RGB0':
|
|
107
|
+
case 'BGR0':
|
|
108
|
+
return width * height * 4;
|
|
109
|
+
default:
|
|
110
|
+
return width * height * 4; // Assume RGBA as fallback
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* MIME type to format mapping for ImageDecoder
|
|
115
|
+
*/
|
|
116
|
+
export const IMAGE_MIME_TO_FFMPEG = {
|
|
117
|
+
'image/png': { format: 'png_pipe' },
|
|
118
|
+
'image/apng': { format: 'apng' },
|
|
119
|
+
'image/jpeg': { format: 'jpeg_pipe' },
|
|
120
|
+
'image/jpg': { format: 'jpeg_pipe' },
|
|
121
|
+
'image/webp': { format: 'webp_pipe', autoDetect: true },
|
|
122
|
+
'image/gif': { format: 'gif' },
|
|
123
|
+
'image/bmp': { format: 'bmp_pipe' },
|
|
124
|
+
'image/avif': { format: 'avif', autoDetect: true },
|
|
125
|
+
'image/tiff': { format: 'tiff_pipe' },
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Audio codec mappings
|
|
129
|
+
*/
|
|
130
|
+
export const AUDIO_CODEC_MAP = {
|
|
131
|
+
'opus': 'libopus',
|
|
132
|
+
'aac': 'aac',
|
|
133
|
+
'mp3': 'libmp3lame',
|
|
134
|
+
'flac': 'flac',
|
|
135
|
+
'vorbis': 'libvorbis',
|
|
136
|
+
'pcm-s16': 'pcm_s16le',
|
|
137
|
+
'pcm-s32': 'pcm_s32le',
|
|
138
|
+
'pcm-f32': 'pcm_f32le',
|
|
139
|
+
};
|
|
140
|
+
/**
|
|
141
|
+
* Get libav audio codec from WebCodecs codec string
|
|
142
|
+
*/
|
|
143
|
+
export function webCodecToFFmpegAudioCodec(codec) {
|
|
144
|
+
const codecLower = codec.toLowerCase();
|
|
145
|
+
return AUDIO_CODEC_MAP[codecLower] || codecLower;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=formats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formats.js","sourceRoot":"","sources":["../../src/codec-utils/formats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codec utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides codec and format mappings between WebCodecs and libav (node-av).
|
|
5
|
+
*/
|
|
6
|
+
export { type EncodedFrameData, type DecoderConfig, type EncoderConfig, type BitrateMode, type AlphaOption, DEFAULT_SHUTDOWN_TIMEOUT, DEFAULT_FLUSH_TIMEOUT, } from './types.js';
|
|
7
|
+
export { pixelFormatToFFmpeg, ffmpegToPixelFormat, webCodecToFFmpegCodec, webCodecToContainerFormat, calculateFrameSize, webCodecToFFmpegAudioCodec, IMAGE_MIME_TO_FFMPEG, AUDIO_CODEC_MAP, } from './formats.js';
|
|
8
|
+
export { AUDIO_ENCODER_CODEC_MAP, AUDIO_DECODER_CODEC_MAP, AUDIO_ENCODER_FORMAT_MAP, AUDIO_FRAME_SIZE_MAP, AUDIO_OUTPUT_FORMAT_MAP, getAudioEncoderCodec, getAudioDecoderInfo, getAudioEncoderFormat, getAudioFrameSize, getAudioOutputFormatSettings, type AudioFormatSettings, } from './audio-codecs.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/codec-utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACpB,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,4BAA4B,EAC5B,KAAK,mBAAmB,GACzB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codec utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides codec and format mappings between WebCodecs and libav (node-av).
|
|
5
|
+
*/
|
|
6
|
+
// Types
|
|
7
|
+
export { DEFAULT_SHUTDOWN_TIMEOUT, DEFAULT_FLUSH_TIMEOUT, } from './types.js';
|
|
8
|
+
// Format mappings
|
|
9
|
+
export { pixelFormatToFFmpeg, ffmpegToPixelFormat, webCodecToFFmpegCodec, webCodecToContainerFormat, calculateFrameSize, webCodecToFFmpegAudioCodec, IMAGE_MIME_TO_FFMPEG, AUDIO_CODEC_MAP, } from './formats.js';
|
|
10
|
+
// Audio codec mappings
|
|
11
|
+
export { AUDIO_ENCODER_CODEC_MAP, AUDIO_DECODER_CODEC_MAP, AUDIO_ENCODER_FORMAT_MAP, AUDIO_FRAME_SIZE_MAP, AUDIO_OUTPUT_FORMAT_MAP, getAudioEncoderCodec, getAudioDecoderInfo, getAudioEncoderFormat, getAudioFrameSize, getAudioOutputFormatSettings, } from './audio-codecs.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codec-utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,QAAQ;AACR,OAAO,EAML,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,kBAAkB;AAClB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACpB,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,uBAAuB;AACvB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,4BAA4B,GAE7B,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codec configuration types
|
|
3
|
+
*
|
|
4
|
+
* Configuration types for video and audio encoding/decoding.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Codec configuration
|
|
8
|
+
*/
|
|
9
|
+
export interface CodecConfig {
|
|
10
|
+
input: CodecInputConfig;
|
|
11
|
+
output: CodecOutputConfig;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Input configuration
|
|
15
|
+
*/
|
|
16
|
+
export interface CodecInputConfig {
|
|
17
|
+
format: string;
|
|
18
|
+
codec?: string;
|
|
19
|
+
width?: number;
|
|
20
|
+
height?: number;
|
|
21
|
+
framerate?: number;
|
|
22
|
+
pixelFormat?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Output configuration
|
|
26
|
+
*/
|
|
27
|
+
export interface CodecOutputConfig {
|
|
28
|
+
format: string;
|
|
29
|
+
codec?: string;
|
|
30
|
+
width?: number;
|
|
31
|
+
height?: number;
|
|
32
|
+
framerate?: number;
|
|
33
|
+
pixelFormat?: string;
|
|
34
|
+
bitrate?: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Encoded frame data emitted by parsers
|
|
38
|
+
*/
|
|
39
|
+
export interface EncodedFrameData {
|
|
40
|
+
data: Buffer;
|
|
41
|
+
timestamp: number;
|
|
42
|
+
keyFrame: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Decoder configuration
|
|
46
|
+
*/
|
|
47
|
+
export interface DecoderConfig {
|
|
48
|
+
codec: string;
|
|
49
|
+
width: number;
|
|
50
|
+
height: number;
|
|
51
|
+
outputPixelFormat?: string;
|
|
52
|
+
hardwareDecoderArgs?: string[];
|
|
53
|
+
hardwareDownloadFilter?: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Bitrate mode for encoding
|
|
57
|
+
* - 'constant': Constant bitrate (CBR) - predictable file size, may vary quality
|
|
58
|
+
* - 'variable': Variable bitrate (VBR) - better quality, less predictable size
|
|
59
|
+
* - 'quantizer': Fixed quality mode (CRF/CQ) - consistent quality, variable size
|
|
60
|
+
*/
|
|
61
|
+
export type BitrateMode = 'constant' | 'variable' | 'quantizer';
|
|
62
|
+
/**
|
|
63
|
+
* Alpha channel handling mode
|
|
64
|
+
* - 'discard': Drop alpha channel (default, works with all codecs)
|
|
65
|
+
* - 'keep': Preserve alpha channel (only VP9 and AV1 support this)
|
|
66
|
+
*/
|
|
67
|
+
export type AlphaOption = 'discard' | 'keep';
|
|
68
|
+
/**
|
|
69
|
+
* Encoder configuration
|
|
70
|
+
*/
|
|
71
|
+
export interface EncoderConfig {
|
|
72
|
+
codec: string;
|
|
73
|
+
width: number;
|
|
74
|
+
height: number;
|
|
75
|
+
inputPixelFormat?: string;
|
|
76
|
+
framerate?: number;
|
|
77
|
+
bitrate?: number;
|
|
78
|
+
bitrateMode?: BitrateMode;
|
|
79
|
+
latencyMode?: 'quality' | 'realtime';
|
|
80
|
+
alpha?: AlphaOption;
|
|
81
|
+
hardwareEncoderArgs?: string[];
|
|
82
|
+
}
|
|
83
|
+
/** Default timeout for graceful shutdown (ms) */
|
|
84
|
+
export declare const DEFAULT_SHUTDOWN_TIMEOUT = 5000;
|
|
85
|
+
/** Default timeout for flush operations (ms) */
|
|
86
|
+
export declare const DEFAULT_FLUSH_TIMEOUT = 30000;
|
|
87
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/codec-utils/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;AAEhE;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACrC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,iDAAiD;AACjD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,gDAAgD;AAChD,eAAO,MAAM,qBAAqB,QAAQ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codec configuration types
|
|
3
|
+
*
|
|
4
|
+
* Configuration types for video and audio encoding/decoding.
|
|
5
|
+
*/
|
|
6
|
+
/** Default timeout for graceful shutdown (ms) */
|
|
7
|
+
export const DEFAULT_SHUTDOWN_TIMEOUT = 5000;
|
|
8
|
+
/** Default timeout for flush operations (ms) */
|
|
9
|
+
export const DEFAULT_FLUSH_TIMEOUT = 30000;
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/codec-utils/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAuFH,iDAAiD;AACjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C,gDAAgD;AAChD,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Container Demuxer - Extracts encoded chunks from container files (MP4, WebM, MKV)
|
|
3
|
+
*
|
|
4
|
+
* Wraps node-av's Demuxer to provide a WebCodecs-compatible interface that outputs
|
|
5
|
+
* EncodedVideoChunk and EncodedAudioChunk objects.
|
|
6
|
+
*/
|
|
7
|
+
import { Demuxer as NodeAvDemuxer } from 'node-av';
|
|
8
|
+
import { EncodedVideoChunk } from '../core/EncodedVideoChunk.js';
|
|
9
|
+
import { EncodedAudioChunk } from '../core/EncodedAudioChunk.js';
|
|
10
|
+
/**
|
|
11
|
+
* Video stream configuration extracted from container
|
|
12
|
+
*/
|
|
13
|
+
export interface VideoStreamConfig {
|
|
14
|
+
codec: string;
|
|
15
|
+
codedWidth: number;
|
|
16
|
+
codedHeight: number;
|
|
17
|
+
description?: Uint8Array;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Audio stream configuration extracted from container
|
|
21
|
+
*/
|
|
22
|
+
export interface AudioStreamConfig {
|
|
23
|
+
codec: string;
|
|
24
|
+
sampleRate: number;
|
|
25
|
+
numberOfChannels: number;
|
|
26
|
+
description?: Uint8Array;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Demuxer configuration
|
|
30
|
+
*/
|
|
31
|
+
export interface DemuxerConfig {
|
|
32
|
+
/** Path to the input file */
|
|
33
|
+
path: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Callback types for demuxed chunks
|
|
37
|
+
*/
|
|
38
|
+
export type VideoChunkCallback = (chunk: EncodedVideoChunk, config: VideoStreamConfig) => void;
|
|
39
|
+
export type AudioChunkCallback = (chunk: EncodedAudioChunk, config: AudioStreamConfig) => void;
|
|
40
|
+
/**
|
|
41
|
+
* Container demuxer that outputs WebCodecs-compatible chunks
|
|
42
|
+
*/
|
|
43
|
+
export declare class Demuxer {
|
|
44
|
+
private demuxer;
|
|
45
|
+
private path;
|
|
46
|
+
private _videoConfig;
|
|
47
|
+
private _audioConfig;
|
|
48
|
+
private _videoStreamIndex;
|
|
49
|
+
private _audioStreamIndex;
|
|
50
|
+
private _videoTimeBase;
|
|
51
|
+
private _audioTimeBase;
|
|
52
|
+
constructor(config: DemuxerConfig);
|
|
53
|
+
/**
|
|
54
|
+
* Open the container file and parse stream information
|
|
55
|
+
*/
|
|
56
|
+
open(timeout?: number): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Get video stream configuration (null if no video stream)
|
|
59
|
+
*/
|
|
60
|
+
get videoConfig(): VideoStreamConfig | null;
|
|
61
|
+
/**
|
|
62
|
+
* Get audio stream configuration (null if no audio stream)
|
|
63
|
+
*/
|
|
64
|
+
get audioConfig(): AudioStreamConfig | null;
|
|
65
|
+
/**
|
|
66
|
+
* Get container format name (e.g., "mp4", "webm")
|
|
67
|
+
*/
|
|
68
|
+
get format(): string | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* Get duration in seconds
|
|
71
|
+
*/
|
|
72
|
+
get duration(): number | undefined;
|
|
73
|
+
/**
|
|
74
|
+
* Convert timestamp from stream time base to microseconds
|
|
75
|
+
*/
|
|
76
|
+
private toMicroseconds;
|
|
77
|
+
/**
|
|
78
|
+
* Iterate over video chunks
|
|
79
|
+
*/
|
|
80
|
+
videoChunks(): AsyncGenerator<EncodedVideoChunk>;
|
|
81
|
+
/**
|
|
82
|
+
* Iterate over audio chunks
|
|
83
|
+
*/
|
|
84
|
+
audioChunks(): AsyncGenerator<EncodedAudioChunk>;
|
|
85
|
+
/**
|
|
86
|
+
* Iterate over all chunks (video and audio interleaved)
|
|
87
|
+
* Returns both the chunk and its type/config for proper routing
|
|
88
|
+
*/
|
|
89
|
+
chunks(): AsyncGenerator<{
|
|
90
|
+
type: 'video';
|
|
91
|
+
chunk: EncodedVideoChunk;
|
|
92
|
+
config: VideoStreamConfig;
|
|
93
|
+
} | {
|
|
94
|
+
type: 'audio';
|
|
95
|
+
chunk: EncodedAudioChunk;
|
|
96
|
+
config: AudioStreamConfig;
|
|
97
|
+
}>;
|
|
98
|
+
/**
|
|
99
|
+
* Demux all chunks with callbacks (alternative API)
|
|
100
|
+
*/
|
|
101
|
+
demux(options: {
|
|
102
|
+
onVideoChunk?: VideoChunkCallback;
|
|
103
|
+
onAudioChunk?: AudioChunkCallback;
|
|
104
|
+
}): Promise<void>;
|
|
105
|
+
/**
|
|
106
|
+
* Close the demuxer and release resources
|
|
107
|
+
*/
|
|
108
|
+
close(): Promise<void>;
|
|
109
|
+
/**
|
|
110
|
+
* Get the underlying node-av demuxer (for advanced use)
|
|
111
|
+
*/
|
|
112
|
+
get native(): NodeAvDemuxer | null;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=Demuxer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Demuxer.d.ts","sourceRoot":"","sources":["../../src/containers/Demuxer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAA8B,MAAM,8BAA8B,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAA8B,MAAM,8BAA8B,CAAC;AAG7F;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,UAAU,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,UAAU,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAC/F,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;AA+C/F;;GAEG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,cAAc,CAA6C;gBAEvD,MAAM,EAAE,aAAa;IAIjC;;OAEG;IACG,IAAI,CAAC,OAAO,GAAE,MAA8B,GAAG,OAAO,CAAC,IAAI,CAAC;IA4ClE;;OAEG;IACH,IAAI,WAAW,IAAI,iBAAiB,GAAG,IAAI,CAE1C;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,iBAAiB,GAAG,IAAI,CAE1C;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;IAED;;OAEG;IACH,OAAO,CAAC,cAAc;IAKtB;;OAEG;IACI,WAAW,IAAI,cAAc,CAAC,iBAAiB,CAAC;IAyBvD;;OAEG;IACI,WAAW,IAAI,cAAc,CAAC,iBAAiB,CAAC;IAyBvD;;;OAGG;IACI,MAAM,IAAI,cAAc,CAC3B;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,iBAAiB,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAA;KAAE,GACtE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,iBAAiB,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAA;KAAE,CACzE;IAuCD;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE;QACnB,YAAY,CAAC,EAAE,kBAAkB,CAAC;QAClC,YAAY,CAAC,EAAE,kBAAkB,CAAC;KACnC,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACH,IAAI,MAAM,IAAI,aAAa,GAAG,IAAI,CAEjC;CACF"}
|