webcodecs-node 0.7.5 → 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 +12 -4
- 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/containers/NodeAvMuxer.d.ts +7 -0
- package/dist/containers/NodeAvMuxer.d.ts.map +1 -1
- package/dist/containers/NodeAvMuxer.js +127 -7
- package/dist/containers/NodeAvMuxer.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 +16 -10
- package/dist/core/VideoFrame.d.ts.map +1 -1
- package/dist/core/VideoFrame.js +238 -129
- 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 +2 -38
- package/dist/decoders/VideoDecoder.d.ts.map +1 -1
- package/dist/decoders/VideoDecoder.js +120 -120
- 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 +2 -28
- package/dist/encoders/AudioEncoder.d.ts.map +1 -1
- package/dist/encoders/AudioEncoder.js +80 -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/types.d.ts.map +1 -1
- package/dist/hardware/types.js +8 -2
- package/dist/hardware/types.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/codec-validation.d.ts +3 -28
- package/dist/utils/codec-validation.d.ts.map +1 -1
- package/dist/utils/codec-validation.js +4 -248
- package/dist/utils/codec-validation.js.map +1 -1
- package/docs/api.md +4 -2
- package/docs/architecture-refactor-plan.md +149 -0
- package/docs/architecture.md +258 -0
- package/package.json +6 -4
- package/dist/config/ffmpeg-quality.d.ts +0 -23
- package/dist/config/ffmpeg-quality.d.ts.map +0 -1
- package/dist/config/ffmpeg-quality.js +0 -15
- package/dist/config/ffmpeg-quality.js.map +0 -1
- package/dist/containers/FFmpegSpawnMuxer.d.ts +0 -42
- package/dist/containers/FFmpegSpawnMuxer.d.ts.map +0 -1
- package/dist/containers/FFmpegSpawnMuxer.js +0 -311
- package/dist/containers/FFmpegSpawnMuxer.js.map +0 -1
- package/dist/containers/FallbackMuxer.d.ts +0 -42
- package/dist/containers/FallbackMuxer.d.ts.map +0 -1
- package/dist/containers/FallbackMuxer.js +0 -311
- package/dist/containers/FallbackMuxer.js.map +0 -1
- package/dist/containers/MuxerWithFallback.d.ts +0 -110
- package/dist/containers/MuxerWithFallback.d.ts.map +0 -1
- package/dist/containers/MuxerWithFallback.js +0 -239
- package/dist/containers/MuxerWithFallback.js.map +0 -1
- package/dist/demos/demo-audio-visualizer-mediabunny.d.ts +0 -10
- package/dist/demos/demo-audio-visualizer-mediabunny.d.ts.map +0 -1
- package/dist/demos/demo-audio-visualizer-mediabunny.js +0 -357
- package/dist/demos/demo-audio-visualizer-mediabunny.js.map +0 -1
- package/dist/demos/demo-audio-visualizer-nodeav.d.ts +0 -10
- package/dist/demos/demo-audio-visualizer-nodeav.d.ts.map +0 -1
- package/dist/demos/demo-audio-visualizer-nodeav.js +0 -318
- package/dist/demos/demo-audio-visualizer-nodeav.js.map +0 -1
- package/dist/demos/demo-muxer-fallback.d.ts +0 -8
- package/dist/demos/demo-muxer-fallback.d.ts.map +0 -1
- package/dist/demos/demo-muxer-fallback.js +0 -165
- package/dist/demos/demo-muxer-fallback.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
|
@@ -1,253 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Codec string validation according to WebCodecs specification
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - Fully qualified codec strings (no ambiguous "vp9", must be "vp09.xx.xx.xx")
|
|
7
|
-
* - Valid profile/level parameters
|
|
8
|
-
*
|
|
9
|
-
* @see https://www.w3.org/TR/webcodecs-codec-registry/
|
|
10
|
-
*/
|
|
11
|
-
/**
|
|
12
|
-
* Validate a video codec string according to WebCodecs spec
|
|
13
|
-
*
|
|
14
|
-
* Returns { valid: true, supported: true } for valid, supported codecs
|
|
15
|
-
* Returns { valid: true, supported: false } for valid but unsupported codecs
|
|
16
|
-
* Returns { valid: false, supported: false } for invalid codec strings
|
|
17
|
-
*/
|
|
18
|
-
export function validateVideoCodec(codec) {
|
|
19
|
-
// Check for whitespace (invalid)
|
|
20
|
-
if (codec !== codec.trim()) {
|
|
21
|
-
return { valid: true, supported: false, error: 'Codec string contains whitespace' };
|
|
22
|
-
}
|
|
23
|
-
// Check for MIME type format (invalid for WebCodecs)
|
|
24
|
-
if (codec.includes('/') || codec.includes(';')) {
|
|
25
|
-
return { valid: true, supported: false, error: 'MIME type format not accepted' };
|
|
26
|
-
}
|
|
27
|
-
// AVC/H.264: avc1.PPCCLL or avc3.PPCCLL
|
|
28
|
-
if (codec.startsWith('avc1.') || codec.startsWith('avc3.')) {
|
|
29
|
-
return validateAvcCodec(codec);
|
|
30
|
-
}
|
|
31
|
-
// HEVC/H.265: hvc1.P.T.Lxx or hev1.P.T.Lxx
|
|
32
|
-
if (codec.startsWith('hvc1.') || codec.startsWith('hev1.')) {
|
|
33
|
-
return validateHevcCodec(codec);
|
|
34
|
-
}
|
|
35
|
-
// VP8: exactly "vp8"
|
|
36
|
-
if (codec === 'vp8') {
|
|
37
|
-
return { valid: true, supported: true };
|
|
38
|
-
}
|
|
39
|
-
// VP8 with wrong casing
|
|
40
|
-
if (codec.toLowerCase() === 'vp8' && codec !== 'vp8') {
|
|
41
|
-
return { valid: true, supported: false, error: 'VP8 codec must be lowercase "vp8"' };
|
|
42
|
-
}
|
|
43
|
-
// VP9: fully qualified vp09.PP.LL.DD or shorthand "vp9"
|
|
44
|
-
if (codec.startsWith('vp09.')) {
|
|
45
|
-
return validateVp9Codec(codec);
|
|
46
|
-
}
|
|
47
|
-
// Accept shorthand "vp9" as alias for vp09.00.10.08 (profile 0, level 1.0, 8-bit)
|
|
48
|
-
// This matches browser behavior for developer convenience
|
|
49
|
-
if (codec === 'vp9') {
|
|
50
|
-
return { valid: true, supported: true };
|
|
51
|
-
}
|
|
52
|
-
// VP9 with wrong casing
|
|
53
|
-
if (codec.toLowerCase() === 'vp9' && codec !== 'vp9') {
|
|
54
|
-
return { valid: true, supported: false, error: 'VP9 codec must be lowercase "vp9"' };
|
|
55
|
-
}
|
|
56
|
-
// AV1: fully qualified av01.P.LLT.DD or shorthand "av1"
|
|
57
|
-
if (codec.startsWith('av01.')) {
|
|
58
|
-
return validateAv1Codec(codec);
|
|
59
|
-
}
|
|
60
|
-
// Accept shorthand "av1" as alias for av01.0.01M.08 (Main profile, level 2.1, Main tier, 8-bit)
|
|
61
|
-
// This matches browser behavior for developer convenience
|
|
62
|
-
if (codec === 'av1') {
|
|
63
|
-
return { valid: true, supported: true };
|
|
64
|
-
}
|
|
65
|
-
// AV1 with wrong casing
|
|
66
|
-
if (codec.toLowerCase() === 'av1' && codec !== 'av1') {
|
|
67
|
-
return { valid: true, supported: false, error: 'AV1 codec must be lowercase "av1"' };
|
|
68
|
-
}
|
|
69
|
-
// Unknown codec
|
|
70
|
-
return { valid: true, supported: false, error: `Unrecognized codec: ${codec}` };
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Validate AVC/H.264 codec string
|
|
74
|
-
* Format: avc1.PPCCLL or avc3.PPCCLL
|
|
75
|
-
* PP = Profile (hex), CC = Constraints (hex), LL = Level (hex)
|
|
76
|
-
*/
|
|
77
|
-
function validateAvcCodec(codec) {
|
|
78
|
-
// avc1.XXXXXX or avc3.XXXXXX (6 hex digits)
|
|
79
|
-
const match = codec.match(/^(avc[13])\.([0-9A-Fa-f]{6})$/);
|
|
80
|
-
if (!match) {
|
|
81
|
-
return { valid: true, supported: false, error: 'Invalid AVC codec format' };
|
|
82
|
-
}
|
|
83
|
-
const [, prefix, params] = match;
|
|
84
|
-
// Check case sensitivity of prefix
|
|
85
|
-
if (prefix !== prefix.toLowerCase()) {
|
|
86
|
-
return { valid: true, supported: false, error: 'AVC codec prefix must be lowercase' };
|
|
87
|
-
}
|
|
88
|
-
// Parse profile, constraints, level
|
|
89
|
-
const profile = parseInt(params.substring(0, 2), 16);
|
|
90
|
-
const constraints = parseInt(params.substring(2, 4), 16);
|
|
91
|
-
const level = parseInt(params.substring(4, 6), 16);
|
|
92
|
-
// Valid profiles: 66 (Baseline), 77 (Main), 88 (Extended), 100 (High), etc.
|
|
93
|
-
const validProfiles = [66, 77, 88, 100, 110, 122, 244, 44, 83, 86, 118, 128, 138, 139, 134];
|
|
94
|
-
if (!validProfiles.includes(profile)) {
|
|
95
|
-
// Future/unknown profile - mark as unsupported
|
|
96
|
-
return { valid: true, supported: false, error: `Unknown AVC profile: ${profile}` };
|
|
97
|
-
}
|
|
98
|
-
// Valid levels: 10, 11, 12, 13, 20, 21, 22, 30, 31, 32, 40, 41, 42, 50, 51, 52, 60, 61, 62
|
|
99
|
-
const validLevels = [10, 11, 12, 13, 20, 21, 22, 30, 31, 32, 40, 41, 42, 50, 51, 52, 60, 61, 62];
|
|
100
|
-
if (!validLevels.includes(level)) {
|
|
101
|
-
// Note: level 29 (0x1D) is not a valid H.264 level
|
|
102
|
-
return { valid: true, supported: false, error: `Unknown AVC level: ${level}` };
|
|
103
|
-
}
|
|
104
|
-
return { valid: true, supported: true };
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Validate HEVC/H.265 codec string
|
|
108
|
-
* Format: hvc1.P.C.Lxx[.XX] or hev1.P.C.Lxx[.XX]
|
|
109
|
-
* Where P = profile, C = compatibility, Lxx = level, XX = optional constraints
|
|
110
|
-
* Example: hev1.1.6.L93.B0
|
|
111
|
-
*/
|
|
112
|
-
function validateHevcCodec(codec) {
|
|
113
|
-
// HEVC codec format: prefix.profile.compatibility.level[.constraints]
|
|
114
|
-
// Examples: hev1.1.6.L93.B0, hvc1.1.6.L120, hev1.2.4.L153.90
|
|
115
|
-
const match = codec.match(/^(hvc1|hev1)\.(\d+)\.([0-9A-Fa-f]+)\.L(\d+)(?:\.([A-Za-z0-9]+))?$/);
|
|
116
|
-
if (!match) {
|
|
117
|
-
return { valid: true, supported: false, error: 'Invalid HEVC codec format' };
|
|
118
|
-
}
|
|
119
|
-
const [, prefix, profileStr, , levelStr] = match;
|
|
120
|
-
// Check case sensitivity of prefix
|
|
121
|
-
if (prefix !== prefix.toLowerCase()) {
|
|
122
|
-
return { valid: true, supported: false, error: 'HEVC codec prefix must be lowercase' };
|
|
123
|
-
}
|
|
124
|
-
const profile = parseInt(profileStr, 10);
|
|
125
|
-
const level = parseInt(levelStr, 10);
|
|
126
|
-
// Valid HEVC profiles: 1 (Main), 2 (Main 10), 3 (Main Still Picture), etc.
|
|
127
|
-
if (profile < 1 || profile > 11) {
|
|
128
|
-
return { valid: true, supported: false, error: `Unknown HEVC profile: ${profile}` };
|
|
129
|
-
}
|
|
130
|
-
// Valid HEVC levels (level * 30): 30, 60, 63, 90, 93, 120, 123, 150, 153, 156, 180, 183, 186
|
|
131
|
-
const validLevels = [30, 60, 63, 90, 93, 120, 123, 150, 153, 156, 180, 183, 186];
|
|
132
|
-
if (!validLevels.includes(level)) {
|
|
133
|
-
return { valid: true, supported: false, error: `Unknown HEVC level: ${level}` };
|
|
134
|
-
}
|
|
135
|
-
return { valid: true, supported: true };
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Validate VP9 codec string
|
|
139
|
-
* Format: vp09.PP.LL.DD
|
|
140
|
-
* PP = Profile (00-03), LL = Level (10-62), DD = Bit depth (08, 10, 12)
|
|
141
|
-
*/
|
|
142
|
-
function validateVp9Codec(codec) {
|
|
143
|
-
const match = codec.match(/^vp09\.(\d{2})\.(\d{2})\.(\d{2})$/);
|
|
144
|
-
if (!match) {
|
|
145
|
-
return { valid: true, supported: false, error: 'Invalid VP9 codec format, expected vp09.PP.LL.DD' };
|
|
146
|
-
}
|
|
147
|
-
const [, profileStr, levelStr, bitDepthStr] = match;
|
|
148
|
-
const profile = parseInt(profileStr, 10);
|
|
149
|
-
const level = parseInt(levelStr, 10);
|
|
150
|
-
const bitDepth = parseInt(bitDepthStr, 10);
|
|
151
|
-
// Valid profiles: 0, 1, 2, 3
|
|
152
|
-
if (profile < 0 || profile > 3) {
|
|
153
|
-
return { valid: true, supported: false, error: `Unknown VP9 profile: ${profile}` };
|
|
154
|
-
}
|
|
155
|
-
// Valid levels: 10, 11, 20, 21, 30, 31, 40, 41, 50, 51, 52, 60, 61, 62
|
|
156
|
-
const validLevels = [10, 11, 20, 21, 30, 31, 40, 41, 50, 51, 52, 60, 61, 62];
|
|
157
|
-
if (!validLevels.includes(level)) {
|
|
158
|
-
return { valid: true, supported: false, error: `Unknown VP9 level: ${level}` };
|
|
159
|
-
}
|
|
160
|
-
// Valid bit depths: 8, 10, 12
|
|
161
|
-
if (bitDepth !== 8 && bitDepth !== 10 && bitDepth !== 12) {
|
|
162
|
-
return { valid: true, supported: false, error: `Unknown VP9 bit depth: ${bitDepth}` };
|
|
163
|
-
}
|
|
164
|
-
return { valid: true, supported: true };
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Validate AV1 codec string
|
|
168
|
-
* Format: av01.P.LLT.DD
|
|
169
|
-
* P = Profile (0=Main, 1=High, 2=Professional)
|
|
170
|
-
* LL = Level (00-23)
|
|
171
|
-
* T = Tier (M=Main, H=High)
|
|
172
|
-
* DD = Bit depth (08, 10, 12)
|
|
173
|
-
*/
|
|
174
|
-
function validateAv1Codec(codec) {
|
|
175
|
-
const match = codec.match(/^av01\.(\d)\.(\d{2})([MH])\.(\d{2})$/);
|
|
176
|
-
if (!match) {
|
|
177
|
-
return { valid: true, supported: false, error: 'Invalid AV1 codec format, expected av01.P.LLT.DD' };
|
|
178
|
-
}
|
|
179
|
-
const [, profileStr, levelStr, tier, bitDepthStr] = match;
|
|
180
|
-
const profile = parseInt(profileStr, 10);
|
|
181
|
-
const level = parseInt(levelStr, 10);
|
|
182
|
-
const bitDepth = parseInt(bitDepthStr, 10);
|
|
183
|
-
// Valid profiles: 0 (Main), 1 (High), 2 (Professional)
|
|
184
|
-
if (profile < 0 || profile > 2) {
|
|
185
|
-
return { valid: true, supported: false, error: `Unknown AV1 profile: ${profile}` };
|
|
186
|
-
}
|
|
187
|
-
// Valid levels: 0-23 (0=2.0, 1=2.1, ..., 23=7.3)
|
|
188
|
-
if (level < 0 || level > 23) {
|
|
189
|
-
return { valid: true, supported: false, error: `Unknown AV1 level: ${level}` };
|
|
190
|
-
}
|
|
191
|
-
// Valid bit depths: 8, 10, 12
|
|
192
|
-
if (bitDepth !== 8 && bitDepth !== 10 && bitDepth !== 12) {
|
|
193
|
-
return { valid: true, supported: false, error: `Unknown AV1 bit depth: ${bitDepth}` };
|
|
194
|
-
}
|
|
195
|
-
return { valid: true, supported: true };
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Check if a codec config is valid (should throw TypeError if invalid)
|
|
199
|
-
* This checks for missing/empty required fields
|
|
200
|
-
*/
|
|
201
|
-
export function validateVideoDecoderConfig(config) {
|
|
202
|
-
if (!config || typeof config !== 'object') {
|
|
203
|
-
throw new TypeError('config must be an object');
|
|
204
|
-
}
|
|
205
|
-
const cfg = config;
|
|
206
|
-
if (cfg.codec === undefined || cfg.codec === null) {
|
|
207
|
-
throw new TypeError('codec is required');
|
|
208
|
-
}
|
|
209
|
-
if (typeof cfg.codec !== 'string' || cfg.codec === '') {
|
|
210
|
-
throw new TypeError('codec must be a non-empty string');
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Check if an encoder config is valid (should throw TypeError if invalid)
|
|
4
|
+
* @deprecated Import from '../codecs/validation' instead for new code.
|
|
5
|
+
* This file re-exports from the new modular structure for backward compatibility.
|
|
215
6
|
*/
|
|
216
|
-
export
|
|
217
|
-
|
|
218
|
-
throw new TypeError('config must be an object');
|
|
219
|
-
}
|
|
220
|
-
const cfg = config;
|
|
221
|
-
if (cfg.codec === undefined || cfg.codec === null) {
|
|
222
|
-
throw new TypeError('codec is required');
|
|
223
|
-
}
|
|
224
|
-
if (typeof cfg.codec !== 'string' || cfg.codec === '') {
|
|
225
|
-
throw new TypeError('codec must be a non-empty string');
|
|
226
|
-
}
|
|
227
|
-
if (cfg.width === undefined || cfg.width === null) {
|
|
228
|
-
throw new TypeError('width is required');
|
|
229
|
-
}
|
|
230
|
-
if (typeof cfg.width !== 'number' || cfg.width <= 0 || !Number.isFinite(cfg.width)) {
|
|
231
|
-
throw new TypeError('width must be a positive number');
|
|
232
|
-
}
|
|
233
|
-
if (cfg.height === undefined || cfg.height === null) {
|
|
234
|
-
throw new TypeError('height is required');
|
|
235
|
-
}
|
|
236
|
-
if (typeof cfg.height !== 'number' || cfg.height <= 0 || !Number.isFinite(cfg.height)) {
|
|
237
|
-
throw new TypeError('height must be a positive number');
|
|
238
|
-
}
|
|
239
|
-
// Optional field validations
|
|
240
|
-
if (cfg.displayWidth !== undefined && (typeof cfg.displayWidth !== 'number' || cfg.displayWidth <= 0)) {
|
|
241
|
-
throw new TypeError('displayWidth must be a positive number');
|
|
242
|
-
}
|
|
243
|
-
if (cfg.displayHeight !== undefined && (typeof cfg.displayHeight !== 'number' || cfg.displayHeight <= 0)) {
|
|
244
|
-
throw new TypeError('displayHeight must be a positive number');
|
|
245
|
-
}
|
|
246
|
-
if (cfg.bitrate !== undefined && (typeof cfg.bitrate !== 'number' || cfg.bitrate <= 0)) {
|
|
247
|
-
throw new TypeError('bitrate must be a positive number');
|
|
248
|
-
}
|
|
249
|
-
if (cfg.framerate !== undefined && (typeof cfg.framerate !== 'number' || cfg.framerate <= 0)) {
|
|
250
|
-
throw new TypeError('framerate must be a positive number');
|
|
251
|
-
}
|
|
252
|
-
}
|
|
7
|
+
// Re-export everything from the new modular structure
|
|
8
|
+
export * from '../codecs/validation/index.js';
|
|
253
9
|
//# sourceMappingURL=codec-validation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec-validation.js","sourceRoot":"","sources":["../../src/utils/codec-validation.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"codec-validation.js","sourceRoot":"","sources":["../../src/utils/codec-validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sDAAsD;AACtD,cAAc,+BAA+B,CAAC"}
|
package/docs/api.md
CHANGED
|
@@ -400,10 +400,12 @@ new VideoFrame(data: BufferSource, init: VideoFrameBufferInit)
|
|
|
400
400
|
|
|
401
401
|
*10-bit formats (HDR):*
|
|
402
402
|
- `'I420P10'` - YUV 4:2:0 planar, 10-bit (16-bit container)
|
|
403
|
-
- `'I422P10'` - YUV 4:2:2 planar, 10-bit (16-bit container)
|
|
404
|
-
- `'I444P10'` - YUV 4:4:4 planar, 10-bit (16-bit container)
|
|
403
|
+
- `'I422P10'` - YUV 4:2:2 planar, 10-bit (16-bit container) - downconverted to 4:2:0 during encoding
|
|
404
|
+
- `'I444P10'` - YUV 4:4:4 planar, 10-bit (16-bit container) - downconverted to 4:2:0 during encoding
|
|
405
405
|
- `'P010'` - YUV 4:2:0 semi-planar, 10-bit (16-bit container)
|
|
406
406
|
|
|
407
|
+
> **Note:** 10-bit encoding requires HEVC, VP9, or AV1 codec. H.264 will downconvert to 8-bit. I422P10/I444P10 are decoded correctly but downconverted to I420P10 during encoding.
|
|
408
|
+
|
|
407
409
|
### Instance Methods
|
|
408
410
|
|
|
409
411
|
#### `allocationSize(options?: VideoFrameCopyToOptions): number`
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Architecture Refactor Plan (No Behavior Changes)
|
|
2
|
+
|
|
3
|
+
This document proposes a structural refactor to make the project more human-manageable by reducing large files and creating self-contained modules. It does **not** change runtime behavior; it only reorganizes code and responsibilities.
|
|
4
|
+
|
|
5
|
+
## Goals
|
|
6
|
+
- Reduce large multi-responsibility files into focused modules.
|
|
7
|
+
- Make each module easy to read, test, and modify in isolation.
|
|
8
|
+
- Keep public API surface and exports stable.
|
|
9
|
+
- Enable incremental migration without breaking tests.
|
|
10
|
+
|
|
11
|
+
## Target Layout (Proposed)
|
|
12
|
+
```
|
|
13
|
+
src/
|
|
14
|
+
api/
|
|
15
|
+
index.ts
|
|
16
|
+
core/
|
|
17
|
+
audio-data/
|
|
18
|
+
AudioData.ts
|
|
19
|
+
index.ts
|
|
20
|
+
encoded-chunk/
|
|
21
|
+
EncodedAudioChunk.ts
|
|
22
|
+
EncodedVideoChunk.ts
|
|
23
|
+
index.ts
|
|
24
|
+
video-frame/
|
|
25
|
+
VideoFrame.ts
|
|
26
|
+
canvas-source.ts
|
|
27
|
+
copy.ts
|
|
28
|
+
layout.ts
|
|
29
|
+
metadata.ts
|
|
30
|
+
orientation.ts
|
|
31
|
+
transfer.ts
|
|
32
|
+
validation.ts
|
|
33
|
+
index.ts
|
|
34
|
+
decoders/
|
|
35
|
+
audio/
|
|
36
|
+
AudioDecoder.ts
|
|
37
|
+
config.ts
|
|
38
|
+
output.ts
|
|
39
|
+
queue.ts
|
|
40
|
+
index.ts
|
|
41
|
+
video/
|
|
42
|
+
VideoDecoder.ts
|
|
43
|
+
codec-specific.ts
|
|
44
|
+
config.ts
|
|
45
|
+
output.ts
|
|
46
|
+
queue.ts
|
|
47
|
+
timestamps.ts
|
|
48
|
+
index.ts
|
|
49
|
+
image/
|
|
50
|
+
ImageDecoder.ts
|
|
51
|
+
orientation.ts
|
|
52
|
+
stream.ts
|
|
53
|
+
tracks.ts
|
|
54
|
+
index.ts
|
|
55
|
+
encoders/
|
|
56
|
+
audio/
|
|
57
|
+
AudioEncoder.ts
|
|
58
|
+
config.ts
|
|
59
|
+
output.ts
|
|
60
|
+
queue.ts
|
|
61
|
+
index.ts
|
|
62
|
+
video/
|
|
63
|
+
VideoEncoder.ts
|
|
64
|
+
config.ts
|
|
65
|
+
metadata.ts
|
|
66
|
+
orientation.ts
|
|
67
|
+
queue.ts
|
|
68
|
+
timestamps.ts
|
|
69
|
+
index.ts
|
|
70
|
+
backends/
|
|
71
|
+
node-av/
|
|
72
|
+
audio/
|
|
73
|
+
decoder.ts
|
|
74
|
+
encoder.ts
|
|
75
|
+
video/
|
|
76
|
+
decoder.ts
|
|
77
|
+
encoder.ts
|
|
78
|
+
filters.ts
|
|
79
|
+
mappings.ts
|
|
80
|
+
timestamps.ts
|
|
81
|
+
image/
|
|
82
|
+
decoder.ts
|
|
83
|
+
index.ts
|
|
84
|
+
formats/
|
|
85
|
+
pixel-format/
|
|
86
|
+
helpers.ts
|
|
87
|
+
layout.ts
|
|
88
|
+
sizes.ts
|
|
89
|
+
types.ts
|
|
90
|
+
index.ts
|
|
91
|
+
color-space/
|
|
92
|
+
convert.ts
|
|
93
|
+
extract.ts
|
|
94
|
+
maps.ts
|
|
95
|
+
types.ts
|
|
96
|
+
index.ts
|
|
97
|
+
conversions/
|
|
98
|
+
frame-converter.ts
|
|
99
|
+
codecs/
|
|
100
|
+
avc.ts
|
|
101
|
+
hevc.ts
|
|
102
|
+
aac.ts
|
|
103
|
+
transfer/
|
|
104
|
+
detach.ts
|
|
105
|
+
validate.ts
|
|
106
|
+
index.ts
|
|
107
|
+
validation/
|
|
108
|
+
audio-decoder.ts
|
|
109
|
+
audio-encoder.ts
|
|
110
|
+
video-decoder.ts
|
|
111
|
+
video-encoder.ts
|
|
112
|
+
index.ts
|
|
113
|
+
utils/
|
|
114
|
+
buffer.ts
|
|
115
|
+
buffer-pool.ts
|
|
116
|
+
errors.ts
|
|
117
|
+
event-target.ts
|
|
118
|
+
logger.ts
|
|
119
|
+
timeout.ts
|
|
120
|
+
type-guards.ts
|
|
121
|
+
index.ts
|
|
122
|
+
types/
|
|
123
|
+
index.ts
|
|
124
|
+
index.ts
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Mapping Highlights (Move / Split)
|
|
128
|
+
- `src/core/VideoFrame.ts` → `src/core/video-frame/VideoFrame.ts` + `validation.ts` + `layout.ts` + `copy.ts` + `orientation.ts` + `transfer.ts` + `canvas-source.ts`.
|
|
129
|
+
- `src/decoders/ImageDecoder.ts` → `src/decoders/image/ImageDecoder.ts` + `tracks.ts` + `stream.ts` + `orientation.ts`.
|
|
130
|
+
- `src/decoders/VideoDecoder.ts` → `src/decoders/video/VideoDecoder.ts` + `config.ts` + `codec-specific.ts` + `queue.ts` + `output.ts`.
|
|
131
|
+
- `src/encoders/VideoEncoder.ts` → `src/encoders/video/VideoEncoder.ts` + `config.ts` + `metadata.ts` + `queue.ts`.
|
|
132
|
+
- `src/node-av/NodeAvVideoDecoder.ts` → `src/backends/node-av/video/decoder.ts` + `filters.ts` + `mappings.ts` + `timestamps.ts`.
|
|
133
|
+
- `src/formats/color-space.ts` → `src/formats/color-space/{maps,extract,convert}.ts`.
|
|
134
|
+
- `src/formats/pixel-formats.ts` → `src/formats/pixel-format/{types,sizes,layout,helpers}.ts`.
|
|
135
|
+
- `src/codec-utils/*` + `src/utils/{avc,hevc,aac}.ts` → `src/codecs/` and `src/backends/node-av/*/mappings.ts`.
|
|
136
|
+
|
|
137
|
+
## Migration Checklist (Incremental, No Behavior Change)
|
|
138
|
+
1) Create new folders and `index.ts` barrels that re-export existing symbols.
|
|
139
|
+
2) Extract pure helpers first (validation, layout, mapping, transfer), leaving public classes untouched.
|
|
140
|
+
3) Move backend-specific logic into `src/backends/node-av/`, keeping thin adapters in old paths.
|
|
141
|
+
4) Convert large classes into orchestrators that delegate to the new modules.
|
|
142
|
+
5) Update internal imports incrementally; keep public exports stable from `src/index.ts`.
|
|
143
|
+
6) Add `docs/architecture.md` with module boundaries and ownership rules.
|
|
144
|
+
7) Enforce file size/complexity thresholds in lint/CI to prevent future bloat.
|
|
145
|
+
|
|
146
|
+
## Optional Guardrails
|
|
147
|
+
- Add a maximum file size or function length lint rule for `core/`, `decoders/`, `encoders/`, and `node-av/`.
|
|
148
|
+
- Require new helper functions to live outside public classes unless they are public API.
|
|
149
|
+
- Prefer one responsibility per module (validation, mapping, conversion, orchestration).
|