webcodecs-node 0.2.2
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/LICENSE +656 -0
- package/README.md +607 -0
- package/dist/AudioData.d.ts +6 -0
- package/dist/AudioData.d.ts.map +1 -0
- package/dist/AudioData.js +6 -0
- package/dist/AudioData.js.map +1 -0
- package/dist/AudioDecoder.d.ts +6 -0
- package/dist/AudioDecoder.d.ts.map +1 -0
- package/dist/AudioDecoder.js +6 -0
- package/dist/AudioDecoder.js.map +1 -0
- package/dist/AudioEncoder.d.ts +6 -0
- package/dist/AudioEncoder.d.ts.map +1 -0
- package/dist/AudioEncoder.js +6 -0
- package/dist/AudioEncoder.js.map +1 -0
- package/dist/EncodedAudioChunk.d.ts +6 -0
- package/dist/EncodedAudioChunk.d.ts.map +1 -0
- package/dist/EncodedAudioChunk.js +6 -0
- package/dist/EncodedAudioChunk.js.map +1 -0
- package/dist/EncodedVideoChunk.d.ts +6 -0
- package/dist/EncodedVideoChunk.d.ts.map +1 -0
- package/dist/EncodedVideoChunk.js +6 -0
- package/dist/EncodedVideoChunk.js.map +1 -0
- package/dist/FFmpegProcess.d.ts +6 -0
- package/dist/FFmpegProcess.d.ts.map +1 -0
- package/dist/FFmpegProcess.js +6 -0
- package/dist/FFmpegProcess.js.map +1 -0
- package/dist/HardwareAcceleration.d.ts +6 -0
- package/dist/HardwareAcceleration.d.ts.map +1 -0
- package/dist/HardwareAcceleration.js +6 -0
- package/dist/HardwareAcceleration.js.map +1 -0
- package/dist/ImageDecoder.d.ts +6 -0
- package/dist/ImageDecoder.d.ts.map +1 -0
- package/dist/ImageDecoder.js +6 -0
- package/dist/ImageDecoder.js.map +1 -0
- package/dist/Logger.d.ts +6 -0
- package/dist/Logger.d.ts.map +1 -0
- package/dist/Logger.js +6 -0
- package/dist/Logger.js.map +1 -0
- package/dist/MediaCapabilities.d.ts +9 -0
- package/dist/MediaCapabilities.d.ts.map +1 -0
- package/dist/MediaCapabilities.js +8 -0
- package/dist/MediaCapabilities.js.map +1 -0
- package/dist/VideoDecoder.d.ts +6 -0
- package/dist/VideoDecoder.d.ts.map +1 -0
- package/dist/VideoDecoder.js +6 -0
- package/dist/VideoDecoder.js.map +1 -0
- package/dist/VideoEncoder.d.ts +6 -0
- package/dist/VideoEncoder.d.ts.map +1 -0
- package/dist/VideoEncoder.js +6 -0
- package/dist/VideoEncoder.js.map +1 -0
- package/dist/VideoFrame.d.ts +10 -0
- package/dist/VideoFrame.d.ts.map +1 -0
- package/dist/VideoFrame.js +9 -0
- package/dist/VideoFrame.js.map +1 -0
- package/dist/__tests__/AudioData.test.d.ts +5 -0
- package/dist/__tests__/AudioData.test.d.ts.map +1 -0
- package/dist/__tests__/AudioData.test.js +179 -0
- package/dist/__tests__/AudioData.test.js.map +1 -0
- package/dist/__tests__/AudioDecoder.test.d.ts +5 -0
- package/dist/__tests__/AudioDecoder.test.d.ts.map +1 -0
- package/dist/__tests__/AudioDecoder.test.js +733 -0
- package/dist/__tests__/AudioDecoder.test.js.map +1 -0
- package/dist/__tests__/AudioEncoder.test.d.ts +5 -0
- package/dist/__tests__/AudioEncoder.test.d.ts.map +1 -0
- package/dist/__tests__/AudioEncoder.test.js +247 -0
- package/dist/__tests__/AudioEncoder.test.js.map +1 -0
- package/dist/__tests__/EncodedChunks.test.d.ts +5 -0
- package/dist/__tests__/EncodedChunks.test.d.ts.map +1 -0
- package/dist/__tests__/EncodedChunks.test.js +99 -0
- package/dist/__tests__/EncodedChunks.test.js.map +1 -0
- package/dist/__tests__/HardwareAcceleration.test.d.ts +5 -0
- package/dist/__tests__/HardwareAcceleration.test.d.ts.map +1 -0
- package/dist/__tests__/HardwareAcceleration.test.js +84 -0
- package/dist/__tests__/HardwareAcceleration.test.js.map +1 -0
- package/dist/__tests__/ImageDecoder.test.d.ts +5 -0
- package/dist/__tests__/ImageDecoder.test.d.ts.map +1 -0
- package/dist/__tests__/ImageDecoder.test.js +587 -0
- package/dist/__tests__/ImageDecoder.test.js.map +1 -0
- package/dist/__tests__/MediaCapabilities.test.d.ts +5 -0
- package/dist/__tests__/MediaCapabilities.test.d.ts.map +1 -0
- package/dist/__tests__/MediaCapabilities.test.js +346 -0
- package/dist/__tests__/MediaCapabilities.test.js.map +1 -0
- package/dist/__tests__/VideoDecoder.test.d.ts +5 -0
- package/dist/__tests__/VideoDecoder.test.d.ts.map +1 -0
- package/dist/__tests__/VideoDecoder.test.js +675 -0
- package/dist/__tests__/VideoDecoder.test.js.map +1 -0
- package/dist/__tests__/VideoEncoder.test.d.ts +5 -0
- package/dist/__tests__/VideoEncoder.test.d.ts.map +1 -0
- package/dist/__tests__/VideoEncoder.test.js +468 -0
- package/dist/__tests__/VideoEncoder.test.js.map +1 -0
- package/dist/__tests__/VideoFrame.test.d.ts +5 -0
- package/dist/__tests__/VideoFrame.test.d.ts.map +1 -0
- package/dist/__tests__/VideoFrame.test.js +243 -0
- package/dist/__tests__/VideoFrame.test.js.map +1 -0
- package/dist/__tests__/aac-utils.test.d.ts +2 -0
- package/dist/__tests__/aac-utils.test.d.ts.map +1 -0
- package/dist/__tests__/aac-utils.test.js +37 -0
- package/dist/__tests__/aac-utils.test.js.map +1 -0
- package/dist/__tests__/avc-utils.test.d.ts +2 -0
- package/dist/__tests__/avc-utils.test.d.ts.map +1 -0
- package/dist/__tests__/avc-utils.test.js +63 -0
- package/dist/__tests__/avc-utils.test.js.map +1 -0
- package/dist/__tests__/hevc-utils.test.d.ts +2 -0
- package/dist/__tests__/hevc-utils.test.d.ts.map +1 -0
- package/dist/__tests__/hevc-utils.test.js +78 -0
- package/dist/__tests__/hevc-utils.test.js.map +1 -0
- package/dist/capabilities/MediaCapabilities.d.ts +78 -0
- package/dist/capabilities/MediaCapabilities.d.ts.map +1 -0
- package/dist/capabilities/MediaCapabilities.js +276 -0
- package/dist/capabilities/MediaCapabilities.js.map +1 -0
- package/dist/capabilities/codecs.d.ts +72 -0
- package/dist/capabilities/codecs.d.ts.map +1 -0
- package/dist/capabilities/codecs.js +153 -0
- package/dist/capabilities/codecs.js.map +1 -0
- package/dist/capabilities/index.d.ts +7 -0
- package/dist/capabilities/index.d.ts.map +1 -0
- package/dist/capabilities/index.js +8 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/capabilities/types.d.ts +77 -0
- package/dist/capabilities/types.d.ts.map +1 -0
- package/dist/capabilities/types.js +5 -0
- package/dist/capabilities/types.js.map +1 -0
- package/dist/core/AudioData.d.ts +36 -0
- package/dist/core/AudioData.d.ts.map +1 -0
- package/dist/core/AudioData.js +229 -0
- package/dist/core/AudioData.js.map +1 -0
- package/dist/core/EncodedAudioChunk.d.ts +26 -0
- package/dist/core/EncodedAudioChunk.d.ts.map +1 -0
- package/dist/core/EncodedAudioChunk.js +58 -0
- package/dist/core/EncodedAudioChunk.js.map +1 -0
- package/dist/core/EncodedVideoChunk.d.ts +23 -0
- package/dist/core/EncodedVideoChunk.d.ts.map +1 -0
- package/dist/core/EncodedVideoChunk.js +55 -0
- package/dist/core/EncodedVideoChunk.js.map +1 -0
- package/dist/core/VideoFrame.d.ts +61 -0
- package/dist/core/VideoFrame.d.ts.map +1 -0
- package/dist/core/VideoFrame.js +385 -0
- package/dist/core/VideoFrame.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +8 -0
- package/dist/core/index.js.map +1 -0
- package/dist/debug-h264.d.ts +5 -0
- package/dist/debug-h264.d.ts.map +1 -0
- package/dist/debug-h264.js +103 -0
- package/dist/debug-h264.js.map +1 -0
- package/dist/decoders/AudioDecoder.d.ts +57 -0
- package/dist/decoders/AudioDecoder.d.ts.map +1 -0
- package/dist/decoders/AudioDecoder.js +333 -0
- package/dist/decoders/AudioDecoder.js.map +1 -0
- package/dist/decoders/ImageDecoder.d.ts +111 -0
- package/dist/decoders/ImageDecoder.d.ts.map +1 -0
- package/dist/decoders/ImageDecoder.js +686 -0
- package/dist/decoders/ImageDecoder.js.map +1 -0
- package/dist/decoders/VideoDecoder.d.ts +70 -0
- package/dist/decoders/VideoDecoder.d.ts.map +1 -0
- package/dist/decoders/VideoDecoder.js +410 -0
- package/dist/decoders/VideoDecoder.js.map +1 -0
- package/dist/decoders/index.d.ts +8 -0
- package/dist/decoders/index.d.ts.map +1 -0
- package/dist/decoders/index.js +7 -0
- package/dist/decoders/index.js.map +1 -0
- package/dist/demos/demo-audio-opus.d.ts +5 -0
- package/dist/demos/demo-audio-opus.d.ts.map +1 -0
- package/dist/demos/demo-audio-opus.js +107 -0
- package/dist/demos/demo-audio-opus.js.map +1 -0
- package/dist/demos/demo-audio.d.ts +10 -0
- package/dist/demos/demo-audio.d.ts.map +1 -0
- package/dist/demos/demo-audio.js +135 -0
- package/dist/demos/demo-audio.js.map +1 -0
- package/dist/demos/demo-conversion.d.ts +13 -0
- package/dist/demos/demo-conversion.d.ts.map +1 -0
- package/dist/demos/demo-conversion.js +301 -0
- package/dist/demos/demo-conversion.js.map +1 -0
- package/dist/demos/demo-h264.d.ts +7 -0
- package/dist/demos/demo-h264.d.ts.map +1 -0
- package/dist/demos/demo-h264.js +134 -0
- package/dist/demos/demo-h264.js.map +1 -0
- package/dist/demos/demo-hwaccel-conversion.d.ts +8 -0
- package/dist/demos/demo-hwaccel-conversion.d.ts.map +1 -0
- package/dist/demos/demo-hwaccel-conversion.js +161 -0
- package/dist/demos/demo-hwaccel-conversion.js.map +1 -0
- package/dist/demos/demo-hwaccel.d.ts +7 -0
- package/dist/demos/demo-hwaccel.d.ts.map +1 -0
- package/dist/demos/demo-hwaccel.js +51 -0
- package/dist/demos/demo-hwaccel.js.map +1 -0
- package/dist/demos/demo-image.d.ts +12 -0
- package/dist/demos/demo-image.d.ts.map +1 -0
- package/dist/demos/demo-image.js +178 -0
- package/dist/demos/demo-image.js.map +1 -0
- package/dist/demos/demo-mediabunny.d.ts +7 -0
- package/dist/demos/demo-mediabunny.d.ts.map +1 -0
- package/dist/demos/demo-mediabunny.js +78 -0
- package/dist/demos/demo-mediabunny.js.map +1 -0
- package/dist/demos/demo-pipeline.d.ts +8 -0
- package/dist/demos/demo-pipeline.d.ts.map +1 -0
- package/dist/demos/demo-pipeline.js +83 -0
- package/dist/demos/demo-pipeline.js.map +1 -0
- package/dist/demos/demo-samples.d.ts +9 -0
- package/dist/demos/demo-samples.d.ts.map +1 -0
- package/dist/demos/demo-samples.js +413 -0
- package/dist/demos/demo-samples.js.map +1 -0
- package/dist/demos/demo-streaming.d.ts +8 -0
- package/dist/demos/demo-streaming.d.ts.map +1 -0
- package/dist/demos/demo-streaming.js +299 -0
- package/dist/demos/demo-streaming.js.map +1 -0
- package/dist/demos/demo-webcodecs.d.ts +8 -0
- package/dist/demos/demo-webcodecs.d.ts.map +1 -0
- package/dist/demos/demo-webcodecs.js +316 -0
- package/dist/demos/demo-webcodecs.js.map +1 -0
- package/dist/demos/demo.d.ts +10 -0
- package/dist/demos/demo.d.ts.map +1 -0
- package/dist/demos/demo.js +123 -0
- package/dist/demos/demo.js.map +1 -0
- package/dist/encoders/AudioEncoder.d.ts +69 -0
- package/dist/encoders/AudioEncoder.d.ts.map +1 -0
- package/dist/encoders/AudioEncoder.js +425 -0
- package/dist/encoders/AudioEncoder.js.map +1 -0
- package/dist/encoders/VideoEncoder.d.ts +80 -0
- package/dist/encoders/VideoEncoder.d.ts.map +1 -0
- package/dist/encoders/VideoEncoder.js +386 -0
- package/dist/encoders/VideoEncoder.js.map +1 -0
- package/dist/encoders/codecs/av1.d.ts +31 -0
- package/dist/encoders/codecs/av1.d.ts.map +1 -0
- package/dist/encoders/codecs/av1.js +66 -0
- package/dist/encoders/codecs/av1.js.map +1 -0
- package/dist/encoders/codecs/h264.d.ts +28 -0
- package/dist/encoders/codecs/h264.d.ts.map +1 -0
- package/dist/encoders/codecs/h264.js +95 -0
- package/dist/encoders/codecs/h264.js.map +1 -0
- package/dist/encoders/codecs/hevc.d.ts +28 -0
- package/dist/encoders/codecs/hevc.d.ts.map +1 -0
- package/dist/encoders/codecs/hevc.js +73 -0
- package/dist/encoders/codecs/hevc.js.map +1 -0
- package/dist/encoders/codecs/index.d.ts +19 -0
- package/dist/encoders/codecs/index.d.ts.map +1 -0
- package/dist/encoders/codecs/index.js +60 -0
- package/dist/encoders/codecs/index.js.map +1 -0
- package/dist/encoders/codecs/vp9.d.ts +29 -0
- package/dist/encoders/codecs/vp9.d.ts.map +1 -0
- package/dist/encoders/codecs/vp9.js +58 -0
- package/dist/encoders/codecs/vp9.js.map +1 -0
- package/dist/encoders/index.d.ts +8 -0
- package/dist/encoders/index.d.ts.map +1 -0
- package/dist/encoders/index.js +8 -0
- package/dist/encoders/index.js.map +1 -0
- package/dist/ffmpeg/FFmpegProcess.d.ts +111 -0
- package/dist/ffmpeg/FFmpegProcess.d.ts.map +1 -0
- package/dist/ffmpeg/FFmpegProcess.js +543 -0
- package/dist/ffmpeg/FFmpegProcess.js.map +1 -0
- package/dist/ffmpeg/audio-codecs.d.ts +59 -0
- package/dist/ffmpeg/audio-codecs.d.ts.map +1 -0
- package/dist/ffmpeg/audio-codecs.js +99 -0
- package/dist/ffmpeg/audio-codecs.js.map +1 -0
- package/dist/ffmpeg/formats.d.ts +42 -0
- package/dist/ffmpeg/formats.d.ts.map +1 -0
- package/dist/ffmpeg/formats.js +147 -0
- package/dist/ffmpeg/formats.js.map +1 -0
- package/dist/ffmpeg/index.d.ts +9 -0
- package/dist/ffmpeg/index.d.ts.map +1 -0
- package/dist/ffmpeg/index.js +13 -0
- package/dist/ffmpeg/index.js.map +1 -0
- package/dist/ffmpeg/parsers/annexb.d.ts +88 -0
- package/dist/ffmpeg/parsers/annexb.d.ts.map +1 -0
- package/dist/ffmpeg/parsers/annexb.js +201 -0
- package/dist/ffmpeg/parsers/annexb.js.map +1 -0
- package/dist/ffmpeg/parsers/index.d.ts +6 -0
- package/dist/ffmpeg/parsers/index.d.ts.map +1 -0
- package/dist/ffmpeg/parsers/index.js +8 -0
- package/dist/ffmpeg/parsers/index.js.map +1 -0
- package/dist/ffmpeg/parsers/ivf.d.ts +54 -0
- package/dist/ffmpeg/parsers/ivf.d.ts.map +1 -0
- package/dist/ffmpeg/parsers/ivf.js +109 -0
- package/dist/ffmpeg/parsers/ivf.js.map +1 -0
- package/dist/ffmpeg/types.d.ts +85 -0
- package/dist/ffmpeg/types.d.ts.map +1 -0
- package/dist/ffmpeg/types.js +8 -0
- package/dist/ffmpeg/types.js.map +1 -0
- package/dist/formats/audio-formats.d.ts +61 -0
- package/dist/formats/audio-formats.d.ts.map +1 -0
- package/dist/formats/audio-formats.js +113 -0
- package/dist/formats/audio-formats.js.map +1 -0
- package/dist/formats/color-space.d.ts +35 -0
- package/dist/formats/color-space.d.ts.map +1 -0
- package/dist/formats/color-space.js +62 -0
- package/dist/formats/color-space.js.map +1 -0
- package/dist/formats/conversions/frame-converter.d.ts +42 -0
- package/dist/formats/conversions/frame-converter.d.ts.map +1 -0
- package/dist/formats/conversions/frame-converter.js +244 -0
- package/dist/formats/conversions/frame-converter.js.map +1 -0
- package/dist/formats/conversions/index.d.ts +8 -0
- package/dist/formats/conversions/index.d.ts.map +1 -0
- package/dist/formats/conversions/index.js +10 -0
- package/dist/formats/conversions/index.js.map +1 -0
- package/dist/formats/index.d.ts +9 -0
- package/dist/formats/index.d.ts.map +1 -0
- package/dist/formats/index.js +14 -0
- package/dist/formats/index.js.map +1 -0
- package/dist/formats/parsers/index.d.ts +5 -0
- package/dist/formats/parsers/index.d.ts.map +1 -0
- package/dist/formats/parsers/index.js +5 -0
- package/dist/formats/parsers/index.js.map +1 -0
- package/dist/formats/parsers/webp.d.ts +16 -0
- package/dist/formats/parsers/webp.d.ts.map +1 -0
- package/dist/formats/parsers/webp.js +116 -0
- package/dist/formats/parsers/webp.js.map +1 -0
- package/dist/formats/pixel-formats.d.ts +41 -0
- package/dist/formats/pixel-formats.d.ts.map +1 -0
- package/dist/formats/pixel-formats.js +113 -0
- package/dist/formats/pixel-formats.js.map +1 -0
- package/dist/hardware/HardwareAcceleration.d.ts +6 -0
- package/dist/hardware/HardwareAcceleration.d.ts.map +1 -0
- package/dist/hardware/HardwareAcceleration.js +6 -0
- package/dist/hardware/HardwareAcceleration.js.map +1 -0
- package/dist/hardware/decoder-args.d.ts +25 -0
- package/dist/hardware/decoder-args.d.ts.map +1 -0
- package/dist/hardware/decoder-args.js +84 -0
- package/dist/hardware/decoder-args.js.map +1 -0
- package/dist/hardware/detection.d.ts +39 -0
- package/dist/hardware/detection.d.ts.map +1 -0
- package/dist/hardware/detection.js +178 -0
- package/dist/hardware/detection.js.map +1 -0
- package/dist/hardware/encoder-args.d.ts +38 -0
- package/dist/hardware/encoder-args.d.ts.map +1 -0
- package/dist/hardware/encoder-args.js +177 -0
- package/dist/hardware/encoder-args.js.map +1 -0
- package/dist/hardware/index.d.ts +12 -0
- package/dist/hardware/index.d.ts.map +1 -0
- package/dist/hardware/index.js +14 -0
- package/dist/hardware/index.js.map +1 -0
- package/dist/hardware/types.d.ts +29 -0
- package/dist/hardware/types.d.ts.map +1 -0
- package/dist/hardware/types.js +58 -0
- package/dist/hardware/types.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/mediabunny/FFmpegAudioDecoder.d.ts +37 -0
- package/dist/mediabunny/FFmpegAudioDecoder.d.ts.map +1 -0
- package/dist/mediabunny/FFmpegAudioDecoder.js +254 -0
- package/dist/mediabunny/FFmpegAudioDecoder.js.map +1 -0
- package/dist/mediabunny/FFmpegAudioEncoder.d.ts +77 -0
- package/dist/mediabunny/FFmpegAudioEncoder.d.ts.map +1 -0
- package/dist/mediabunny/FFmpegAudioEncoder.js +484 -0
- package/dist/mediabunny/FFmpegAudioEncoder.js.map +1 -0
- package/dist/mediabunny/FFmpegVideoDecoder.d.ts +58 -0
- package/dist/mediabunny/FFmpegVideoDecoder.d.ts.map +1 -0
- package/dist/mediabunny/FFmpegVideoDecoder.js +366 -0
- package/dist/mediabunny/FFmpegVideoDecoder.js.map +1 -0
- package/dist/mediabunny/FFmpegVideoEncoder.d.ts +77 -0
- package/dist/mediabunny/FFmpegVideoEncoder.d.ts.map +1 -0
- package/dist/mediabunny/FFmpegVideoEncoder.js +551 -0
- package/dist/mediabunny/FFmpegVideoEncoder.js.map +1 -0
- package/dist/mediabunny/index.d.ts +21 -0
- package/dist/mediabunny/index.d.ts.map +1 -0
- package/dist/mediabunny/index.js +33 -0
- package/dist/mediabunny/index.js.map +1 -0
- package/dist/polyfill.d.ts +27 -0
- package/dist/polyfill.d.ts.map +1 -0
- package/dist/polyfill.js +78 -0
- package/dist/polyfill.js.map +1 -0
- package/dist/polyfills/CanvasRenderingContext2DPolyfill.d.ts +72 -0
- package/dist/polyfills/CanvasRenderingContext2DPolyfill.d.ts.map +1 -0
- package/dist/polyfills/CanvasRenderingContext2DPolyfill.js +293 -0
- package/dist/polyfills/CanvasRenderingContext2DPolyfill.js.map +1 -0
- package/dist/polyfills/ImageDataPolyfill.d.ts +12 -0
- package/dist/polyfills/ImageDataPolyfill.d.ts.map +1 -0
- package/dist/polyfills/ImageDataPolyfill.js +22 -0
- package/dist/polyfills/ImageDataPolyfill.js.map +1 -0
- package/dist/polyfills/OffscreenCanvas.d.ts +15 -0
- package/dist/polyfills/OffscreenCanvas.d.ts.map +1 -0
- package/dist/polyfills/OffscreenCanvas.js +35 -0
- package/dist/polyfills/OffscreenCanvas.js.map +1 -0
- package/dist/polyfills/OffscreenCanvasPolyfill.d.ts +16 -0
- package/dist/polyfills/OffscreenCanvasPolyfill.d.ts.map +1 -0
- package/dist/polyfills/OffscreenCanvasPolyfill.js +46 -0
- package/dist/polyfills/OffscreenCanvasPolyfill.js.map +1 -0
- package/dist/polyfills/VideoFramePolyfill.d.ts +44 -0
- package/dist/polyfills/VideoFramePolyfill.d.ts.map +1 -0
- package/dist/polyfills/VideoFramePolyfill.js +98 -0
- package/dist/polyfills/VideoFramePolyfill.js.map +1 -0
- package/dist/tools/generate-capabilities-profile.d.ts +2 -0
- package/dist/tools/generate-capabilities-profile.d.ts.map +1 -0
- package/dist/tools/generate-capabilities-profile.js +63 -0
- package/dist/tools/generate-capabilities-profile.js.map +1 -0
- package/dist/types/audio.d.ts +26 -0
- package/dist/types/audio.d.ts.map +1 -0
- package/dist/types/audio.js +5 -0
- package/dist/types/audio.js.map +1 -0
- package/dist/types/common.d.ts +68 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +70 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/geometry.d.ts +35 -0
- package/dist/types/geometry.d.ts.map +1 -0
- package/dist/types/geometry.js +34 -0
- package/dist/types/geometry.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/video.d.ts +43 -0
- package/dist/types/video.d.ts.map +1 -0
- package/dist/types/video.js +5 -0
- package/dist/types/video.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/aac.d.ts +26 -0
- package/dist/utils/aac.d.ts.map +1 -0
- package/dist/utils/aac.js +129 -0
- package/dist/utils/aac.js.map +1 -0
- package/dist/utils/avc.d.ts +39 -0
- package/dist/utils/avc.d.ts.map +1 -0
- package/dist/utils/avc.js +225 -0
- package/dist/utils/avc.js.map +1 -0
- package/dist/utils/buffer.d.ts +25 -0
- package/dist/utils/buffer.d.ts.map +1 -0
- package/dist/utils/buffer.js +73 -0
- package/dist/utils/buffer.js.map +1 -0
- package/dist/utils/hevc.d.ts +27 -0
- package/dist/utils/hevc.d.ts.map +1 -0
- package/dist/utils/hevc.js +239 -0
- package/dist/utils/hevc.js.map +1 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +16 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +55 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +110 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/type-guards.d.ts +50 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +49 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/dist/utils/validation.d.ts +32 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +66 -0
- package/dist/utils/validation.js.map +1 -0
- package/docs/api.md +506 -0
- package/docs/codecs.md +382 -0
- package/docs/configuration.md +442 -0
- package/examples/README.md +100 -0
- package/examples/audio-encoding.ts +85 -0
- package/examples/hardware-decoding.ts +245 -0
- package/examples/hardware-encoding.ts +231 -0
- package/examples/image-decoding.ts +145 -0
- package/examples/streaming.ts +151 -0
- package/examples/transparent-video.ts +162 -0
- package/examples/video-decoding.ts +107 -0
- package/examples/video-encoding.ts +93 -0
- package/package.json +105 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frame parsers for different container formats
|
|
3
|
+
*/
|
|
4
|
+
// IVF parser (VP8, VP9, AV1)
|
|
5
|
+
export { IVF_HEADER_SIZE, IVF_FRAME_HEADER_SIZE, IVF_SIGNATURE, createIvfParserState, validateIvfSignature, parseIvfFrames, isVP9KeyFrame, isVP8KeyFrame, isAV1KeyFrame, } from './ivf.js';
|
|
6
|
+
// Annex B parser (H.264, HEVC)
|
|
7
|
+
export { H264_NAL_TYPES, HEVC_NAL_TYPES, createAnnexBParserState, getNalType, isAudNal, findStartCode, findAudPositions, isH264KeyFrame, isHEVCKeyFrame, isKeyFrame, parseAnnexBFrames, flushAnnexBParser, } from './annexb.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ffmpeg/parsers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,6BAA6B;AAC7B,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,GAEd,MAAM,UAAU,CAAC;AAElB,+BAA+B;AAC/B,OAAO,EACL,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,UAAU,EACV,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,iBAAiB,GAElB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IVF container parser
|
|
3
|
+
*
|
|
4
|
+
* IVF format (used for VP8, VP9, AV1):
|
|
5
|
+
* - 32-byte file header
|
|
6
|
+
* - Per frame: 4-byte size (LE) + 8-byte timestamp (LE) + frame data
|
|
7
|
+
*/
|
|
8
|
+
import type { EncodedFrameData } from '../types.js';
|
|
9
|
+
/** IVF file header size */
|
|
10
|
+
export declare const IVF_HEADER_SIZE = 32;
|
|
11
|
+
/** IVF frame header size (size + timestamp) */
|
|
12
|
+
export declare const IVF_FRAME_HEADER_SIZE = 12;
|
|
13
|
+
/** IVF file signature */
|
|
14
|
+
export declare const IVF_SIGNATURE = "DKIF";
|
|
15
|
+
/**
|
|
16
|
+
* IVF parser state
|
|
17
|
+
*/
|
|
18
|
+
export interface IvfParserState {
|
|
19
|
+
headerParsed: boolean;
|
|
20
|
+
buffer: Buffer;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create initial IVF parser state
|
|
24
|
+
*/
|
|
25
|
+
export declare function createIvfParserState(): IvfParserState;
|
|
26
|
+
/**
|
|
27
|
+
* Validate IVF file signature
|
|
28
|
+
*/
|
|
29
|
+
export declare function validateIvfSignature(data: Buffer): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Parse IVF frames from accumulated data
|
|
32
|
+
*
|
|
33
|
+
* @param state - Parser state (mutated)
|
|
34
|
+
* @param newData - New data to append
|
|
35
|
+
* @param isKeyFrame - Function to determine if frame is a keyframe
|
|
36
|
+
* @returns Array of parsed frames
|
|
37
|
+
*/
|
|
38
|
+
export declare function parseIvfFrames(state: IvfParserState, newData: Buffer, isKeyFrame: (data: Buffer) => boolean): EncodedFrameData[];
|
|
39
|
+
/**
|
|
40
|
+
* Check if VP9 frame is a keyframe
|
|
41
|
+
* VP9: frame_type bit in frame header (0 = keyframe)
|
|
42
|
+
*/
|
|
43
|
+
export declare function isVP9KeyFrame(data: Buffer): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Check if VP8 frame is a keyframe
|
|
46
|
+
* VP8: keyframe indicated by bit in frame tag
|
|
47
|
+
*/
|
|
48
|
+
export declare function isVP8KeyFrame(data: Buffer): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Check if AV1 frame is a keyframe
|
|
51
|
+
* Simplified check - real implementation would parse OBU headers
|
|
52
|
+
*/
|
|
53
|
+
export declare function isAV1KeyFrame(data: Buffer): boolean;
|
|
54
|
+
//# sourceMappingURL=ivf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ivf.d.ts","sourceRoot":"","sources":["../../../src/ffmpeg/parsers/ivf.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,2BAA2B;AAC3B,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,+CAA+C;AAC/C,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,yBAAyB;AACzB,eAAO,MAAM,aAAa,SAAS,CAAC;AAEpC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAKrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG1D;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GACpC,gBAAgB,EAAE,CA2CpB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKnD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKnD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOnD"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IVF container parser
|
|
3
|
+
*
|
|
4
|
+
* IVF format (used for VP8, VP9, AV1):
|
|
5
|
+
* - 32-byte file header
|
|
6
|
+
* - Per frame: 4-byte size (LE) + 8-byte timestamp (LE) + frame data
|
|
7
|
+
*/
|
|
8
|
+
/** IVF file header size */
|
|
9
|
+
export const IVF_HEADER_SIZE = 32;
|
|
10
|
+
/** IVF frame header size (size + timestamp) */
|
|
11
|
+
export const IVF_FRAME_HEADER_SIZE = 12;
|
|
12
|
+
/** IVF file signature */
|
|
13
|
+
export const IVF_SIGNATURE = 'DKIF';
|
|
14
|
+
/**
|
|
15
|
+
* Create initial IVF parser state
|
|
16
|
+
*/
|
|
17
|
+
export function createIvfParserState() {
|
|
18
|
+
return {
|
|
19
|
+
headerParsed: false,
|
|
20
|
+
buffer: Buffer.alloc(0),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Validate IVF file signature
|
|
25
|
+
*/
|
|
26
|
+
export function validateIvfSignature(data) {
|
|
27
|
+
if (data.length < 4)
|
|
28
|
+
return false;
|
|
29
|
+
return data.subarray(0, 4).toString() === IVF_SIGNATURE;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Parse IVF frames from accumulated data
|
|
33
|
+
*
|
|
34
|
+
* @param state - Parser state (mutated)
|
|
35
|
+
* @param newData - New data to append
|
|
36
|
+
* @param isKeyFrame - Function to determine if frame is a keyframe
|
|
37
|
+
* @returns Array of parsed frames
|
|
38
|
+
*/
|
|
39
|
+
export function parseIvfFrames(state, newData, isKeyFrame) {
|
|
40
|
+
const frames = [];
|
|
41
|
+
// Append new data
|
|
42
|
+
state.buffer = Buffer.concat([state.buffer, newData]);
|
|
43
|
+
// Skip 32-byte IVF file header
|
|
44
|
+
if (!state.headerParsed) {
|
|
45
|
+
if (state.buffer.length < IVF_HEADER_SIZE) {
|
|
46
|
+
return frames; // Wait for more data
|
|
47
|
+
}
|
|
48
|
+
// Verify IVF signature "DKIF"
|
|
49
|
+
if (!validateIvfSignature(state.buffer)) {
|
|
50
|
+
const signature = state.buffer.subarray(0, 4).toString();
|
|
51
|
+
throw new Error(`Invalid IVF signature: ${signature}`);
|
|
52
|
+
}
|
|
53
|
+
state.buffer = state.buffer.subarray(IVF_HEADER_SIZE);
|
|
54
|
+
state.headerParsed = true;
|
|
55
|
+
}
|
|
56
|
+
// Parse frames: 4-byte size + 8-byte timestamp + data
|
|
57
|
+
while (state.buffer.length >= IVF_FRAME_HEADER_SIZE) {
|
|
58
|
+
const frameSize = state.buffer.readUInt32LE(0);
|
|
59
|
+
const timestamp = Number(state.buffer.readBigUInt64LE(4));
|
|
60
|
+
const totalFrameSize = IVF_FRAME_HEADER_SIZE + frameSize;
|
|
61
|
+
if (state.buffer.length < totalFrameSize) {
|
|
62
|
+
break; // Wait for more data
|
|
63
|
+
}
|
|
64
|
+
const frameData = state.buffer.subarray(IVF_FRAME_HEADER_SIZE, totalFrameSize);
|
|
65
|
+
state.buffer = state.buffer.subarray(totalFrameSize);
|
|
66
|
+
frames.push({
|
|
67
|
+
data: Buffer.from(frameData), // Copy the data
|
|
68
|
+
timestamp,
|
|
69
|
+
keyFrame: isKeyFrame(frameData),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return frames;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Check if VP9 frame is a keyframe
|
|
76
|
+
* VP9: frame_type bit in frame header (0 = keyframe)
|
|
77
|
+
*/
|
|
78
|
+
export function isVP9KeyFrame(data) {
|
|
79
|
+
if (data.length === 0)
|
|
80
|
+
return false;
|
|
81
|
+
// VP9: check frame_type bit (bit 1 of first byte)
|
|
82
|
+
// frame_type = 0 means keyframe
|
|
83
|
+
return (data[0] & 0x02) === 0;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check if VP8 frame is a keyframe
|
|
87
|
+
* VP8: keyframe indicated by bit in frame tag
|
|
88
|
+
*/
|
|
89
|
+
export function isVP8KeyFrame(data) {
|
|
90
|
+
if (data.length === 0)
|
|
91
|
+
return false;
|
|
92
|
+
// VP8: keyframe has specific frame tag
|
|
93
|
+
// First bit of first byte indicates frame type (0 = key)
|
|
94
|
+
return (data[0] & 0x01) === 0;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Check if AV1 frame is a keyframe
|
|
98
|
+
* Simplified check - real implementation would parse OBU headers
|
|
99
|
+
*/
|
|
100
|
+
export function isAV1KeyFrame(data) {
|
|
101
|
+
if (data.length < 2)
|
|
102
|
+
return false;
|
|
103
|
+
// AV1 OBU header parsing - simplified
|
|
104
|
+
// This is a basic heuristic; full parsing would check OBU types
|
|
105
|
+
const obuType = (data[0] >> 3) & 0x0f;
|
|
106
|
+
// OBU_SEQUENCE_HEADER (type 1) usually indicates keyframe area
|
|
107
|
+
return obuType === 1;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=ivf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ivf.js","sourceRoot":"","sources":["../../../src/ffmpeg/parsers/ivf.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FFmpeg configuration types
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* FFmpeg process configuration
|
|
6
|
+
*/
|
|
7
|
+
export interface FFmpegConfig {
|
|
8
|
+
input: FFmpegInputConfig;
|
|
9
|
+
output: FFmpegOutputConfig;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* FFmpeg input configuration
|
|
13
|
+
*/
|
|
14
|
+
export interface FFmpegInputConfig {
|
|
15
|
+
format: string;
|
|
16
|
+
codec?: string;
|
|
17
|
+
width?: number;
|
|
18
|
+
height?: number;
|
|
19
|
+
framerate?: number;
|
|
20
|
+
pixelFormat?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* FFmpeg output configuration
|
|
24
|
+
*/
|
|
25
|
+
export interface FFmpegOutputConfig {
|
|
26
|
+
format: string;
|
|
27
|
+
codec?: string;
|
|
28
|
+
width?: number;
|
|
29
|
+
height?: number;
|
|
30
|
+
framerate?: number;
|
|
31
|
+
pixelFormat?: string;
|
|
32
|
+
bitrate?: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Encoded frame data emitted by parsers
|
|
36
|
+
*/
|
|
37
|
+
export interface EncodedFrameData {
|
|
38
|
+
data: Buffer;
|
|
39
|
+
timestamp: number;
|
|
40
|
+
keyFrame: boolean;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Decoder configuration for FFmpegProcess
|
|
44
|
+
*/
|
|
45
|
+
export interface DecoderConfig {
|
|
46
|
+
codec: string;
|
|
47
|
+
width: number;
|
|
48
|
+
height: number;
|
|
49
|
+
outputPixelFormat?: string;
|
|
50
|
+
hardwareDecoderArgs?: string[];
|
|
51
|
+
hardwareDownloadFilter?: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Bitrate mode for encoding
|
|
55
|
+
* - 'constant': Constant bitrate (CBR) - predictable file size, may vary quality
|
|
56
|
+
* - 'variable': Variable bitrate (VBR) - better quality, less predictable size
|
|
57
|
+
* - 'quantizer': Fixed quality mode (CRF/CQ) - consistent quality, variable size
|
|
58
|
+
*/
|
|
59
|
+
export type BitrateMode = 'constant' | 'variable' | 'quantizer';
|
|
60
|
+
/**
|
|
61
|
+
* Alpha channel handling mode
|
|
62
|
+
* - 'discard': Drop alpha channel (default, works with all codecs)
|
|
63
|
+
* - 'keep': Preserve alpha channel (only VP9 and AV1 support this)
|
|
64
|
+
*/
|
|
65
|
+
export type AlphaOption = 'discard' | 'keep';
|
|
66
|
+
/**
|
|
67
|
+
* Encoder configuration for FFmpegProcess
|
|
68
|
+
*/
|
|
69
|
+
export interface EncoderConfig {
|
|
70
|
+
codec: string;
|
|
71
|
+
width: number;
|
|
72
|
+
height: number;
|
|
73
|
+
inputPixelFormat?: string;
|
|
74
|
+
framerate?: number;
|
|
75
|
+
bitrate?: number;
|
|
76
|
+
bitrateMode?: BitrateMode;
|
|
77
|
+
latencyMode?: 'quality' | 'realtime';
|
|
78
|
+
alpha?: AlphaOption;
|
|
79
|
+
hardwareEncoderArgs?: string[];
|
|
80
|
+
}
|
|
81
|
+
/** Default timeout for graceful shutdown (ms) */
|
|
82
|
+
export declare const DEFAULT_SHUTDOWN_TIMEOUT = 5000;
|
|
83
|
+
/** Default timeout for flush operations (ms) */
|
|
84
|
+
export declare const DEFAULT_FLUSH_TIMEOUT = 30000;
|
|
85
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ffmpeg/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,kBAAkB,CAAC;CAC5B;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;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,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,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FFmpeg configuration types
|
|
3
|
+
*/
|
|
4
|
+
/** Default timeout for graceful shutdown (ms) */
|
|
5
|
+
export const DEFAULT_SHUTDOWN_TIMEOUT = 5000;
|
|
6
|
+
/** Default timeout for flush operations (ms) */
|
|
7
|
+
export const DEFAULT_FLUSH_TIMEOUT = 30000;
|
|
8
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ffmpeg/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuFH,iDAAiD;AACjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C,gDAAgD;AAChD,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio format utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for working with audio sample formats,
|
|
5
|
+
* including conversion between different formats.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Audio sample formats supported by WebCodecs
|
|
9
|
+
* - Interleaved formats: samples for all channels are interleaved
|
|
10
|
+
* - Planar formats: each channel has its own plane
|
|
11
|
+
*/
|
|
12
|
+
export type AudioSampleFormat = 'u8' | 's16' | 's32' | 'f32' | 'u8-planar' | 's16-planar' | 's32-planar' | 'f32-planar';
|
|
13
|
+
/**
|
|
14
|
+
* Bytes per sample for each format
|
|
15
|
+
*/
|
|
16
|
+
export declare const BYTES_PER_SAMPLE: Record<AudioSampleFormat, number>;
|
|
17
|
+
/**
|
|
18
|
+
* Check if format is planar
|
|
19
|
+
*/
|
|
20
|
+
export declare function isPlanarFormat(format: AudioSampleFormat): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Check if format is interleaved
|
|
23
|
+
*/
|
|
24
|
+
export declare function isInterleavedFormat(format: AudioSampleFormat): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Get the base format type (without -planar suffix)
|
|
27
|
+
*/
|
|
28
|
+
export declare function getBaseFormat(format: AudioSampleFormat): 'u8' | 's16' | 's32' | 'f32';
|
|
29
|
+
/**
|
|
30
|
+
* Get the planar version of a format
|
|
31
|
+
*/
|
|
32
|
+
export declare function toPlanarFormat(format: AudioSampleFormat): AudioSampleFormat;
|
|
33
|
+
/**
|
|
34
|
+
* Get the interleaved version of a format
|
|
35
|
+
*/
|
|
36
|
+
export declare function toInterleavedFormat(format: AudioSampleFormat): AudioSampleFormat;
|
|
37
|
+
/**
|
|
38
|
+
* Calculate the size in bytes for audio data
|
|
39
|
+
*/
|
|
40
|
+
export declare function calculateAudioDataSize(format: AudioSampleFormat, numberOfFrames: number, numberOfChannels: number): number;
|
|
41
|
+
/**
|
|
42
|
+
* Calculate the allocation size for a single plane
|
|
43
|
+
*/
|
|
44
|
+
export declare function calculatePlaneSize(format: AudioSampleFormat, numberOfFrames: number, numberOfChannels: number): number;
|
|
45
|
+
/**
|
|
46
|
+
* Get the number of planes for a format
|
|
47
|
+
*/
|
|
48
|
+
export declare function getNumberOfPlanes(format: AudioSampleFormat, numberOfChannels: number): number;
|
|
49
|
+
/**
|
|
50
|
+
* FFmpeg audio format mapping
|
|
51
|
+
*/
|
|
52
|
+
export declare const FFMPEG_AUDIO_FORMAT_MAP: Record<AudioSampleFormat, string>;
|
|
53
|
+
/**
|
|
54
|
+
* Convert audio sample format to FFmpeg format string
|
|
55
|
+
*/
|
|
56
|
+
export declare function audioFormatToFFmpeg(format: AudioSampleFormat): string;
|
|
57
|
+
/**
|
|
58
|
+
* Convert FFmpeg format to audio sample format
|
|
59
|
+
*/
|
|
60
|
+
export declare function ffmpegToAudioFormat(ffmpegFormat: string): AudioSampleFormat | null;
|
|
61
|
+
//# sourceMappingURL=audio-formats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-formats.d.ts","sourceRoot":"","sources":["../../src/formats/audio-formats.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GACzB,IAAI,GACJ,KAAK,GACL,KAAK,GACL,KAAK,GACL,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,YAAY,CAAC;AAEjB;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAS9D,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAEjE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAEtE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAErF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,CAG3E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,CAGhF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,iBAAiB,EACzB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,iBAAiB,EACzB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAMR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAE7F;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CASrE,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAErE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAalF"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio format utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for working with audio sample formats,
|
|
5
|
+
* including conversion between different formats.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Bytes per sample for each format
|
|
9
|
+
*/
|
|
10
|
+
export const BYTES_PER_SAMPLE = {
|
|
11
|
+
'u8': 1,
|
|
12
|
+
's16': 2,
|
|
13
|
+
's32': 4,
|
|
14
|
+
'f32': 4,
|
|
15
|
+
'u8-planar': 1,
|
|
16
|
+
's16-planar': 2,
|
|
17
|
+
's32-planar': 4,
|
|
18
|
+
'f32-planar': 4,
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Check if format is planar
|
|
22
|
+
*/
|
|
23
|
+
export function isPlanarFormat(format) {
|
|
24
|
+
return format.endsWith('-planar');
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Check if format is interleaved
|
|
28
|
+
*/
|
|
29
|
+
export function isInterleavedFormat(format) {
|
|
30
|
+
return !format.endsWith('-planar');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get the base format type (without -planar suffix)
|
|
34
|
+
*/
|
|
35
|
+
export function getBaseFormat(format) {
|
|
36
|
+
return format.replace('-planar', '');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get the planar version of a format
|
|
40
|
+
*/
|
|
41
|
+
export function toPlanarFormat(format) {
|
|
42
|
+
if (isPlanarFormat(format))
|
|
43
|
+
return format;
|
|
44
|
+
return `${format}-planar`;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get the interleaved version of a format
|
|
48
|
+
*/
|
|
49
|
+
export function toInterleavedFormat(format) {
|
|
50
|
+
if (isInterleavedFormat(format))
|
|
51
|
+
return format;
|
|
52
|
+
return format.replace('-planar', '');
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Calculate the size in bytes for audio data
|
|
56
|
+
*/
|
|
57
|
+
export function calculateAudioDataSize(format, numberOfFrames, numberOfChannels) {
|
|
58
|
+
const bytesPerSample = BYTES_PER_SAMPLE[format];
|
|
59
|
+
return bytesPerSample * numberOfFrames * numberOfChannels;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Calculate the allocation size for a single plane
|
|
63
|
+
*/
|
|
64
|
+
export function calculatePlaneSize(format, numberOfFrames, numberOfChannels) {
|
|
65
|
+
const bytesPerSample = BYTES_PER_SAMPLE[format];
|
|
66
|
+
if (isPlanarFormat(format)) {
|
|
67
|
+
return bytesPerSample * numberOfFrames;
|
|
68
|
+
}
|
|
69
|
+
return bytesPerSample * numberOfFrames * numberOfChannels;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get the number of planes for a format
|
|
73
|
+
*/
|
|
74
|
+
export function getNumberOfPlanes(format, numberOfChannels) {
|
|
75
|
+
return isPlanarFormat(format) ? numberOfChannels : 1;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* FFmpeg audio format mapping
|
|
79
|
+
*/
|
|
80
|
+
export const FFMPEG_AUDIO_FORMAT_MAP = {
|
|
81
|
+
'u8': 'u8',
|
|
82
|
+
's16': 's16le',
|
|
83
|
+
's32': 's32le',
|
|
84
|
+
'f32': 'f32le',
|
|
85
|
+
'u8-planar': 'u8p',
|
|
86
|
+
's16-planar': 's16p',
|
|
87
|
+
's32-planar': 's32p',
|
|
88
|
+
'f32-planar': 'flt',
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Convert audio sample format to FFmpeg format string
|
|
92
|
+
*/
|
|
93
|
+
export function audioFormatToFFmpeg(format) {
|
|
94
|
+
return FFMPEG_AUDIO_FORMAT_MAP[format] || format;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Convert FFmpeg format to audio sample format
|
|
98
|
+
*/
|
|
99
|
+
export function ffmpegToAudioFormat(ffmpegFormat) {
|
|
100
|
+
const reverseMap = {
|
|
101
|
+
'u8': 'u8',
|
|
102
|
+
's16le': 's16',
|
|
103
|
+
's32le': 's32',
|
|
104
|
+
'f32le': 'f32',
|
|
105
|
+
'flt': 'f32',
|
|
106
|
+
'fltp': 'f32-planar',
|
|
107
|
+
'u8p': 'u8-planar',
|
|
108
|
+
's16p': 's16-planar',
|
|
109
|
+
's32p': 's32-planar',
|
|
110
|
+
};
|
|
111
|
+
return reverseMap[ffmpegFormat] || null;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=audio-formats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-formats.js","sourceRoot":"","sources":["../../src/formats/audio-formats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Color space conversion utilities
|
|
3
|
+
* Provides YUV <-> RGB conversions using BT.709 coefficients
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Convert RGBA pixel to YUV (BT.709)
|
|
7
|
+
* @returns [Y, U, V] values in range 0-255
|
|
8
|
+
*/
|
|
9
|
+
export declare function rgbaToYuv(r: number, g: number, b: number): [number, number, number];
|
|
10
|
+
/**
|
|
11
|
+
* Convert YUV to RGBA (BT.709)
|
|
12
|
+
* @returns [R, G, B, A] values in range 0-255
|
|
13
|
+
*/
|
|
14
|
+
export declare function yuvToRgba(y: number, u: number, v: number): [number, number, number, number];
|
|
15
|
+
/**
|
|
16
|
+
* Video color space initialization options
|
|
17
|
+
*/
|
|
18
|
+
export interface VideoColorSpaceInit {
|
|
19
|
+
primaries?: 'bt709' | 'bt470bg' | 'smpte170m' | 'bt2020' | 'smpte432';
|
|
20
|
+
transfer?: 'bt709' | 'smpte170m' | 'iec61966-2-1' | 'linear' | 'pq' | 'hlg';
|
|
21
|
+
matrix?: 'rgb' | 'bt709' | 'bt470bg' | 'smpte170m' | 'bt2020-ncl';
|
|
22
|
+
fullRange?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* VideoColorSpace - describes the color space of video content
|
|
26
|
+
*/
|
|
27
|
+
export declare class VideoColorSpace {
|
|
28
|
+
readonly primaries: string | null;
|
|
29
|
+
readonly transfer: string | null;
|
|
30
|
+
readonly matrix: string | null;
|
|
31
|
+
readonly fullRange: boolean | null;
|
|
32
|
+
constructor(init?: VideoColorSpaceInit);
|
|
33
|
+
toJSON(): VideoColorSpaceInit;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=color-space.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-space.d.ts","sourceRoot":"","sources":["../../src/formats/color-space.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAUnF;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAgB3F;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;IACtE,QAAQ,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,cAAc,GAAG,QAAQ,GAAG,IAAI,GAAG,KAAK,CAAC;IAC5E,MAAM,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;IAClE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;gBAEvB,IAAI,CAAC,EAAE,mBAAmB;IAOtC,MAAM,IAAI,mBAAmB;CAQ9B"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Color space conversion utilities
|
|
3
|
+
* Provides YUV <-> RGB conversions using BT.709 coefficients
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Convert RGBA pixel to YUV (BT.709)
|
|
7
|
+
* @returns [Y, U, V] values in range 0-255
|
|
8
|
+
*/
|
|
9
|
+
export function rgbaToYuv(r, g, b) {
|
|
10
|
+
// BT.709 coefficients
|
|
11
|
+
const y = 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
12
|
+
const u = -0.1146 * r - 0.3854 * g + 0.5 * b + 128;
|
|
13
|
+
const v = 0.5 * r - 0.4542 * g - 0.0458 * b + 128;
|
|
14
|
+
return [
|
|
15
|
+
Math.max(0, Math.min(255, Math.round(y))),
|
|
16
|
+
Math.max(0, Math.min(255, Math.round(u))),
|
|
17
|
+
Math.max(0, Math.min(255, Math.round(v))),
|
|
18
|
+
];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Convert YUV to RGBA (BT.709)
|
|
22
|
+
* @returns [R, G, B, A] values in range 0-255
|
|
23
|
+
*/
|
|
24
|
+
export function yuvToRgba(y, u, v) {
|
|
25
|
+
// BT.709 inverse coefficients
|
|
26
|
+
const c = y;
|
|
27
|
+
const d = u - 128;
|
|
28
|
+
const e = v - 128;
|
|
29
|
+
const r = c + 1.5748 * e;
|
|
30
|
+
const g = c - 0.1873 * d - 0.4681 * e;
|
|
31
|
+
const b = c + 1.8556 * d;
|
|
32
|
+
return [
|
|
33
|
+
Math.max(0, Math.min(255, Math.round(r))),
|
|
34
|
+
Math.max(0, Math.min(255, Math.round(g))),
|
|
35
|
+
Math.max(0, Math.min(255, Math.round(b))),
|
|
36
|
+
255,
|
|
37
|
+
];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* VideoColorSpace - describes the color space of video content
|
|
41
|
+
*/
|
|
42
|
+
export class VideoColorSpace {
|
|
43
|
+
primaries;
|
|
44
|
+
transfer;
|
|
45
|
+
matrix;
|
|
46
|
+
fullRange;
|
|
47
|
+
constructor(init) {
|
|
48
|
+
this.primaries = init?.primaries ?? null;
|
|
49
|
+
this.transfer = init?.transfer ?? null;
|
|
50
|
+
this.matrix = init?.matrix ?? null;
|
|
51
|
+
this.fullRange = init?.fullRange ?? null;
|
|
52
|
+
}
|
|
53
|
+
toJSON() {
|
|
54
|
+
return {
|
|
55
|
+
primaries: this.primaries,
|
|
56
|
+
transfer: this.transfer,
|
|
57
|
+
matrix: this.matrix,
|
|
58
|
+
fullRange: this.fullRange ?? undefined,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=color-space.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-space.js","sourceRoot":"","sources":["../../src/formats/color-space.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IACvD,sBAAsB;IACtB,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC;IAClD,OAAO;QACL,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IACvD,8BAA8B;IAC9B,MAAM,CAAC,GAAG,CAAC,CAAC;IACZ,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAClB,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAElB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IACzB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IAEzB,OAAO;QACL,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,GAAG;KACJ,CAAC;AACJ,CAAC;AAYD;;GAEG;AACH,MAAM,OAAO,eAAe;IACjB,SAAS,CAAgB;IACzB,QAAQ,CAAgB;IACxB,MAAM,CAAgB;IACtB,SAAS,CAAiB;IAEnC,YAAY,IAA0B;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC;IAC3C,CAAC;IAED,MAAM;QACJ,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAA6C;YAC7D,QAAQ,EAAE,IAAI,CAAC,QAA2C;YAC1D,MAAM,EAAE,IAAI,CAAC,MAAuC;YACpD,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;SACvC,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frame format conversion utilities
|
|
3
|
+
*
|
|
4
|
+
* Standalone functions for converting video frame data between pixel formats.
|
|
5
|
+
* These functions operate on raw pixel buffers without requiring a VideoFrame instance.
|
|
6
|
+
*/
|
|
7
|
+
import { type VideoPixelFormat } from '../pixel-formats.js';
|
|
8
|
+
export type { VideoPixelFormat };
|
|
9
|
+
/**
|
|
10
|
+
* Frame buffer descriptor
|
|
11
|
+
*/
|
|
12
|
+
export interface FrameBuffer {
|
|
13
|
+
data: Uint8Array;
|
|
14
|
+
format: VideoPixelFormat;
|
|
15
|
+
width: number;
|
|
16
|
+
height: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get UV values at a specific position in a YUV frame
|
|
20
|
+
*/
|
|
21
|
+
export declare function getUvAt(data: Uint8Array, format: VideoPixelFormat, width: number, height: number, x: number, y: number): [number, number];
|
|
22
|
+
/**
|
|
23
|
+
* Get the byte offset for a plane in a frame buffer
|
|
24
|
+
*/
|
|
25
|
+
export declare function getPlaneOffset(format: VideoPixelFormat, width: number, height: number, planeIndex: number): number;
|
|
26
|
+
/**
|
|
27
|
+
* Convert RGB to RGB with potential channel swap (RGBA <-> BGRA)
|
|
28
|
+
*/
|
|
29
|
+
export declare function convertRgbToRgb(src: FrameBuffer, dest: Uint8Array, destFormat: VideoPixelFormat, srcX: number, srcY: number, srcW: number, srcH: number): void;
|
|
30
|
+
/**
|
|
31
|
+
* Convert YUV to RGB format
|
|
32
|
+
*/
|
|
33
|
+
export declare function convertYuvToRgb(src: FrameBuffer, dest: Uint8Array, destFormat: VideoPixelFormat, srcX: number, srcY: number, srcW: number, srcH: number): void;
|
|
34
|
+
/**
|
|
35
|
+
* Convert RGB to YUV format
|
|
36
|
+
*/
|
|
37
|
+
export declare function convertRgbToYuv(src: FrameBuffer, dest: Uint8Array, destFormat: VideoPixelFormat, srcX: number, srcY: number, srcW: number, srcH: number): void;
|
|
38
|
+
/**
|
|
39
|
+
* Convert between any two pixel formats
|
|
40
|
+
*/
|
|
41
|
+
export declare function convertFrameFormat(src: FrameBuffer, dest: Uint8Array, destFormat: VideoPixelFormat, srcX?: number, srcY?: number, srcW?: number, srcH?: number): void;
|
|
42
|
+
//# sourceMappingURL=frame-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame-converter.d.ts","sourceRoot":"","sources":["../../../src/formats/conversions/frame-converter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAA0C,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGpG,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,CAAC,MAAM,EAAE,MAAM,CAAC,CAwClB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,MAAM,CAkCR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,IAAI,CAqBN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,IAAI,CA4BN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,IAAI,CAsEN;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,GAAE,MAAU,EAChB,IAAI,GAAE,MAAU,EAChB,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,GACZ,IAAI,CA2BN"}
|