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,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AudioDecoder configuration validation and support checking
|
|
3
|
+
*/
|
|
4
|
+
import { AUDIO_DECODER_CODEC_MAP, AUDIO_OUTPUT_FORMAT_MAP } from '../../codec-utils/audio-codecs.js';
|
|
5
|
+
import { getCodecBase } from '../../utils/codec-cache.js';
|
|
6
|
+
/**
|
|
7
|
+
* Validate required AudioDecoderConfig 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 'AudioDecoderConfig': 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 'AudioDecoderConfig': 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 'AudioDecoderConfig': 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 description buffer is not detached
|
|
34
|
+
* Uses the 'detached' property (Node.js 20+) when available.
|
|
35
|
+
* On Node <20, we can only detect detachment via view/buffer mismatch.
|
|
36
|
+
*/
|
|
37
|
+
export function validateDescription(config) {
|
|
38
|
+
if (config.description !== undefined) {
|
|
39
|
+
const desc = config.description;
|
|
40
|
+
if (desc instanceof ArrayBuffer) {
|
|
41
|
+
// Use the 'detached' property if available (Node.js 20+)
|
|
42
|
+
if ('detached' in desc && desc.detached === true) {
|
|
43
|
+
throw new TypeError('description buffer is detached');
|
|
44
|
+
}
|
|
45
|
+
// On Node <20, we cannot reliably detect detachment for ArrayBuffers
|
|
46
|
+
// without false positives on new ArrayBuffer(0).
|
|
47
|
+
}
|
|
48
|
+
else if (ArrayBuffer.isView(desc)) {
|
|
49
|
+
// Use the 'detached' property if available (Node.js 20+)
|
|
50
|
+
if ('detached' in desc.buffer && desc.buffer.detached === true) {
|
|
51
|
+
throw new TypeError('description buffer is detached');
|
|
52
|
+
}
|
|
53
|
+
// Also check for views that reference detached buffers:
|
|
54
|
+
// If buffer.byteLength is 0 but view.byteLength is not, the buffer is definitely detached
|
|
55
|
+
if (desc.buffer.byteLength === 0 && desc.byteLength !== 0) {
|
|
56
|
+
throw new TypeError('description buffer is detached');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Clone an AudioDecoderConfig per WebCodecs spec
|
|
63
|
+
*/
|
|
64
|
+
export function cloneConfig(config) {
|
|
65
|
+
const clonedConfig = {
|
|
66
|
+
codec: config.codec,
|
|
67
|
+
sampleRate: config.sampleRate,
|
|
68
|
+
numberOfChannels: config.numberOfChannels,
|
|
69
|
+
};
|
|
70
|
+
// Copy description if provided (clone the buffer)
|
|
71
|
+
if (config.description !== undefined) {
|
|
72
|
+
const desc = config.description;
|
|
73
|
+
if (desc instanceof ArrayBuffer) {
|
|
74
|
+
clonedConfig.description = desc.slice(0);
|
|
75
|
+
}
|
|
76
|
+
else if (ArrayBuffer.isView(desc)) {
|
|
77
|
+
// Create a new Uint8Array copy to ensure we have an ArrayBuffer
|
|
78
|
+
const copy = new Uint8Array(desc.byteLength);
|
|
79
|
+
copy.set(new Uint8Array(desc.buffer, desc.byteOffset, desc.byteLength));
|
|
80
|
+
clonedConfig.description = copy.buffer;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Copy outputFormat if valid
|
|
84
|
+
if (config.outputFormat !== undefined) {
|
|
85
|
+
if (config.outputFormat in AUDIO_OUTPUT_FORMAT_MAP) {
|
|
86
|
+
clonedConfig.outputFormat = config.outputFormat;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
throw new TypeError(`Invalid outputFormat: ${config.outputFormat}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return clonedConfig;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Check if an AudioDecoderConfig is supported
|
|
96
|
+
*/
|
|
97
|
+
export async function checkConfigSupport(config) {
|
|
98
|
+
// Validate required fields and types - throw TypeError for invalid types
|
|
99
|
+
validateRequiredFields(config);
|
|
100
|
+
// Validate description is not detached
|
|
101
|
+
validateDescription(config);
|
|
102
|
+
// Clone the config per WebCodecs spec (strip unknown fields)
|
|
103
|
+
const clonedConfig = cloneConfig(config);
|
|
104
|
+
const codecBase = getCodecBase(config.codec);
|
|
105
|
+
// Opus with >2 channels requires description (mapping table)
|
|
106
|
+
if (codecBase === 'opus' && config.numberOfChannels > 2 && config.description === undefined) {
|
|
107
|
+
return { supported: false, config: clonedConfig };
|
|
108
|
+
}
|
|
109
|
+
const supported = codecBase in AUDIO_DECODER_CODEC_MAP || config.codec in AUDIO_DECODER_CODEC_MAP;
|
|
110
|
+
return { supported, config: clonedConfig };
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/decoders/audio/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/decoders/audio/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,cAAc,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/decoders/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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AudioDecoder type definitions
|
|
3
|
+
*/
|
|
4
|
+
import type { AudioSampleFormat } from '../../core/AudioData.js';
|
|
5
|
+
export type CodecState = 'unconfigured' | 'configured' | 'closed';
|
|
6
|
+
export interface AudioDecoderConfig {
|
|
7
|
+
codec: string;
|
|
8
|
+
sampleRate: number;
|
|
9
|
+
numberOfChannels: number;
|
|
10
|
+
description?: ArrayBuffer | ArrayBufferView;
|
|
11
|
+
outputFormat?: AudioSampleFormat;
|
|
12
|
+
}
|
|
13
|
+
export interface AudioDecoderInit {
|
|
14
|
+
output: (data: import('../../core/AudioData.js').AudioData) => void;
|
|
15
|
+
error: (error: Error) => void;
|
|
16
|
+
}
|
|
17
|
+
export interface AudioDecoderSupport {
|
|
18
|
+
supported: boolean;
|
|
19
|
+
config: AudioDecoderConfig;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/decoders/audio/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,YAAY,GAAG,QAAQ,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,GAAG,eAAe,CAAC;IAC5C,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,yBAAyB,EAAE,SAAS,KAAK,IAAI,CAAC;IACpE,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC/B;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/decoders/audio/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EXIF orientation parsing and image transformation
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Parse EXIF orientation from JPEG data
|
|
6
|
+
*/
|
|
7
|
+
export declare function parseExifOrientation(data: Uint8Array): number | null;
|
|
8
|
+
/**
|
|
9
|
+
* Apply EXIF orientation transformation to image data
|
|
10
|
+
*/
|
|
11
|
+
export declare function applyOrientation(data: Uint8Array, width: number, height: number, orientation: number): {
|
|
12
|
+
data: Uint8Array;
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=orientation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orientation.d.ts","sourceRoot":"","sources":["../../../src/decoders/image/orientation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CA+HpE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAgErD"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EXIF orientation parsing and image transformation
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Parse EXIF orientation from JPEG data
|
|
6
|
+
*/
|
|
7
|
+
export function parseExifOrientation(data) {
|
|
8
|
+
if (data.length < 4 || data[0] !== 0xFF || data[1] !== 0xD8) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
const readUint16 = (buffer, offset, littleEndian) => {
|
|
12
|
+
if (littleEndian) {
|
|
13
|
+
return buffer[offset] | (buffer[offset + 1] << 8);
|
|
14
|
+
}
|
|
15
|
+
return (buffer[offset] << 8) | buffer[offset + 1];
|
|
16
|
+
};
|
|
17
|
+
const readUint32 = (buffer, offset, littleEndian) => {
|
|
18
|
+
if (littleEndian) {
|
|
19
|
+
return (buffer[offset] |
|
|
20
|
+
(buffer[offset + 1] << 8) |
|
|
21
|
+
(buffer[offset + 2] << 16) |
|
|
22
|
+
(buffer[offset + 3] << 24));
|
|
23
|
+
}
|
|
24
|
+
return ((buffer[offset] << 24) |
|
|
25
|
+
(buffer[offset + 1] << 16) |
|
|
26
|
+
(buffer[offset + 2] << 8) |
|
|
27
|
+
buffer[offset + 3]);
|
|
28
|
+
};
|
|
29
|
+
let offset = 2;
|
|
30
|
+
while (offset + 4 < data.length) {
|
|
31
|
+
if (data[offset] !== 0xFF) {
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
const marker = data[offset + 1];
|
|
35
|
+
offset += 2;
|
|
36
|
+
if (marker === 0xD9 || marker === 0xDA) {
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
if (offset + 2 > data.length) {
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
const segmentLength = (data[offset] << 8) | data[offset + 1];
|
|
43
|
+
if (segmentLength < 2) {
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
const segmentStart = offset + 2;
|
|
47
|
+
const segmentEnd = segmentStart + segmentLength - 2;
|
|
48
|
+
if (segmentEnd > data.length) {
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
if (marker === 0xE1 && segmentLength >= 8) {
|
|
52
|
+
const hasExifHeader = data[segmentStart] === 0x45 && // E
|
|
53
|
+
data[segmentStart + 1] === 0x78 && // x
|
|
54
|
+
data[segmentStart + 2] === 0x69 && // i
|
|
55
|
+
data[segmentStart + 3] === 0x66 && // f
|
|
56
|
+
data[segmentStart + 4] === 0x00 &&
|
|
57
|
+
data[segmentStart + 5] === 0x00;
|
|
58
|
+
if (hasExifHeader) {
|
|
59
|
+
const tiffStart = segmentStart + 6;
|
|
60
|
+
if (tiffStart + 8 > data.length) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const byteOrder = String.fromCharCode(data[tiffStart], data[tiffStart + 1]);
|
|
64
|
+
const littleEndian = byteOrder === 'II';
|
|
65
|
+
const bigEndian = byteOrder === 'MM';
|
|
66
|
+
if (!littleEndian && !bigEndian) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
const isLittleEndian = littleEndian;
|
|
70
|
+
const firstIFDOffset = readUint32(data, tiffStart + 4, isLittleEndian);
|
|
71
|
+
let ifdOffset = tiffStart + firstIFDOffset;
|
|
72
|
+
if (ifdOffset < tiffStart || ifdOffset + 2 > data.length) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
let entryCount = readUint16(data, ifdOffset, isLittleEndian);
|
|
76
|
+
const entrySize = 12;
|
|
77
|
+
const maxEntries = Math.floor((data.length - (ifdOffset + 2)) / entrySize);
|
|
78
|
+
if (entryCount > maxEntries) {
|
|
79
|
+
entryCount = maxEntries;
|
|
80
|
+
}
|
|
81
|
+
for (let i = 0; i < entryCount; i++) {
|
|
82
|
+
const entryOffset = ifdOffset + 2 + i * entrySize;
|
|
83
|
+
if (entryOffset + entrySize > data.length) {
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
const tag = readUint16(data, entryOffset, isLittleEndian);
|
|
87
|
+
if (tag !== 0x0112) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const type = readUint16(data, entryOffset + 2, isLittleEndian);
|
|
91
|
+
const count = readUint32(data, entryOffset + 4, isLittleEndian);
|
|
92
|
+
if (type !== 3 || count < 1) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
const valueOffset = entryOffset + 8;
|
|
96
|
+
if (valueOffset + 2 > data.length) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const orientation = readUint16(data, valueOffset, isLittleEndian);
|
|
100
|
+
return orientation;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
offset = segmentEnd;
|
|
105
|
+
}
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Apply EXIF orientation transformation to image data
|
|
110
|
+
*/
|
|
111
|
+
export function applyOrientation(data, width, height, orientation) {
|
|
112
|
+
if (orientation === 1 || orientation < 1 || orientation > 8) {
|
|
113
|
+
return { data, width, height };
|
|
114
|
+
}
|
|
115
|
+
const shouldSwapDimensions = orientation >= 5 && orientation <= 8;
|
|
116
|
+
const newWidth = shouldSwapDimensions ? height : width;
|
|
117
|
+
const newHeight = shouldSwapDimensions ? width : height;
|
|
118
|
+
const transformed = new Uint8Array(newWidth * newHeight * 4);
|
|
119
|
+
const copyPixel = (destX, destY, srcIndex) => {
|
|
120
|
+
const destIndex = (destY * newWidth + destX) * 4;
|
|
121
|
+
transformed[destIndex] = data[srcIndex];
|
|
122
|
+
transformed[destIndex + 1] = data[srcIndex + 1];
|
|
123
|
+
transformed[destIndex + 2] = data[srcIndex + 2];
|
|
124
|
+
transformed[destIndex + 3] = data[srcIndex + 3];
|
|
125
|
+
};
|
|
126
|
+
for (let y = 0; y < height; y++) {
|
|
127
|
+
for (let x = 0; x < width; x++) {
|
|
128
|
+
const srcIndex = (y * width + x) * 4;
|
|
129
|
+
let destX = x;
|
|
130
|
+
let destY = y;
|
|
131
|
+
switch (orientation) {
|
|
132
|
+
case 2:
|
|
133
|
+
destX = width - 1 - x;
|
|
134
|
+
destY = y;
|
|
135
|
+
break;
|
|
136
|
+
case 3:
|
|
137
|
+
destX = width - 1 - x;
|
|
138
|
+
destY = height - 1 - y;
|
|
139
|
+
break;
|
|
140
|
+
case 4:
|
|
141
|
+
destX = x;
|
|
142
|
+
destY = height - 1 - y;
|
|
143
|
+
break;
|
|
144
|
+
case 5:
|
|
145
|
+
destX = y;
|
|
146
|
+
destY = x;
|
|
147
|
+
break;
|
|
148
|
+
case 6:
|
|
149
|
+
destX = height - 1 - y;
|
|
150
|
+
destY = x;
|
|
151
|
+
break;
|
|
152
|
+
case 7:
|
|
153
|
+
destX = height - 1 - y;
|
|
154
|
+
destY = width - 1 - x;
|
|
155
|
+
break;
|
|
156
|
+
case 8:
|
|
157
|
+
destX = y;
|
|
158
|
+
destY = width - 1 - x;
|
|
159
|
+
break;
|
|
160
|
+
default:
|
|
161
|
+
destX = x;
|
|
162
|
+
destY = y;
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
copyPixel(destX, destY, srcIndex);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return { data: transformed, width: newWidth, height: newHeight };
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=orientation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orientation.js","sourceRoot":"","sources":["../../../src/decoders/image/orientation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream utilities for ImageDecoder
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Check if an object is a ReadableStream
|
|
6
|
+
*/
|
|
7
|
+
export declare function isReadableStream(obj: unknown): obj is ReadableStream;
|
|
8
|
+
/**
|
|
9
|
+
* Read entire ReadableStream into a Uint8Array
|
|
10
|
+
*/
|
|
11
|
+
export declare function readStreamToBuffer(stream: ReadableStream<ArrayBufferView>): Promise<Uint8Array>;
|
|
12
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../src/decoders/image/stream.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,cAAc,CAEpE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,cAAc,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CA4BrG"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream utilities for ImageDecoder
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Check if an object is a ReadableStream
|
|
6
|
+
*/
|
|
7
|
+
export function isReadableStream(obj) {
|
|
8
|
+
return typeof obj === 'object' && obj !== null && typeof obj.getReader === 'function';
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Read entire ReadableStream into a Uint8Array
|
|
12
|
+
*/
|
|
13
|
+
export async function readStreamToBuffer(stream) {
|
|
14
|
+
const reader = stream.getReader();
|
|
15
|
+
const chunks = [];
|
|
16
|
+
let totalReceived = 0;
|
|
17
|
+
try {
|
|
18
|
+
while (true) {
|
|
19
|
+
const { done, value } = await reader.read();
|
|
20
|
+
if (done)
|
|
21
|
+
break;
|
|
22
|
+
if (value) {
|
|
23
|
+
const chunk = new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
|
|
24
|
+
chunks.push(chunk);
|
|
25
|
+
totalReceived += chunk.length;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Concatenate all chunks
|
|
29
|
+
const result = new Uint8Array(totalReceived);
|
|
30
|
+
let offset = 0;
|
|
31
|
+
for (const chunk of chunks) {
|
|
32
|
+
result.set(chunk, offset);
|
|
33
|
+
offset += chunk.length;
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
reader.releaseLock();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../src/decoders/image/stream.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,OAAQ,GAAsB,CAAC,SAAS,KAAK,UAAU,CAAC;AAC5G,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAuC;IAC9E,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAChB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC/E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC;YAChC,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC;QAC7C,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;QACzB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ImageTrack and ImageTrackList implementations
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* ImageTrack - Represents an individual image track
|
|
6
|
+
*/
|
|
7
|
+
export declare class ImageTrack {
|
|
8
|
+
private _animated;
|
|
9
|
+
private _frameCount;
|
|
10
|
+
private _repetitionCount;
|
|
11
|
+
private _selected;
|
|
12
|
+
private _trackList;
|
|
13
|
+
private _index;
|
|
14
|
+
constructor(options: {
|
|
15
|
+
animated: boolean;
|
|
16
|
+
frameCount: number;
|
|
17
|
+
repetitionCount: number;
|
|
18
|
+
selected: boolean;
|
|
19
|
+
});
|
|
20
|
+
get animated(): boolean;
|
|
21
|
+
get frameCount(): number;
|
|
22
|
+
get repetitionCount(): number;
|
|
23
|
+
get selected(): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Set the selected state of this track.
|
|
26
|
+
* Setting to true deselects any previously selected track.
|
|
27
|
+
* Per WebCodecs spec, this allows switching between tracks.
|
|
28
|
+
*/
|
|
29
|
+
set selected(value: boolean);
|
|
30
|
+
/** @internal */
|
|
31
|
+
_setTrackList(trackList: ImageTrackList, index: number): void;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* ImageTrackList - A list of image tracks
|
|
35
|
+
* Uses a Proxy to support bracket notation (tracks[0]) at runtime
|
|
36
|
+
*/
|
|
37
|
+
declare class ImageTrackListImpl {
|
|
38
|
+
private _tracks;
|
|
39
|
+
private _selectedIndex;
|
|
40
|
+
private _ready;
|
|
41
|
+
private _resolveReady;
|
|
42
|
+
constructor();
|
|
43
|
+
get ready(): Promise<void>;
|
|
44
|
+
get length(): number;
|
|
45
|
+
get selectedIndex(): number;
|
|
46
|
+
get selectedTrack(): ImageTrack | null;
|
|
47
|
+
/** @internal */
|
|
48
|
+
_addTrack(track: ImageTrack): void;
|
|
49
|
+
/** @internal */
|
|
50
|
+
_markReady(): void;
|
|
51
|
+
/** @internal - Deselect all tracks (called when selecting a new track) */
|
|
52
|
+
_deselectAll(): void;
|
|
53
|
+
/** @internal - Update the selected index */
|
|
54
|
+
_updateSelectedIndex(index: number): void;
|
|
55
|
+
/**
|
|
56
|
+
* Get track by index
|
|
57
|
+
*/
|
|
58
|
+
get(index: number): ImageTrack | undefined;
|
|
59
|
+
[Symbol.iterator](): Iterator<ImageTrack>;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* ImageTrackList interface with numeric indexing support
|
|
63
|
+
*/
|
|
64
|
+
export interface ImageTrackList extends ImageTrackListImpl {
|
|
65
|
+
[index: number]: ImageTrack | undefined;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Create an ImageTrackList with Proxy for bracket notation support
|
|
69
|
+
* Per WebCodecs spec, tracks[0] should work at runtime
|
|
70
|
+
*/
|
|
71
|
+
export declare function createImageTrackList(): ImageTrackList;
|
|
72
|
+
export declare const ImageTrackListClass: {
|
|
73
|
+
new (): ImageTrackList;
|
|
74
|
+
};
|
|
75
|
+
export {};
|
|
76
|
+
//# sourceMappingURL=tracks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracks.d.ts","sourceRoot":"","sources":["../../../src/decoders/image/tracks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,MAAM,CAAc;gBAEhB,OAAO,EAAE;QACnB,QAAQ,EAAE,OAAO,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,QAAQ,EAAE,OAAO,CAAC;KACnB;IAOD,IAAI,QAAQ,IAAI,OAAO,CAA2B;IAClD,IAAI,UAAU,IAAI,MAAM,CAA6B;IACrD,IAAI,eAAe,IAAI,MAAM,CAAkC;IAC/D,IAAI,QAAQ,IAAI,OAAO,CAA2B;IAElD;;;;OAIG;IACH,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,EAc1B;IAED,gBAAgB;IAChB,aAAa,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAI9D;AAED;;;GAGG;AACH,cAAM,kBAAkB;IACtB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,aAAa,CAAc;;IAQnC,IAAI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAwB;IAClD,IAAI,MAAM,IAAI,MAAM,CAAgC;IACpD,IAAI,aAAa,IAAI,MAAM,CAAgC;IAE3D,IAAI,aAAa,IAAI,UAAU,GAAG,IAAI,CAKrC;IAED,gBAAgB;IAChB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IASlC,gBAAgB;IAChB,UAAU,IAAI,IAAI;IAIlB,0EAA0E;IAC1E,YAAY,IAAI,IAAI;IAMpB,4CAA4C;IAC5C,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzC;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI1C,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC;CAG1C;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,kBAAkB;IACxD,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;CACzC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAkBrD;AAGD,eAAO,MAAM,mBAAmB,EAIhB;IAAE,QAAO,cAAc,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ImageTrack and ImageTrackList implementations
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* ImageTrack - Represents an individual image track
|
|
6
|
+
*/
|
|
7
|
+
export class ImageTrack {
|
|
8
|
+
_animated;
|
|
9
|
+
_frameCount;
|
|
10
|
+
_repetitionCount;
|
|
11
|
+
_selected;
|
|
12
|
+
_trackList = null;
|
|
13
|
+
_index = -1;
|
|
14
|
+
constructor(options) {
|
|
15
|
+
this._animated = options.animated;
|
|
16
|
+
this._frameCount = options.frameCount;
|
|
17
|
+
this._repetitionCount = options.repetitionCount;
|
|
18
|
+
this._selected = options.selected;
|
|
19
|
+
}
|
|
20
|
+
get animated() { return this._animated; }
|
|
21
|
+
get frameCount() { return this._frameCount; }
|
|
22
|
+
get repetitionCount() { return this._repetitionCount; }
|
|
23
|
+
get selected() { return this._selected; }
|
|
24
|
+
/**
|
|
25
|
+
* Set the selected state of this track.
|
|
26
|
+
* Setting to true deselects any previously selected track.
|
|
27
|
+
* Per WebCodecs spec, this allows switching between tracks.
|
|
28
|
+
*/
|
|
29
|
+
set selected(value) {
|
|
30
|
+
if (value === this._selected)
|
|
31
|
+
return;
|
|
32
|
+
if (value && this._trackList) {
|
|
33
|
+
// Deselect the currently selected track
|
|
34
|
+
this._trackList._deselectAll();
|
|
35
|
+
this._selected = true;
|
|
36
|
+
this._trackList._updateSelectedIndex(this._index);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
this._selected = value;
|
|
40
|
+
if (!value && this._trackList) {
|
|
41
|
+
this._trackList._updateSelectedIndex(-1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** @internal */
|
|
46
|
+
_setTrackList(trackList, index) {
|
|
47
|
+
this._trackList = trackList;
|
|
48
|
+
this._index = index;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* ImageTrackList - A list of image tracks
|
|
53
|
+
* Uses a Proxy to support bracket notation (tracks[0]) at runtime
|
|
54
|
+
*/
|
|
55
|
+
class ImageTrackListImpl {
|
|
56
|
+
_tracks = [];
|
|
57
|
+
_selectedIndex = -1;
|
|
58
|
+
_ready;
|
|
59
|
+
_resolveReady;
|
|
60
|
+
constructor() {
|
|
61
|
+
this._ready = new Promise((resolve) => {
|
|
62
|
+
this._resolveReady = resolve;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
get ready() { return this._ready; }
|
|
66
|
+
get length() { return this._tracks.length; }
|
|
67
|
+
get selectedIndex() { return this._selectedIndex; }
|
|
68
|
+
get selectedTrack() {
|
|
69
|
+
if (this._selectedIndex >= 0 && this._selectedIndex < this._tracks.length) {
|
|
70
|
+
return this._tracks[this._selectedIndex];
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
/** @internal */
|
|
75
|
+
_addTrack(track) {
|
|
76
|
+
const index = this._tracks.length;
|
|
77
|
+
this._tracks.push(track);
|
|
78
|
+
track._setTrackList(this, index);
|
|
79
|
+
if (track.selected && this._selectedIndex === -1) {
|
|
80
|
+
this._selectedIndex = index;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/** @internal */
|
|
84
|
+
_markReady() {
|
|
85
|
+
this._resolveReady();
|
|
86
|
+
}
|
|
87
|
+
/** @internal - Deselect all tracks (called when selecting a new track) */
|
|
88
|
+
_deselectAll() {
|
|
89
|
+
for (const track of this._tracks) {
|
|
90
|
+
track._selected = false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/** @internal - Update the selected index */
|
|
94
|
+
_updateSelectedIndex(index) {
|
|
95
|
+
this._selectedIndex = index;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get track by index
|
|
99
|
+
*/
|
|
100
|
+
get(index) {
|
|
101
|
+
return this._tracks[index];
|
|
102
|
+
}
|
|
103
|
+
[Symbol.iterator]() {
|
|
104
|
+
return this._tracks[Symbol.iterator]();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Create an ImageTrackList with Proxy for bracket notation support
|
|
109
|
+
* Per WebCodecs spec, tracks[0] should work at runtime
|
|
110
|
+
*/
|
|
111
|
+
export function createImageTrackList() {
|
|
112
|
+
const impl = new ImageTrackListImpl();
|
|
113
|
+
return new Proxy(impl, {
|
|
114
|
+
get(target, prop, receiver) {
|
|
115
|
+
// Handle numeric string properties (e.g., "0", "1")
|
|
116
|
+
if (typeof prop === 'string' && /^\d+$/.test(prop)) {
|
|
117
|
+
return target.get(parseInt(prop, 10));
|
|
118
|
+
}
|
|
119
|
+
return Reflect.get(target, prop, receiver);
|
|
120
|
+
},
|
|
121
|
+
has(target, prop) {
|
|
122
|
+
if (typeof prop === 'string' && /^\d+$/.test(prop)) {
|
|
123
|
+
const index = parseInt(prop, 10);
|
|
124
|
+
return index >= 0 && index < target.length;
|
|
125
|
+
}
|
|
126
|
+
return Reflect.has(target, prop);
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
// For backwards compatibility, also export a class that creates the proxy
|
|
131
|
+
export const ImageTrackListClass = class {
|
|
132
|
+
constructor() {
|
|
133
|
+
return createImageTrackList();
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
//# sourceMappingURL=tracks.js.map
|