webcodecs-node 0.7.2 → 0.8.5
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 +106 -16
- package/dist/backends/node-av/HardwarePipeline.d.ts +36 -0
- package/dist/backends/node-av/HardwarePipeline.d.ts.map +1 -0
- package/dist/backends/node-av/HardwarePipeline.js +203 -0
- package/dist/backends/node-av/HardwarePipeline.js.map +1 -0
- package/dist/backends/node-av/audio/NodeAvAudioDecoder.d.ts +46 -0
- package/dist/backends/node-av/audio/NodeAvAudioDecoder.d.ts.map +1 -0
- package/dist/backends/node-av/audio/NodeAvAudioDecoder.js +277 -0
- package/dist/backends/node-av/audio/NodeAvAudioDecoder.js.map +1 -0
- package/dist/backends/node-av/audio/NodeAvAudioEncoder.d.ts +47 -0
- package/dist/backends/node-av/audio/NodeAvAudioEncoder.d.ts.map +1 -0
- package/dist/backends/node-av/audio/NodeAvAudioEncoder.js +363 -0
- package/dist/backends/node-av/audio/NodeAvAudioEncoder.js.map +1 -0
- package/dist/backends/node-av/audio/decoder/channel-layout.d.ts +12 -0
- package/dist/backends/node-av/audio/decoder/channel-layout.d.ts.map +1 -0
- package/dist/backends/node-av/audio/decoder/channel-layout.js +24 -0
- package/dist/backends/node-av/audio/decoder/channel-layout.js.map +1 -0
- package/dist/backends/node-av/audio/decoder/codec-mapping.d.ts +9 -0
- package/dist/backends/node-av/audio/decoder/codec-mapping.d.ts.map +1 -0
- package/dist/backends/node-av/audio/decoder/codec-mapping.js +40 -0
- package/dist/backends/node-av/audio/decoder/codec-mapping.js.map +1 -0
- package/dist/backends/node-av/audio/decoder/constants.d.ts +6 -0
- package/dist/backends/node-av/audio/decoder/constants.d.ts.map +1 -0
- package/dist/backends/node-av/audio/decoder/constants.js +6 -0
- package/dist/backends/node-av/audio/decoder/constants.js.map +1 -0
- package/dist/backends/node-av/audio/decoder/index.d.ts +8 -0
- package/dist/backends/node-av/audio/decoder/index.d.ts.map +1 -0
- package/dist/backends/node-av/audio/decoder/index.js +8 -0
- package/dist/backends/node-av/audio/decoder/index.js.map +1 -0
- package/dist/backends/node-av/audio/decoder/sample-format.d.ts +14 -0
- package/dist/backends/node-av/audio/decoder/sample-format.d.ts.map +1 -0
- package/dist/backends/node-av/audio/decoder/sample-format.js +54 -0
- package/dist/backends/node-av/audio/decoder/sample-format.js.map +1 -0
- package/dist/backends/node-av/audio/encoder/channel-layout.d.ts +12 -0
- package/dist/backends/node-av/audio/encoder/channel-layout.d.ts.map +1 -0
- package/dist/backends/node-av/audio/encoder/channel-layout.js +24 -0
- package/dist/backends/node-av/audio/encoder/channel-layout.js.map +1 -0
- package/dist/backends/node-av/audio/encoder/codec-description.d.ts +33 -0
- package/dist/backends/node-av/audio/encoder/codec-description.d.ts.map +1 -0
- package/dist/backends/node-av/audio/encoder/codec-description.js +137 -0
- package/dist/backends/node-av/audio/encoder/codec-description.js.map +1 -0
- package/dist/backends/node-av/audio/encoder/codec-mapping.d.ts +12 -0
- package/dist/backends/node-av/audio/encoder/codec-mapping.d.ts.map +1 -0
- package/dist/backends/node-av/audio/encoder/codec-mapping.js +61 -0
- package/dist/backends/node-av/audio/encoder/codec-mapping.js.map +1 -0
- package/dist/backends/node-av/audio/encoder/constants.d.ts +6 -0
- package/dist/backends/node-av/audio/encoder/constants.d.ts.map +1 -0
- package/dist/backends/node-av/audio/encoder/constants.js +6 -0
- package/dist/backends/node-av/audio/encoder/constants.js.map +1 -0
- package/dist/backends/node-av/audio/encoder/drain.d.ts +32 -0
- package/dist/backends/node-av/audio/encoder/drain.d.ts.map +1 -0
- package/dist/backends/node-av/audio/encoder/drain.js +51 -0
- package/dist/backends/node-av/audio/encoder/drain.js.map +1 -0
- package/dist/backends/node-av/audio/encoder/index.d.ts +20 -0
- package/dist/backends/node-av/audio/encoder/index.d.ts.map +1 -0
- package/dist/backends/node-av/audio/encoder/index.js +20 -0
- package/dist/backends/node-av/audio/encoder/index.js.map +1 -0
- package/dist/backends/node-av/audio/encoder/options.d.ts +40 -0
- package/dist/backends/node-av/audio/encoder/options.d.ts.map +1 -0
- package/dist/backends/node-av/audio/encoder/options.js +127 -0
- package/dist/backends/node-av/audio/encoder/options.js.map +1 -0
- package/dist/backends/node-av/audio/encoder/sample-format-convert.d.ts +40 -0
- package/dist/backends/node-av/audio/encoder/sample-format-convert.d.ts.map +1 -0
- package/dist/backends/node-av/audio/encoder/sample-format-convert.js +152 -0
- package/dist/backends/node-av/audio/encoder/sample-format-convert.js.map +1 -0
- package/dist/backends/node-av/hardware-pipeline/capabilities.d.ts +10 -0
- package/dist/backends/node-av/hardware-pipeline/capabilities.d.ts.map +1 -0
- package/dist/backends/node-av/hardware-pipeline/capabilities.js +45 -0
- package/dist/backends/node-av/hardware-pipeline/capabilities.js.map +1 -0
- package/dist/backends/node-av/hardware-pipeline/index.d.ts +6 -0
- package/dist/backends/node-av/hardware-pipeline/index.d.ts.map +1 -0
- package/dist/backends/node-av/hardware-pipeline/index.js +5 -0
- package/dist/backends/node-av/hardware-pipeline/index.js.map +1 -0
- package/dist/backends/node-av/hardware-pipeline/types.d.ts +13 -0
- package/dist/backends/node-av/hardware-pipeline/types.d.ts.map +1 -0
- package/dist/backends/node-av/hardware-pipeline/types.js +5 -0
- package/dist/backends/node-av/hardware-pipeline/types.js.map +1 -0
- package/dist/backends/node-av/image/NodeAvImageDecoder.d.ts +95 -0
- package/dist/backends/node-av/image/NodeAvImageDecoder.d.ts.map +1 -0
- package/dist/backends/node-av/image/NodeAvImageDecoder.js +383 -0
- package/dist/backends/node-av/image/NodeAvImageDecoder.js.map +1 -0
- package/dist/backends/node-av/image/WebPImageDecoder.d.ts +57 -0
- package/dist/backends/node-av/image/WebPImageDecoder.d.ts.map +1 -0
- package/dist/backends/node-av/image/WebPImageDecoder.js +178 -0
- package/dist/backends/node-av/image/WebPImageDecoder.js.map +1 -0
- package/dist/backends/node-av/image/decoder/constants.d.ts +14 -0
- package/dist/backends/node-av/image/decoder/constants.d.ts.map +1 -0
- package/dist/backends/node-av/image/decoder/constants.js +24 -0
- package/dist/backends/node-av/image/decoder/constants.js.map +1 -0
- package/dist/backends/node-av/image/decoder/index.d.ts +7 -0
- package/dist/backends/node-av/image/decoder/index.d.ts.map +1 -0
- package/dist/backends/node-av/image/decoder/index.js +6 -0
- package/dist/backends/node-av/image/decoder/index.js.map +1 -0
- package/dist/backends/node-av/image/decoder/probe.d.ts +12 -0
- package/dist/backends/node-av/image/decoder/probe.d.ts.map +1 -0
- package/dist/backends/node-av/image/decoder/probe.js +57 -0
- package/dist/backends/node-av/image/decoder/probe.js.map +1 -0
- package/dist/backends/node-av/image/decoder/types.d.ts +25 -0
- package/dist/backends/node-av/image/decoder/types.d.ts.map +1 -0
- package/dist/backends/node-av/image/decoder/types.js +5 -0
- package/dist/backends/node-av/image/decoder/types.js.map +1 -0
- package/dist/backends/node-av/video/NodeAvVideoDecoder.d.ts +44 -0
- package/dist/backends/node-av/video/NodeAvVideoDecoder.d.ts.map +1 -0
- package/dist/backends/node-av/video/NodeAvVideoDecoder.js +326 -0
- package/dist/backends/node-av/video/NodeAvVideoDecoder.js.map +1 -0
- package/dist/backends/node-av/video/NodeAvVideoEncoder.d.ts +49 -0
- package/dist/backends/node-av/video/NodeAvVideoEncoder.d.ts.map +1 -0
- package/dist/backends/node-av/video/NodeAvVideoEncoder.js +317 -0
- package/dist/backends/node-av/video/NodeAvVideoEncoder.js.map +1 -0
- package/dist/backends/node-av/video/decoder/codec-mapping.d.ts +9 -0
- package/dist/backends/node-av/video/decoder/codec-mapping.d.ts.map +1 -0
- package/dist/backends/node-av/video/decoder/codec-mapping.js +25 -0
- package/dist/backends/node-av/video/decoder/codec-mapping.js.map +1 -0
- package/dist/backends/node-av/video/decoder/constants.d.ts +13 -0
- package/dist/backends/node-av/video/decoder/constants.d.ts.map +1 -0
- package/dist/backends/node-av/video/decoder/constants.js +13 -0
- package/dist/backends/node-av/video/decoder/constants.js.map +1 -0
- package/dist/backends/node-av/video/decoder/index.d.ts +7 -0
- package/dist/backends/node-av/video/decoder/index.d.ts.map +1 -0
- package/dist/backends/node-av/video/decoder/index.js +7 -0
- package/dist/backends/node-av/video/decoder/index.js.map +1 -0
- package/dist/backends/node-av/video/decoder/pixel-format.d.ts +13 -0
- package/dist/backends/node-av/video/decoder/pixel-format.d.ts.map +1 -0
- package/dist/backends/node-av/video/decoder/pixel-format.js +88 -0
- package/dist/backends/node-av/video/decoder/pixel-format.js.map +1 -0
- package/dist/backends/node-av/video/encoder/codec-description.d.ts +26 -0
- package/dist/backends/node-av/video/encoder/codec-description.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/codec-description.js +86 -0
- package/dist/backends/node-av/video/encoder/codec-description.js.map +1 -0
- package/dist/backends/node-av/video/encoder/drain.d.ts +34 -0
- package/dist/backends/node-av/video/encoder/drain.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/drain.js +51 -0
- package/dist/backends/node-av/video/encoder/drain.js.map +1 -0
- package/dist/backends/node-av/video/encoder/filters.d.ts +37 -0
- package/dist/backends/node-av/video/encoder/filters.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/filters.js +71 -0
- package/dist/backends/node-av/video/encoder/filters.js.map +1 -0
- package/dist/backends/node-av/video/encoder/gpu-filters.d.ts +9 -0
- package/dist/backends/node-av/video/encoder/gpu-filters.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/gpu-filters.js +26 -0
- package/dist/backends/node-av/video/encoder/gpu-filters.js.map +1 -0
- package/dist/backends/node-av/video/encoder/hardware-constraints.d.ts +12 -0
- package/dist/backends/node-av/video/encoder/hardware-constraints.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/hardware-constraints.js +31 -0
- package/dist/backends/node-av/video/encoder/hardware-constraints.js.map +1 -0
- package/dist/backends/node-av/video/encoder/index.d.ts +28 -0
- package/dist/backends/node-av/video/encoder/index.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/index.js +28 -0
- package/dist/backends/node-av/video/encoder/index.js.map +1 -0
- package/dist/backends/node-av/video/encoder/options.d.ts +39 -0
- package/dist/backends/node-av/video/encoder/options.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/options.js +195 -0
- package/dist/backends/node-av/video/encoder/options.js.map +1 -0
- package/dist/backends/node-av/video/encoder/pixel-format-config.d.ts +42 -0
- package/dist/backends/node-av/video/encoder/pixel-format-config.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/pixel-format-config.js +122 -0
- package/dist/backends/node-av/video/encoder/pixel-format-config.js.map +1 -0
- package/dist/backends/node-av/video/encoder/pixel-format.d.ts +13 -0
- package/dist/backends/node-av/video/encoder/pixel-format.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/pixel-format.js +68 -0
- package/dist/backends/node-av/video/encoder/pixel-format.js.map +1 -0
- package/dist/backends/node-av/video/encoder/setup.d.ts +33 -0
- package/dist/backends/node-av/video/encoder/setup.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/setup.js +62 -0
- package/dist/backends/node-av/video/encoder/setup.js.map +1 -0
- package/dist/backends/node-av/video/encoder/software-encoders.d.ts +8 -0
- package/dist/backends/node-av/video/encoder/software-encoders.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/software-encoders.js +17 -0
- package/dist/backends/node-av/video/encoder/software-encoders.js.map +1 -0
- package/dist/backends/node-av/video/encoder/timestamp.d.ts +34 -0
- package/dist/backends/node-av/video/encoder/timestamp.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/timestamp.js +39 -0
- package/dist/backends/node-av/video/encoder/timestamp.js.map +1 -0
- package/dist/backends/types.d.ts +44 -0
- package/dist/backends/types.d.ts.map +1 -1
- package/dist/backends/types.js.map +1 -1
- package/dist/codec-utils/formats.d.ts.map +1 -1
- package/dist/codec-utils/formats.js +78 -0
- package/dist/codec-utils/formats.js.map +1 -1
- package/dist/codec-utils/types.d.ts +1 -1
- package/dist/codecs/aac.d.ts +10 -0
- package/dist/codecs/aac.d.ts.map +1 -0
- package/dist/codecs/aac.js +10 -0
- package/dist/codecs/aac.js.map +1 -0
- package/dist/codecs/avc.d.ts +11 -0
- package/dist/codecs/avc.d.ts.map +1 -0
- package/dist/codecs/avc.js +11 -0
- package/dist/codecs/avc.js.map +1 -0
- package/dist/codecs/hevc.d.ts +11 -0
- package/dist/codecs/hevc.d.ts.map +1 -0
- package/dist/codecs/hevc.js +11 -0
- package/dist/codecs/hevc.js.map +1 -0
- package/dist/codecs/index.d.ts +10 -0
- package/dist/codecs/index.d.ts.map +1 -0
- package/dist/codecs/index.js +14 -0
- package/dist/codecs/index.js.map +1 -0
- package/dist/codecs/validation/audio.d.ts +19 -0
- package/dist/codecs/validation/audio.d.ts.map +1 -0
- package/dist/codecs/validation/audio.js +111 -0
- package/dist/codecs/validation/audio.js.map +1 -0
- package/dist/codecs/validation/config.d.ts +27 -0
- package/dist/codecs/validation/config.d.ts.map +1 -0
- package/dist/codecs/validation/config.js +154 -0
- package/dist/codecs/validation/config.js.map +1 -0
- package/dist/codecs/validation/index.d.ts +9 -0
- package/dist/codecs/validation/index.d.ts.map +1 -0
- package/dist/codecs/validation/index.js +12 -0
- package/dist/codecs/validation/index.js.map +1 -0
- package/dist/codecs/validation/video.d.ts +24 -0
- package/dist/codecs/validation/video.d.ts.map +1 -0
- package/dist/codecs/validation/video.js +196 -0
- package/dist/codecs/validation/video.js.map +1 -0
- package/dist/config/webcodecs-config.d.ts +58 -0
- package/dist/config/webcodecs-config.d.ts.map +1 -0
- package/dist/config/webcodecs-config.js +187 -0
- package/dist/config/webcodecs-config.js.map +1 -0
- package/dist/containers/Demuxer.d.ts +3 -1
- package/dist/containers/Demuxer.d.ts.map +1 -1
- package/dist/containers/Demuxer.js +26 -19
- package/dist/containers/Demuxer.js.map +1 -1
- package/dist/containers/FFmpegMuxer.d.ts +42 -0
- package/dist/containers/FFmpegMuxer.d.ts.map +1 -0
- package/dist/containers/FFmpegMuxer.js +311 -0
- package/dist/containers/FFmpegMuxer.js.map +1 -0
- package/dist/containers/Muxer.d.ts +75 -107
- package/dist/containers/Muxer.d.ts.map +1 -1
- package/dist/containers/Muxer.js +184 -243
- package/dist/containers/Muxer.js.map +1 -1
- package/dist/containers/NodeAvMuxer.d.ts +125 -0
- package/dist/containers/NodeAvMuxer.d.ts.map +1 -0
- package/dist/containers/NodeAvMuxer.js +458 -0
- package/dist/containers/NodeAvMuxer.js.map +1 -0
- package/dist/containers/extract.d.ts.map +1 -1
- package/dist/containers/extract.js +3 -1
- package/dist/containers/extract.js.map +1 -1
- package/dist/containers/index.d.ts +20 -14
- package/dist/containers/index.d.ts.map +1 -1
- package/dist/containers/index.js +21 -14
- package/dist/containers/index.js.map +1 -1
- package/dist/containers/muxer-types.d.ts +117 -0
- package/dist/containers/muxer-types.d.ts.map +1 -0
- package/dist/containers/muxer-types.js +45 -0
- package/dist/containers/muxer-types.js.map +1 -0
- package/dist/containers/transcode.d.ts.map +1 -1
- package/dist/containers/transcode.js +171 -150
- package/dist/containers/transcode.js.map +1 -1
- package/dist/core/AudioData.d.ts.map +1 -1
- package/dist/core/AudioData.js +54 -12
- package/dist/core/AudioData.js.map +1 -1
- package/dist/core/EncodedAudioChunk.d.ts.map +1 -1
- package/dist/core/EncodedAudioChunk.js +74 -6
- package/dist/core/EncodedAudioChunk.js.map +1 -1
- package/dist/core/EncodedVideoChunk.d.ts +2 -0
- package/dist/core/EncodedVideoChunk.d.ts.map +1 -1
- package/dist/core/EncodedVideoChunk.js +70 -2
- package/dist/core/EncodedVideoChunk.js.map +1 -1
- package/dist/core/VideoFrame.d.ts +27 -2
- package/dist/core/VideoFrame.d.ts.map +1 -1
- package/dist/core/VideoFrame.js +245 -125
- package/dist/core/VideoFrame.js.map +1 -1
- package/dist/core/video-frame/layout.d.ts +10 -0
- package/dist/core/video-frame/layout.d.ts.map +1 -0
- package/dist/core/video-frame/layout.js +97 -0
- package/dist/core/video-frame/layout.js.map +1 -0
- package/dist/core/video-frame/orientation.d.ts +23 -0
- package/dist/core/video-frame/orientation.d.ts.map +1 -0
- package/dist/core/video-frame/orientation.js +49 -0
- package/dist/core/video-frame/orientation.js.map +1 -0
- package/dist/core/video-frame/transfer.d.ts +19 -0
- package/dist/core/video-frame/transfer.d.ts.map +1 -0
- package/dist/core/video-frame/transfer.js +78 -0
- package/dist/core/video-frame/transfer.js.map +1 -0
- package/dist/core/video-frame/validation.d.ts +28 -0
- package/dist/core/video-frame/validation.d.ts.map +1 -0
- package/dist/core/video-frame/validation.js +76 -0
- package/dist/core/video-frame/validation.js.map +1 -0
- package/dist/decoders/AudioDecoder.d.ts +2 -19
- package/dist/decoders/AudioDecoder.d.ts.map +1 -1
- package/dist/decoders/AudioDecoder.js +27 -11
- package/dist/decoders/AudioDecoder.js.map +1 -1
- package/dist/decoders/ImageDecoder.d.ts +34 -41
- package/dist/decoders/ImageDecoder.d.ts.map +1 -1
- package/dist/decoders/ImageDecoder.js +158 -266
- package/dist/decoders/ImageDecoder.js.map +1 -1
- package/dist/decoders/VideoDecoder.d.ts +3 -38
- package/dist/decoders/VideoDecoder.d.ts.map +1 -1
- package/dist/decoders/VideoDecoder.js +126 -124
- package/dist/decoders/VideoDecoder.js.map +1 -1
- package/dist/decoders/audio/config.d.ts +23 -0
- package/dist/decoders/audio/config.d.ts.map +1 -0
- package/dist/decoders/audio/config.js +112 -0
- package/dist/decoders/audio/config.js.map +1 -0
- package/dist/decoders/audio/constants.d.ts +6 -0
- package/dist/decoders/audio/constants.d.ts.map +1 -0
- package/dist/decoders/audio/constants.js +6 -0
- package/dist/decoders/audio/constants.js.map +1 -0
- package/dist/decoders/audio/types.d.ts +21 -0
- package/dist/decoders/audio/types.d.ts.map +1 -0
- package/dist/decoders/audio/types.js +5 -0
- package/dist/decoders/audio/types.js.map +1 -0
- package/dist/decoders/image/orientation.d.ts +16 -0
- package/dist/decoders/image/orientation.d.ts.map +1 -0
- package/dist/decoders/image/orientation.js +170 -0
- package/dist/decoders/image/orientation.js.map +1 -0
- package/dist/decoders/image/stream.d.ts +12 -0
- package/dist/decoders/image/stream.d.ts.map +1 -0
- package/dist/decoders/image/stream.js +41 -0
- package/dist/decoders/image/stream.js.map +1 -0
- package/dist/decoders/image/tracks.d.ts +76 -0
- package/dist/decoders/image/tracks.d.ts.map +1 -0
- package/dist/decoders/image/tracks.js +136 -0
- package/dist/decoders/image/tracks.js.map +1 -0
- package/dist/decoders/image/types.d.ts +36 -0
- package/dist/decoders/image/types.d.ts.map +1 -0
- package/dist/decoders/image/types.js +5 -0
- package/dist/decoders/image/types.js.map +1 -0
- package/dist/decoders/video/codec-specific.d.ts +19 -0
- package/dist/decoders/video/codec-specific.d.ts.map +1 -0
- package/dist/decoders/video/codec-specific.js +62 -0
- package/dist/decoders/video/codec-specific.js.map +1 -0
- package/dist/decoders/video/config.d.ts +17 -0
- package/dist/decoders/video/config.d.ts.map +1 -0
- package/dist/decoders/video/config.js +91 -0
- package/dist/decoders/video/config.js.map +1 -0
- package/dist/decoders/video/constants.d.ts +8 -0
- package/dist/decoders/video/constants.d.ts.map +1 -0
- package/dist/decoders/video/constants.js +13 -0
- package/dist/decoders/video/constants.js.map +1 -0
- package/dist/decoders/video/queue.d.ts +9 -0
- package/dist/decoders/video/queue.d.ts.map +1 -0
- package/dist/decoders/video/queue.js +17 -0
- package/dist/decoders/video/queue.js.map +1 -0
- package/dist/decoders/video/types.d.ts +41 -0
- package/dist/decoders/video/types.d.ts.map +1 -0
- package/dist/decoders/video/types.js +5 -0
- package/dist/decoders/video/types.js.map +1 -0
- package/dist/demos/demo-audio-visualizer.js +74 -48
- package/dist/demos/demo-audio-visualizer.js.map +1 -1
- package/dist/demos/demo-dvd-logo.js +26 -23
- package/dist/demos/demo-dvd-logo.js.map +1 -1
- package/dist/demos/demo-flow-field.d.ts +11 -0
- package/dist/demos/demo-flow-field.d.ts.map +1 -0
- package/dist/demos/demo-flow-field.js +305 -0
- package/dist/demos/demo-flow-field.js.map +1 -0
- package/dist/demos/demo-four-corners.js +56 -120
- package/dist/demos/demo-four-corners.js.map +1 -1
- package/dist/demos/demo-image.js +24 -19
- package/dist/demos/demo-image.js.map +1 -1
- package/dist/demos/demo-matrix-rain.d.ts +11 -0
- package/dist/demos/demo-matrix-rain.d.ts.map +1 -0
- package/dist/demos/demo-matrix-rain.js +246 -0
- package/dist/demos/demo-matrix-rain.js.map +1 -0
- package/dist/demos/demo-pipeline.js +56 -51
- package/dist/demos/demo-pipeline.js.map +1 -1
- package/dist/demos/demo-samples.js +56 -402
- package/dist/demos/demo-samples.js.map +1 -1
- package/dist/encoders/AudioEncoder.d.ts +4 -28
- package/dist/encoders/AudioEncoder.d.ts.map +1 -1
- package/dist/encoders/AudioEncoder.js +83 -20
- package/dist/encoders/AudioEncoder.js.map +1 -1
- package/dist/encoders/VideoEncoder.d.ts +25 -46
- package/dist/encoders/VideoEncoder.d.ts.map +1 -1
- package/dist/encoders/VideoEncoder.js +180 -88
- package/dist/encoders/VideoEncoder.js.map +1 -1
- package/dist/encoders/audio/config.d.ts +30 -0
- package/dist/encoders/audio/config.d.ts.map +1 -0
- package/dist/encoders/audio/config.js +169 -0
- package/dist/encoders/audio/config.js.map +1 -0
- package/dist/encoders/audio/constants.d.ts +8 -0
- package/dist/encoders/audio/constants.d.ts.map +1 -0
- package/dist/encoders/audio/constants.js +8 -0
- package/dist/encoders/audio/constants.js.map +1 -0
- package/dist/encoders/audio/types.d.ts +70 -0
- package/dist/encoders/audio/types.d.ts.map +1 -0
- package/dist/encoders/audio/types.js +5 -0
- package/dist/encoders/audio/types.js.map +1 -0
- package/dist/encoders/video/config.d.ts +25 -0
- package/dist/encoders/video/config.d.ts.map +1 -0
- package/dist/encoders/video/config.js +132 -0
- package/dist/encoders/video/config.js.map +1 -0
- package/dist/encoders/video/constants.d.ts +8 -0
- package/dist/encoders/video/constants.d.ts.map +1 -0
- package/dist/encoders/video/constants.js +8 -0
- package/dist/encoders/video/constants.js.map +1 -0
- package/dist/encoders/video/queue.d.ts +9 -0
- package/dist/encoders/video/queue.d.ts.map +1 -0
- package/dist/encoders/video/queue.js +17 -0
- package/dist/encoders/video/queue.js.map +1 -0
- package/dist/encoders/video/types.d.ts +104 -0
- package/dist/encoders/video/types.d.ts.map +1 -0
- package/dist/encoders/video/types.js +5 -0
- package/dist/encoders/video/types.js.map +1 -0
- package/dist/formats/color-space/convert.d.ts +27 -0
- package/dist/formats/color-space/convert.d.ts.map +1 -0
- package/dist/formats/color-space/convert.js +91 -0
- package/dist/formats/color-space/convert.js.map +1 -0
- package/dist/formats/color-space/extract.d.ts +32 -0
- package/dist/formats/color-space/extract.d.ts.map +1 -0
- package/dist/formats/color-space/extract.js +116 -0
- package/dist/formats/color-space/extract.js.map +1 -0
- package/dist/formats/color-space/index.d.ts +10 -0
- package/dist/formats/color-space/index.d.ts.map +1 -0
- package/dist/formats/color-space/index.js +14 -0
- package/dist/formats/color-space/index.js.map +1 -0
- package/dist/formats/color-space/maps.d.ts +70 -0
- package/dist/formats/color-space/maps.d.ts.map +1 -0
- package/dist/formats/color-space/maps.js +70 -0
- package/dist/formats/color-space/maps.js.map +1 -0
- package/dist/formats/color-space/types.d.ts +68 -0
- package/dist/formats/color-space/types.d.ts.map +1 -0
- package/dist/formats/color-space/types.js +49 -0
- package/dist/formats/color-space/types.js.map +1 -0
- package/dist/formats/color-space.d.ts +4 -124
- package/dist/formats/color-space.d.ts.map +1 -1
- package/dist/formats/color-space.js +5 -108
- package/dist/formats/color-space.js.map +1 -1
- package/dist/formats/conversions/frame-converter.d.ts +8 -3
- package/dist/formats/conversions/frame-converter.d.ts.map +1 -1
- package/dist/formats/conversions/frame-converter.js +16 -12
- package/dist/formats/conversions/frame-converter.js.map +1 -1
- package/dist/formats/pixel-format/helpers.d.ts +49 -0
- package/dist/formats/pixel-format/helpers.d.ts.map +1 -0
- package/dist/formats/pixel-format/helpers.js +117 -0
- package/dist/formats/pixel-format/helpers.js.map +1 -0
- package/dist/formats/pixel-format/index.d.ts +9 -0
- package/dist/formats/pixel-format/index.d.ts.map +1 -0
- package/dist/formats/pixel-format/index.js +10 -0
- package/dist/formats/pixel-format/index.js.map +1 -0
- package/dist/formats/pixel-format/sizes.d.ts +17 -0
- package/dist/formats/pixel-format/sizes.d.ts.map +1 -0
- package/dist/formats/pixel-format/sizes.js +159 -0
- package/dist/formats/pixel-format/sizes.js.map +1 -0
- package/dist/formats/pixel-format/types.d.ts +13 -0
- package/dist/formats/pixel-format/types.d.ts.map +1 -0
- package/dist/formats/pixel-format/types.js +5 -0
- package/dist/formats/pixel-format/types.js.map +1 -0
- package/dist/formats/pixel-formats.d.ts +4 -53
- package/dist/formats/pixel-formats.d.ts.map +1 -1
- package/dist/formats/pixel-formats.js +5 -179
- package/dist/formats/pixel-formats.js.map +1 -1
- package/dist/hardware/decoder-args.d.ts.map +1 -1
- package/dist/hardware/decoder-args.js +35 -14
- package/dist/hardware/decoder-args.js.map +1 -1
- package/dist/hardware/detection.d.ts.map +1 -1
- package/dist/hardware/detection.js +39 -0
- package/dist/hardware/detection.js.map +1 -1
- package/dist/hardware/encoder-args.d.ts.map +1 -1
- package/dist/hardware/encoder-args.js +43 -5
- package/dist/hardware/encoder-args.js.map +1 -1
- package/dist/hardware/types.d.ts.map +1 -1
- package/dist/hardware/types.js +36 -28
- package/dist/hardware/types.js.map +1 -1
- package/dist/node-av/NodeAvVideoEncoder.d.ts +5 -0
- package/dist/node-av/NodeAvVideoEncoder.d.ts.map +1 -1
- package/dist/node-av/NodeAvVideoEncoder.js +76 -23
- package/dist/node-av/NodeAvVideoEncoder.js.map +1 -1
- package/dist/transfer/detach.d.ts +42 -0
- package/dist/transfer/detach.d.ts.map +1 -0
- package/dist/transfer/detach.js +93 -0
- package/dist/transfer/detach.js.map +1 -0
- package/dist/transfer/index.d.ts +9 -0
- package/dist/transfer/index.d.ts.map +1 -0
- package/dist/transfer/index.js +11 -0
- package/dist/transfer/index.js.map +1 -0
- package/dist/transfer/validate.d.ts +45 -0
- package/dist/transfer/validate.d.ts.map +1 -0
- package/dist/transfer/validate.js +98 -0
- package/dist/transfer/validate.js.map +1 -0
- package/dist/types/video.d.ts +16 -0
- package/dist/types/video.d.ts.map +1 -1
- package/dist/utils/avc.d.ts +2 -0
- package/dist/utils/avc.d.ts.map +1 -1
- package/dist/utils/avc.js +36 -8
- package/dist/utils/avc.js.map +1 -1
- package/dist/utils/codec-validation.d.ts +3 -28
- package/dist/utils/codec-validation.d.ts.map +1 -1
- package/dist/utils/codec-validation.js +4 -238
- package/dist/utils/codec-validation.js.map +1 -1
- package/dist/utils/hevc.d.ts +2 -0
- package/dist/utils/hevc.d.ts.map +1 -1
- package/dist/utils/hevc.js +42 -8
- package/dist/utils/hevc.js.map +1 -1
- package/docs/api.md +24 -4
- package/docs/architecture-refactor-plan.md +149 -0
- package/docs/architecture.md +258 -0
- package/docs/configuration.md +10 -7
- package/package.json +6 -4
- package/dist/config/ffmpeg-quality.d.ts +0 -14
- package/dist/config/ffmpeg-quality.d.ts.map +0 -1
- package/dist/config/ffmpeg-quality.js +0 -41
- package/dist/config/ffmpeg-quality.js.map +0 -1
- package/dist/polyfills/CanvasRenderingContext2DPolyfill.d.ts +0 -72
- package/dist/polyfills/CanvasRenderingContext2DPolyfill.d.ts.map +0 -1
- package/dist/polyfills/CanvasRenderingContext2DPolyfill.js +0 -293
- package/dist/polyfills/CanvasRenderingContext2DPolyfill.js.map +0 -1
- package/dist/polyfills/ImageDataPolyfill.d.ts +0 -12
- package/dist/polyfills/ImageDataPolyfill.d.ts.map +0 -1
- package/dist/polyfills/ImageDataPolyfill.js +0 -22
- package/dist/polyfills/ImageDataPolyfill.js.map +0 -1
- package/dist/polyfills/OffscreenCanvasPolyfill.d.ts +0 -16
- package/dist/polyfills/OffscreenCanvasPolyfill.d.ts.map +0 -1
- package/dist/polyfills/OffscreenCanvasPolyfill.js +0 -46
- package/dist/polyfills/OffscreenCanvasPolyfill.js.map +0 -1
- package/dist/polyfills/VideoFramePolyfill.d.ts +0 -44
- package/dist/polyfills/VideoFramePolyfill.d.ts.map +0 -1
- package/dist/polyfills/VideoFramePolyfill.js +0 -98
- package/dist/polyfills/VideoFramePolyfill.js.map +0 -1
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AudioEncoder configuration validation and support checking
|
|
3
|
+
*/
|
|
4
|
+
import { getCodecBase } from '../../utils/codec-cache.js';
|
|
5
|
+
import { AUDIO_ENCODER_CODEC_MAP } from '../../codec-utils/audio-codecs.js';
|
|
6
|
+
/**
|
|
7
|
+
* Validate required AudioEncoderConfig fields
|
|
8
|
+
*/
|
|
9
|
+
export function validateRequiredFields(config) {
|
|
10
|
+
if (!config || typeof config !== 'object') {
|
|
11
|
+
throw new TypeError('config must be an object');
|
|
12
|
+
}
|
|
13
|
+
if (config.codec === undefined || config.codec === null) {
|
|
14
|
+
throw new TypeError("Failed to read the 'codec' property from 'AudioEncoderConfig': Required member is undefined.");
|
|
15
|
+
}
|
|
16
|
+
if (typeof config.codec !== 'string' || config.codec === '') {
|
|
17
|
+
throw new TypeError('codec must be a non-empty string');
|
|
18
|
+
}
|
|
19
|
+
if (config.sampleRate === undefined || config.sampleRate === null) {
|
|
20
|
+
throw new TypeError("Failed to read the 'sampleRate' property from 'AudioEncoderConfig': Required member is undefined.");
|
|
21
|
+
}
|
|
22
|
+
if (typeof config.sampleRate !== 'number' || !Number.isFinite(config.sampleRate) || config.sampleRate <= 0) {
|
|
23
|
+
throw new TypeError('sampleRate must be a finite positive number');
|
|
24
|
+
}
|
|
25
|
+
if (config.numberOfChannels === undefined || config.numberOfChannels === null) {
|
|
26
|
+
throw new TypeError("Failed to read the 'numberOfChannels' property from 'AudioEncoderConfig': Required member is undefined.");
|
|
27
|
+
}
|
|
28
|
+
if (typeof config.numberOfChannels !== 'number' || !Number.isFinite(config.numberOfChannels) || config.numberOfChannels <= 0 || !Number.isInteger(config.numberOfChannels)) {
|
|
29
|
+
throw new TypeError('numberOfChannels must be a positive integer');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Validate optional AudioEncoderConfig fields
|
|
34
|
+
*/
|
|
35
|
+
export function validateOptionalFields(config) {
|
|
36
|
+
if (config.bitrate !== undefined && (typeof config.bitrate !== 'number' || !Number.isFinite(config.bitrate) || config.bitrate <= 0)) {
|
|
37
|
+
throw new TypeError('bitrate must be a finite positive number');
|
|
38
|
+
}
|
|
39
|
+
if (config.bitrateMode !== undefined && !['constant', 'variable'].includes(config.bitrateMode)) {
|
|
40
|
+
throw new TypeError("bitrateMode must be 'constant' or 'variable'");
|
|
41
|
+
}
|
|
42
|
+
if (config.latencyMode !== undefined && !['quality', 'realtime'].includes(config.latencyMode)) {
|
|
43
|
+
throw new TypeError("latencyMode must be 'quality' or 'realtime'");
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Validate Opus-specific config per WebCodecs Opus codec registration
|
|
48
|
+
* Returns false if config is unsupported (but valid)
|
|
49
|
+
*/
|
|
50
|
+
export function validateOpusConfig(config) {
|
|
51
|
+
if (config.opus?.format !== undefined) {
|
|
52
|
+
const format = config.opus.format; // Cast to handle runtime 'ogg' values
|
|
53
|
+
if (format === 'ogg') {
|
|
54
|
+
// 'ogg' format requests Ogg-encapsulated output, but encoders produce raw packets.
|
|
55
|
+
// Ogg containerization is handled by the muxer, not the encoder.
|
|
56
|
+
throw new TypeError("opus.format 'ogg' is not supported at encoder level - use 'opus' format and an Ogg muxer");
|
|
57
|
+
}
|
|
58
|
+
if (format !== 'opus') {
|
|
59
|
+
throw new TypeError("opus.format must be 'opus'");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (config.opus?.packetlossperc !== undefined) {
|
|
63
|
+
if (typeof config.opus.packetlossperc !== 'number' || config.opus.packetlossperc < 0 || config.opus.packetlossperc > 100) {
|
|
64
|
+
throw new TypeError('opus.packetlossperc must be a number between 0 and 100');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const validFrameDurations = [2500, 5000, 10000, 20000, 40000, 60000, 80000, 100000, 120000];
|
|
68
|
+
if (config.opus?.frameDuration !== undefined) {
|
|
69
|
+
if (!validFrameDurations.includes(config.opus.frameDuration)) {
|
|
70
|
+
throw new TypeError(`opus.frameDuration must be one of: ${validFrameDurations.join(', ')}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (config.opus?.complexity !== undefined) {
|
|
74
|
+
if (typeof config.opus.complexity !== 'number' || config.opus.complexity < 0 || config.opus.complexity > 10) {
|
|
75
|
+
throw new TypeError('opus.complexity must be a number between 0 and 10');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (config.opus?.application !== undefined && !['voip', 'audio', 'lowdelay'].includes(config.opus.application)) {
|
|
79
|
+
throw new TypeError("opus.application must be 'voip', 'audio', or 'lowdelay'");
|
|
80
|
+
}
|
|
81
|
+
if (config.opus?.signal !== undefined && !['auto', 'music', 'voice'].includes(config.opus.signal)) {
|
|
82
|
+
throw new TypeError("opus.signal must be 'auto', 'music', or 'voice'");
|
|
83
|
+
}
|
|
84
|
+
// Validate Opus channel count (1-255 per RFC 6716)
|
|
85
|
+
if (config.numberOfChannels > 255) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
// Validate Opus bitrate bounds (6kbps - 510kbps per Opus spec)
|
|
89
|
+
if (config.bitrate !== undefined) {
|
|
90
|
+
if (config.bitrate < 6000 || config.bitrate > 510000) {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Validate AAC-specific config
|
|
98
|
+
*/
|
|
99
|
+
export function validateAacConfig(config) {
|
|
100
|
+
if (config.aac?.format !== undefined && !['aac', 'adts'].includes(config.aac.format)) {
|
|
101
|
+
throw new TypeError("aac.format must be 'aac' or 'adts'");
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Clone an AudioEncoderConfig per WebCodecs spec
|
|
106
|
+
*/
|
|
107
|
+
export function cloneConfig(config) {
|
|
108
|
+
const codecBase = getCodecBase(config.codec);
|
|
109
|
+
const clonedConfig = {
|
|
110
|
+
codec: config.codec,
|
|
111
|
+
sampleRate: config.sampleRate,
|
|
112
|
+
numberOfChannels: config.numberOfChannels,
|
|
113
|
+
};
|
|
114
|
+
// Copy optional properties if present
|
|
115
|
+
if (config.bitrate !== undefined)
|
|
116
|
+
clonedConfig.bitrate = config.bitrate;
|
|
117
|
+
if (config.bitrateMode !== undefined)
|
|
118
|
+
clonedConfig.bitrateMode = config.bitrateMode;
|
|
119
|
+
if (config.latencyMode !== undefined)
|
|
120
|
+
clonedConfig.latencyMode = config.latencyMode;
|
|
121
|
+
if (config.format !== undefined)
|
|
122
|
+
clonedConfig.format = config.format;
|
|
123
|
+
// Clone Opus config with defaults per WebCodecs Opus codec registration
|
|
124
|
+
if (codecBase === 'opus') {
|
|
125
|
+
const opusConfig = {
|
|
126
|
+
format: config.opus?.format ?? 'opus',
|
|
127
|
+
frameDuration: config.opus?.frameDuration ?? 20000,
|
|
128
|
+
application: config.opus?.application ?? 'audio',
|
|
129
|
+
packetlossperc: config.opus?.packetlossperc ?? 0,
|
|
130
|
+
useinbandfec: config.opus?.useinbandfec ?? false,
|
|
131
|
+
usedtx: config.opus?.usedtx ?? false,
|
|
132
|
+
signal: config.opus?.signal ?? 'auto',
|
|
133
|
+
complexity: config.opus?.complexity ?? 10,
|
|
134
|
+
};
|
|
135
|
+
clonedConfig.opus = opusConfig;
|
|
136
|
+
}
|
|
137
|
+
// Clone AAC config (strip unknown fields)
|
|
138
|
+
if (config.aac) {
|
|
139
|
+
const aacConfig = {};
|
|
140
|
+
if (config.aac.format !== undefined)
|
|
141
|
+
aacConfig.format = config.aac.format;
|
|
142
|
+
clonedConfig.aac = aacConfig;
|
|
143
|
+
}
|
|
144
|
+
return clonedConfig;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Check if an AudioEncoderConfig is supported
|
|
148
|
+
*/
|
|
149
|
+
export async function checkConfigSupport(config) {
|
|
150
|
+
// Validate required fields
|
|
151
|
+
validateRequiredFields(config);
|
|
152
|
+
// Validate optional fields
|
|
153
|
+
validateOptionalFields(config);
|
|
154
|
+
const codecBase = getCodecBase(config.codec);
|
|
155
|
+
// Validate Opus-specific config
|
|
156
|
+
if (codecBase === 'opus') {
|
|
157
|
+
const opusSupported = validateOpusConfig(config);
|
|
158
|
+
if (!opusSupported) {
|
|
159
|
+
return { supported: false, config };
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Validate AAC-specific config
|
|
163
|
+
validateAacConfig(config);
|
|
164
|
+
// Clone the config per WebCodecs spec
|
|
165
|
+
const clonedConfig = cloneConfig(config);
|
|
166
|
+
const supported = codecBase in AUDIO_ENCODER_CODEC_MAP || config.codec in AUDIO_ENCODER_CODEC_MAP;
|
|
167
|
+
return { supported, config: clonedConfig };
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/encoders/audio/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAQ5E;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAA0B;IAC/D,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACxD,MAAM,IAAI,SAAS,CAAC,8FAA8F,CAAC,CAAC;IACtH,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,EAAE,EAAE,CAAC;QAC5D,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAClE,MAAM,IAAI,SAAS,CAAC,mGAAmG,CAAC,CAAC;IAC3H,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;QAC3G,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS,IAAI,MAAM,CAAC,gBAAgB,KAAK,IAAI,EAAE,CAAC;QAC9E,MAAM,IAAI,SAAS,CAAC,yGAAyG,CAAC,CAAC;IACjI,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,gBAAgB,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,MAAM,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC3K,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAA0B;IAC/D,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC;QACpI,MAAM,IAAI,SAAS,CAAC,0CAA0C,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/F,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9F,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA0B;IAC3D,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAgB,CAAC,CAAC,sCAAsC;QACnF,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,mFAAmF;YACnF,iEAAiE;YACjE,MAAM,IAAI,SAAS,CAAC,0FAA0F,CAAC,CAAC;QAClH,CAAC;QACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,EAAE,cAAc,KAAK,SAAS,EAAE,CAAC;QAC9C,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,cAAc,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,GAAG,GAAG,EAAE,CAAC;YACzH,MAAM,IAAI,SAAS,CAAC,wDAAwD,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IACD,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5F,IAAI,MAAM,CAAC,IAAI,EAAE,aAAa,KAAK,SAAS,EAAE,CAAC;QAC7C,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,SAAS,CAAC,sCAAsC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,EAAE,UAAU,KAAK,SAAS,EAAE,CAAC;QAC1C,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE,CAAC;YAC5G,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,EAAE,WAAW,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/G,MAAM,IAAI,SAAS,CAAC,yDAAyD,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAClG,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;IACzE,CAAC;IACD,mDAAmD;IACnD,IAAI,MAAM,CAAC,gBAAgB,GAAG,GAAG,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,+DAA+D;IAC/D,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,MAAM,CAAC,OAAO,GAAG,IAAI,IAAI,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA0B;IAC1D,IAAI,MAAM,CAAC,GAAG,EAAE,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACrF,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAA0B;IACpD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE7C,MAAM,YAAY,GAAuB;QACvC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;KAC1C,CAAC;IAEF,sCAAsC;IACtC,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;QAAE,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IACxE,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;QAAE,YAAY,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACpF,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;QAAE,YAAY,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACpF,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAErE,wEAAwE;IACxE,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,UAAU,GAAsB;YACpC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,MAAM;YACrC,aAAa,EAAE,MAAM,CAAC,IAAI,EAAE,aAAa,IAAI,KAAK;YAClD,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,OAAO;YAChD,cAAc,EAAE,MAAM,CAAC,IAAI,EAAE,cAAc,IAAI,CAAC;YAChD,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,IAAI,KAAK;YAChD,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK;YACpC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,MAAM;YACrC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,IAAI,EAAE;SAC1C,CAAC;QACF,YAAY,CAAC,IAAI,GAAG,UAAU,CAAC;IACjC,CAAC;IAED,0CAA0C;IAC1C,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,MAAM,SAAS,GAAqB,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS;YAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QAC1E,YAAY,CAAC,GAAG,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAA0B;IACjE,2BAA2B;IAC3B,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE/B,2BAA2B;IAC3B,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE/B,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE7C,gCAAgC;IAChC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,sCAAsC;IACtC,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAEzC,MAAM,SAAS,GAAG,SAAS,IAAI,uBAAuB,IAAI,MAAM,CAAC,KAAK,IAAI,uBAAuB,CAAC;IAElG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AudioEncoder constants
|
|
3
|
+
*/
|
|
4
|
+
export declare const DEFAULT_FLUSH_TIMEOUT = 30000;
|
|
5
|
+
export declare const MAX_QUEUE_SIZE = 100;
|
|
6
|
+
/** Opus always encodes at 48kHz regardless of input */
|
|
7
|
+
export declare const OPUS_ENCODER_SAMPLE_RATE = 48000;
|
|
8
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/encoders/audio/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,uDAAuD;AACvD,eAAO,MAAM,wBAAwB,QAAQ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AudioEncoder constants
|
|
3
|
+
*/
|
|
4
|
+
export const DEFAULT_FLUSH_TIMEOUT = 30000;
|
|
5
|
+
export const MAX_QUEUE_SIZE = 100; // Prevent unbounded memory growth
|
|
6
|
+
/** Opus always encodes at 48kHz regardless of input */
|
|
7
|
+
export const OPUS_ENCODER_SAMPLE_RATE = 48000;
|
|
8
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/encoders/audio/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC,CAAC,kCAAkC;AAErE,uDAAuD;AACvD,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AudioEncoder type definitions
|
|
3
|
+
*/
|
|
4
|
+
import type { EncodedAudioChunk } from '../../core/EncodedAudioChunk.js';
|
|
5
|
+
export type CodecState = 'unconfigured' | 'configured' | 'closed';
|
|
6
|
+
/**
|
|
7
|
+
* Opus-specific encoder configuration
|
|
8
|
+
* https://www.w3.org/TR/webcodecs-opus-codec-registration/
|
|
9
|
+
*/
|
|
10
|
+
export interface OpusEncoderConfig {
|
|
11
|
+
/** Output format: only 'opus' (raw Opus packets) is supported at encoder level.
|
|
12
|
+
* 'ogg' encapsulation is handled by the muxer, not the encoder. */
|
|
13
|
+
format?: 'opus';
|
|
14
|
+
/** Frame duration in microseconds (2500, 5000, 10000, 20000, 40000, 60000, 80000, 100000, 120000) */
|
|
15
|
+
frameDuration?: number;
|
|
16
|
+
/** Opus application mode */
|
|
17
|
+
application?: 'voip' | 'audio' | 'lowdelay';
|
|
18
|
+
/** Packet loss percentage for forward error correction (0-100) - per WebCodecs spec (lowercase) */
|
|
19
|
+
packetlossperc?: number;
|
|
20
|
+
/** Use in-band forward error correction */
|
|
21
|
+
useinbandfec?: boolean;
|
|
22
|
+
/** Use discontinuous transmission mode (for silence suppression) */
|
|
23
|
+
usedtx?: boolean;
|
|
24
|
+
/** Signal type hint for encoder optimization */
|
|
25
|
+
signal?: 'auto' | 'music' | 'voice';
|
|
26
|
+
/** Complexity (0-10, higher = better quality but more CPU) */
|
|
27
|
+
complexity?: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* AAC-specific encoder configuration
|
|
31
|
+
* https://www.w3.org/TR/webcodecs-aac-codec-registration/
|
|
32
|
+
*/
|
|
33
|
+
export interface AacEncoderConfig {
|
|
34
|
+
/** Output format: 'aac' for raw AAC, 'adts' for ADTS-framed */
|
|
35
|
+
format?: 'aac' | 'adts';
|
|
36
|
+
}
|
|
37
|
+
export interface AudioEncoderConfig {
|
|
38
|
+
codec: string;
|
|
39
|
+
sampleRate: number;
|
|
40
|
+
numberOfChannels: number;
|
|
41
|
+
bitrate?: number;
|
|
42
|
+
bitrateMode?: 'constant' | 'variable';
|
|
43
|
+
latencyMode?: 'quality' | 'realtime';
|
|
44
|
+
/**
|
|
45
|
+
* @deprecated Use codec-specific config (aac.format) instead.
|
|
46
|
+
* Top-level format for backwards compatibility.
|
|
47
|
+
*/
|
|
48
|
+
format?: 'adts' | 'aac';
|
|
49
|
+
/** Opus-specific configuration */
|
|
50
|
+
opus?: OpusEncoderConfig;
|
|
51
|
+
/** AAC-specific configuration */
|
|
52
|
+
aac?: AacEncoderConfig;
|
|
53
|
+
}
|
|
54
|
+
export interface AudioEncoderInit {
|
|
55
|
+
output: (chunk: EncodedAudioChunk, metadata?: AudioEncoderOutputMetadata) => void;
|
|
56
|
+
error: (error: Error) => void;
|
|
57
|
+
}
|
|
58
|
+
export interface AudioEncoderOutputMetadata {
|
|
59
|
+
decoderConfig?: {
|
|
60
|
+
codec: string;
|
|
61
|
+
sampleRate: number;
|
|
62
|
+
numberOfChannels: number;
|
|
63
|
+
description?: Uint8Array;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export interface AudioEncoderSupport {
|
|
67
|
+
supported: boolean;
|
|
68
|
+
config: AudioEncoderConfig;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/encoders/audio/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,YAAY,GAAG,QAAQ,CAAC;AAElE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;wEACoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qGAAqG;IACrG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;IAC5C,mGAAmG;IACnG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IACpC,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+DAA+D;IAC/D,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACtC,WAAW,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACrC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,kCAAkC;IAClC,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,iCAAiC;IACjC,GAAG,CAAC,EAAE,gBAAgB,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,CAAC,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAClF,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,CAAC,EAAE;QACd,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,UAAU,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,kBAAkB,CAAC;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/encoders/audio/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VideoEncoder configuration validation and support checking
|
|
3
|
+
*/
|
|
4
|
+
import type { VideoEncoderConfig, VideoEncoderSupport } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Clone a VideoEncoderConfig per WebCodecs spec
|
|
7
|
+
*/
|
|
8
|
+
export declare function cloneConfig(config: VideoEncoderConfig): VideoEncoderConfig;
|
|
9
|
+
/**
|
|
10
|
+
* Check dimension constraints for encoder config
|
|
11
|
+
*/
|
|
12
|
+
export declare function areDimensionsSupported(config: VideoEncoderConfig): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Check if alpha channel is supported for the codec
|
|
15
|
+
*/
|
|
16
|
+
export declare function isAlphaSupported(config: VideoEncoderConfig): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Check if quantizer bitrate mode is supported for the codec
|
|
19
|
+
*/
|
|
20
|
+
export declare function isQuantizerModeSupported(config: VideoEncoderConfig): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Check if a VideoEncoderConfig is supported
|
|
23
|
+
*/
|
|
24
|
+
export declare function checkConfigSupport(config: VideoEncoderConfig): Promise<VideoEncoderSupport>;
|
|
25
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/encoders/video/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE1E;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,kBAAkB,CA0B1E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAwB1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CASpE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAW5E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAkCjG"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VideoEncoder configuration validation and support checking
|
|
3
|
+
*/
|
|
4
|
+
import { parseCodec, getCodecBase } from '../../utils/codec-cache.js';
|
|
5
|
+
import { validateVideoEncoderConfig, validateVideoCodec } from '../../utils/codec-validation.js';
|
|
6
|
+
/**
|
|
7
|
+
* Clone a VideoEncoderConfig per WebCodecs spec
|
|
8
|
+
*/
|
|
9
|
+
export function cloneConfig(config) {
|
|
10
|
+
const clonedConfig = {
|
|
11
|
+
codec: config.codec,
|
|
12
|
+
width: config.width,
|
|
13
|
+
height: config.height,
|
|
14
|
+
};
|
|
15
|
+
// Copy optional properties if present
|
|
16
|
+
if (config.displayWidth !== undefined)
|
|
17
|
+
clonedConfig.displayWidth = config.displayWidth;
|
|
18
|
+
if (config.displayHeight !== undefined)
|
|
19
|
+
clonedConfig.displayHeight = config.displayHeight;
|
|
20
|
+
if (config.bitrate !== undefined)
|
|
21
|
+
clonedConfig.bitrate = config.bitrate;
|
|
22
|
+
if (config.framerate !== undefined)
|
|
23
|
+
clonedConfig.framerate = config.framerate;
|
|
24
|
+
if (config.hardwareAcceleration !== undefined)
|
|
25
|
+
clonedConfig.hardwareAcceleration = config.hardwareAcceleration;
|
|
26
|
+
if (config.alpha !== undefined)
|
|
27
|
+
clonedConfig.alpha = config.alpha;
|
|
28
|
+
if (config.scalabilityMode !== undefined)
|
|
29
|
+
clonedConfig.scalabilityMode = config.scalabilityMode;
|
|
30
|
+
if (config.bitrateMode !== undefined)
|
|
31
|
+
clonedConfig.bitrateMode = config.bitrateMode;
|
|
32
|
+
if (config.latencyMode !== undefined)
|
|
33
|
+
clonedConfig.latencyMode = config.latencyMode;
|
|
34
|
+
if (config.format !== undefined)
|
|
35
|
+
clonedConfig.format = config.format;
|
|
36
|
+
if (config.avc !== undefined)
|
|
37
|
+
clonedConfig.avc = { ...config.avc };
|
|
38
|
+
if (config.hevc !== undefined)
|
|
39
|
+
clonedConfig.hevc = { ...config.hevc };
|
|
40
|
+
if (config.av1 !== undefined)
|
|
41
|
+
clonedConfig.av1 = { ...config.av1 };
|
|
42
|
+
if (config.colorSpace !== undefined)
|
|
43
|
+
clonedConfig.colorSpace = { ...config.colorSpace };
|
|
44
|
+
if (config.maxQueueSize !== undefined)
|
|
45
|
+
clonedConfig.maxQueueSize = config.maxQueueSize;
|
|
46
|
+
if (config.contentHint !== undefined)
|
|
47
|
+
clonedConfig.contentHint = config.contentHint;
|
|
48
|
+
return clonedConfig;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Check dimension constraints for encoder config
|
|
52
|
+
*/
|
|
53
|
+
export function areDimensionsSupported(config) {
|
|
54
|
+
// Check for odd dimensions
|
|
55
|
+
// VP9 and AV1 (software) support odd dimensions, others require even for YUV420 subsampling
|
|
56
|
+
const hasOddDimension = config.width % 2 !== 0 || config.height % 2 !== 0;
|
|
57
|
+
if (hasOddDimension) {
|
|
58
|
+
const codecBase = getCodecBase(config.codec);
|
|
59
|
+
const isVp9 = codecBase === 'vp09';
|
|
60
|
+
const isAv1 = codecBase === 'av01';
|
|
61
|
+
const prefersHardware = config.hardwareAcceleration === 'prefer-hardware';
|
|
62
|
+
// VP9 and AV1 (software) can handle odd dimensions
|
|
63
|
+
// Hardware encoders generally cannot
|
|
64
|
+
const codecSupportsOddDimensions = (isVp9 || isAv1) && !prefersHardware;
|
|
65
|
+
if (!codecSupportsOddDimensions) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Check for unreasonably large dimensions
|
|
70
|
+
if (config.width > 16384 || config.height > 16384) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check if alpha channel is supported for the codec
|
|
77
|
+
*/
|
|
78
|
+
export function isAlphaSupported(config) {
|
|
79
|
+
if (config.alpha !== 'keep') {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
// Alpha channel support: only VP9 software encoding supports alpha
|
|
83
|
+
// H.264, HEVC, AV1 do not support alpha encoding
|
|
84
|
+
const parsed = parseCodec(config.codec);
|
|
85
|
+
return parsed.name === 'vp9' && config.hardwareAcceleration !== 'prefer-hardware';
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Check if quantizer bitrate mode is supported for the codec
|
|
89
|
+
*/
|
|
90
|
+
export function isQuantizerModeSupported(config) {
|
|
91
|
+
if (config.bitrateMode !== 'quantizer') {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
// Quantizer bitrate mode: only some codecs support CRF/CQ mode
|
|
95
|
+
// H.264, HEVC, VP9, AV1 support quantizer mode
|
|
96
|
+
// VP8 does not support quantizer mode (uses bitrate-based VBR only)
|
|
97
|
+
const parsed = parseCodec(config.codec);
|
|
98
|
+
return parsed.name === 'h264' || parsed.name === 'hevc' ||
|
|
99
|
+
parsed.name === 'vp9' || parsed.name === 'av1';
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Check if a VideoEncoderConfig is supported
|
|
103
|
+
*/
|
|
104
|
+
export async function checkConfigSupport(config) {
|
|
105
|
+
// Validate config - throws TypeError for invalid configs per spec
|
|
106
|
+
validateVideoEncoderConfig(config);
|
|
107
|
+
// Clone the config per WebCodecs spec
|
|
108
|
+
const clonedConfig = cloneConfig(config);
|
|
109
|
+
// Check dimension constraints
|
|
110
|
+
if (!areDimensionsSupported(config)) {
|
|
111
|
+
return { supported: false, config: clonedConfig };
|
|
112
|
+
}
|
|
113
|
+
// Validate codec string format and check if supported
|
|
114
|
+
const codecValidation = validateVideoCodec(config.codec);
|
|
115
|
+
if (!codecValidation.supported) {
|
|
116
|
+
return { supported: false, config: clonedConfig };
|
|
117
|
+
}
|
|
118
|
+
// Check alpha support
|
|
119
|
+
if (!isAlphaSupported(config)) {
|
|
120
|
+
return { supported: false, config: clonedConfig };
|
|
121
|
+
}
|
|
122
|
+
// Check quantizer mode support
|
|
123
|
+
if (!isQuantizerModeSupported(config)) {
|
|
124
|
+
return { supported: false, config: clonedConfig };
|
|
125
|
+
}
|
|
126
|
+
// scalabilityMode (SVC) is not supported
|
|
127
|
+
if (config.scalabilityMode !== undefined && config.scalabilityMode !== '') {
|
|
128
|
+
return { supported: false, config: clonedConfig };
|
|
129
|
+
}
|
|
130
|
+
return { supported: true, config: clonedConfig };
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/encoders/video/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VideoEncoder constants
|
|
3
|
+
*/
|
|
4
|
+
/** Default framerate for AV1 timestamp quantization */
|
|
5
|
+
export declare const DEFAULT_FRAMERATE = 30;
|
|
6
|
+
export declare const DEFAULT_FLUSH_TIMEOUT = 30000;
|
|
7
|
+
export declare const DEFAULT_MAX_QUEUE_SIZE = 100;
|
|
8
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/encoders/video/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,uDAAuD;AACvD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,sBAAsB,MAAM,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VideoEncoder constants
|
|
3
|
+
*/
|
|
4
|
+
/** Default framerate for AV1 timestamp quantization */
|
|
5
|
+
export const DEFAULT_FRAMERATE = 30;
|
|
6
|
+
export const DEFAULT_FLUSH_TIMEOUT = 30000;
|
|
7
|
+
export const DEFAULT_MAX_QUEUE_SIZE = 100; // Fallback if resolution unknown
|
|
8
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/encoders/video/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,uDAAuD;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAC3C,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC,CAAC,iCAAiC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Queue size calculation utilities for VideoEncoder
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Calculate optimal queue size based on resolution to limit memory usage.
|
|
6
|
+
* Target: ~250-500MB max memory for queued frames (RGBA format).
|
|
7
|
+
*/
|
|
8
|
+
export declare function calculateMaxQueueSize(width: number, height: number): number;
|
|
9
|
+
//# sourceMappingURL=queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../src/encoders/video/queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAU3E"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Queue size calculation utilities for VideoEncoder
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Calculate optimal queue size based on resolution to limit memory usage.
|
|
6
|
+
* Target: ~250-500MB max memory for queued frames (RGBA format).
|
|
7
|
+
*/
|
|
8
|
+
export function calculateMaxQueueSize(width, height) {
|
|
9
|
+
const pixels = width * height;
|
|
10
|
+
const rgbaFrameBytes = pixels * 4;
|
|
11
|
+
// Target max memory: ~300MB for queue
|
|
12
|
+
const targetMemory = 300 * 1024 * 1024;
|
|
13
|
+
const calculated = Math.floor(targetMemory / rgbaFrameBytes);
|
|
14
|
+
// Clamp between 4 (minimum for smooth operation) and 100 (legacy max)
|
|
15
|
+
return Math.max(4, Math.min(100, calculated));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/encoders/video/queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAa,EAAE,MAAc;IACjE,MAAM,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC9B,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,CAAC;IAElC,sCAAsC;IACtC,MAAM,YAAY,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,cAAc,CAAC,CAAC;IAE7D,sEAAsE;IACtE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VideoEncoder type definitions
|
|
3
|
+
*/
|
|
4
|
+
import type { EncodedVideoChunk } from '../../core/EncodedVideoChunk.js';
|
|
5
|
+
import type { VideoColorSpaceInit } from '../../formats/color-space.js';
|
|
6
|
+
export type CodecState = 'unconfigured' | 'configured' | 'closed';
|
|
7
|
+
/**
|
|
8
|
+
* AVC/H.264-specific encoder configuration
|
|
9
|
+
* https://www.w3.org/TR/webcodecs-avc-codec-registration/
|
|
10
|
+
*/
|
|
11
|
+
export interface AvcEncoderConfig {
|
|
12
|
+
/** Output format: 'avc' for AVCC (length-prefixed), 'annexb' for Annex B (start codes) */
|
|
13
|
+
format?: 'avc' | 'annexb';
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* HEVC/H.265-specific encoder configuration
|
|
17
|
+
* https://www.w3.org/TR/webcodecs-hevc-codec-registration/
|
|
18
|
+
*/
|
|
19
|
+
export interface HevcEncoderConfig {
|
|
20
|
+
/** Output format: 'hevc' for HVCC (length-prefixed), 'annexb' for Annex B (start codes) */
|
|
21
|
+
format?: 'hevc' | 'annexb';
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* AV1-specific encoder configuration
|
|
25
|
+
* https://www.w3.org/TR/webcodecs-av1-codec-registration/
|
|
26
|
+
*/
|
|
27
|
+
export interface Av1EncoderConfig {
|
|
28
|
+
/** Whether to force all frames to be keyframes (for screen sharing use cases) */
|
|
29
|
+
forceScreenContentTools?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface VideoEncoderConfig {
|
|
32
|
+
codec: string;
|
|
33
|
+
width: number;
|
|
34
|
+
height: number;
|
|
35
|
+
displayWidth?: number;
|
|
36
|
+
displayHeight?: number;
|
|
37
|
+
bitrate?: number;
|
|
38
|
+
framerate?: number;
|
|
39
|
+
hardwareAcceleration?: 'no-preference' | 'prefer-hardware' | 'prefer-software';
|
|
40
|
+
alpha?: 'discard' | 'keep';
|
|
41
|
+
scalabilityMode?: string;
|
|
42
|
+
bitrateMode?: 'constant' | 'variable' | 'quantizer';
|
|
43
|
+
latencyMode?: 'quality' | 'realtime';
|
|
44
|
+
/**
|
|
45
|
+
* Hint about the type of content being encoded.
|
|
46
|
+
* - 'text': Optimizes for text legibility (screen sharing with text)
|
|
47
|
+
* - 'detail': Optimizes for fine details (screen sharing with complex graphics)
|
|
48
|
+
* - 'motion': Optimizes for motion (camera video, animations)
|
|
49
|
+
*/
|
|
50
|
+
contentHint?: 'text' | 'detail' | 'motion';
|
|
51
|
+
/**
|
|
52
|
+
* @deprecated Use codec-specific config (avc.format, hevc.format) instead.
|
|
53
|
+
* Top-level format for backwards compatibility.
|
|
54
|
+
*/
|
|
55
|
+
format?: 'annexb' | 'mp4';
|
|
56
|
+
/** AVC/H.264-specific configuration */
|
|
57
|
+
avc?: AvcEncoderConfig;
|
|
58
|
+
/** HEVC/H.265-specific configuration */
|
|
59
|
+
hevc?: HevcEncoderConfig;
|
|
60
|
+
/** AV1-specific configuration */
|
|
61
|
+
av1?: Av1EncoderConfig;
|
|
62
|
+
/**
|
|
63
|
+
* Color space for HDR encoding. When provided with primaries, transfer, matrix,
|
|
64
|
+
* and HDR metadata (SMPTE ST 2086 / Content Light Level), the encoder will
|
|
65
|
+
* set appropriate color properties in the output stream.
|
|
66
|
+
*/
|
|
67
|
+
colorSpace?: VideoColorSpaceInit;
|
|
68
|
+
/**
|
|
69
|
+
* Maximum number of frames that can be queued before encode() throws.
|
|
70
|
+
* If not specified, automatically calculated based on resolution:
|
|
71
|
+
* - 720p and below: 50 frames (~185MB for RGBA)
|
|
72
|
+
* - 1080p: 30 frames (~250MB for RGBA)
|
|
73
|
+
* - 4K: 10 frames (~330MB for RGBA)
|
|
74
|
+
* - 8K: 4 frames (~530MB for RGBA)
|
|
75
|
+
*/
|
|
76
|
+
maxQueueSize?: number;
|
|
77
|
+
}
|
|
78
|
+
export interface VideoEncoderInit {
|
|
79
|
+
output: (chunk: EncodedVideoChunk, metadata?: VideoEncoderOutputMetadata) => void;
|
|
80
|
+
error: (error: Error) => void;
|
|
81
|
+
}
|
|
82
|
+
export interface VideoEncoderOutputMetadata {
|
|
83
|
+
decoderConfig?: {
|
|
84
|
+
codec: string;
|
|
85
|
+
description?: Uint8Array;
|
|
86
|
+
codedWidth?: number;
|
|
87
|
+
codedHeight?: number;
|
|
88
|
+
displayAspectWidth?: number;
|
|
89
|
+
displayAspectHeight?: number;
|
|
90
|
+
colorSpace?: VideoColorSpaceInit;
|
|
91
|
+
/** Frame rotation from first encoded frame */
|
|
92
|
+
rotation?: 0 | 90 | 180 | 270;
|
|
93
|
+
/** Frame flip from first encoded frame */
|
|
94
|
+
flip?: boolean;
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export interface VideoEncoderSupport {
|
|
98
|
+
supported: boolean;
|
|
99
|
+
config: VideoEncoderConfig;
|
|
100
|
+
}
|
|
101
|
+
export interface VideoEncoderEncodeOptions {
|
|
102
|
+
keyFrame?: boolean;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/encoders/video/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAExE,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,YAAY,GAAG,QAAQ,CAAC;AAElE;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0FAA0F;IAC1F,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,2FAA2F;IAC3F,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iFAAiF;IACjF,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,eAAe,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;IAC/E,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IACpD,WAAW,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACrC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3C;;;OAGG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC1B,uCAAuC;IACvC,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB,wCAAwC;IACxC,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,iCAAiC;IACjC,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB;;;;OAIG;IACH,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,CAAC,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAClF,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,CAAC,EAAE;QACd,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,UAAU,CAAC;QACzB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,UAAU,CAAC,EAAE,mBAAmB,CAAC;QACjC,8CAA8C;QAC9C,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;QAC9B,0CAA0C;QAC1C,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB"}
|