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
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codec description utilities for H.264/HEVC
|
|
3
|
+
*
|
|
4
|
+
* Handles extraction of parameter sets (SPS/PPS/VPS) from encoded packets
|
|
5
|
+
* and builds decoder configuration records (AVCC/HVCC) for MP4 containers.
|
|
6
|
+
*/
|
|
7
|
+
import { extractHevcParameterSetsFromAnnexB, buildHvccDecoderConfig, convertAnnexBToHvcc, } from '../../../../utils/hevc.js';
|
|
8
|
+
import { extractAvcParameterSetsFromAnnexB, buildAvcDecoderConfig, convertAnnexBToAvcc, } from '../../../../utils/avc.js';
|
|
9
|
+
import { createLogger } from '../../../../utils/logger.js';
|
|
10
|
+
const logger = createLogger('codec-description');
|
|
11
|
+
/**
|
|
12
|
+
* Process H.264 packet: extract AVCC description and convert to length-prefixed format
|
|
13
|
+
*/
|
|
14
|
+
export function processAvcPacket(packetData, isKeyFrame, existingDescription, outputFormat) {
|
|
15
|
+
let description = existingDescription;
|
|
16
|
+
let frameData = Buffer.from(packetData);
|
|
17
|
+
// Extract SPS/PPS from first keyframe to build AVCC description
|
|
18
|
+
if (isKeyFrame && !description) {
|
|
19
|
+
try {
|
|
20
|
+
const { sps, pps } = extractAvcParameterSetsFromAnnexB(packetData);
|
|
21
|
+
if (sps.length > 0 && pps.length > 0) {
|
|
22
|
+
description = Buffer.from(buildAvcDecoderConfig(sps, pps, 4));
|
|
23
|
+
logger.debug(`Built AVCC description: ${description.length} bytes`);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
logger.warn('H.264 keyframe missing parameter sets (SPS/PPS)');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
logger.warn(`Failed to extract H.264 parameter sets: ${err.message}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Convert Annex B to length-prefixed format for MP4
|
|
34
|
+
if (outputFormat !== 'annexb') {
|
|
35
|
+
frameData = convertAnnexBToAvcc(packetData, 4);
|
|
36
|
+
logger.debug(`Converted H.264 frame to length-prefixed: ${packetData.length} -> ${frameData.length} bytes`);
|
|
37
|
+
}
|
|
38
|
+
return { description, frameData };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Process HEVC packet: extract HVCC description and convert to length-prefixed format
|
|
42
|
+
*/
|
|
43
|
+
export function processHevcPacket(packetData, isKeyFrame, existingDescription, outputFormat) {
|
|
44
|
+
let description = existingDescription;
|
|
45
|
+
let frameData = Buffer.from(packetData);
|
|
46
|
+
// Extract VPS/SPS/PPS from first keyframe to build HVCC description
|
|
47
|
+
if (isKeyFrame && !description) {
|
|
48
|
+
try {
|
|
49
|
+
const { vps, sps, pps } = extractHevcParameterSetsFromAnnexB(packetData);
|
|
50
|
+
if (vps.length > 0 && sps.length > 0 && pps.length > 0) {
|
|
51
|
+
description = Buffer.from(buildHvccDecoderConfig(vps, sps, pps, 4));
|
|
52
|
+
logger.debug(`Built HVCC description: ${description.length} bytes`);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
logger.warn('HEVC keyframe missing parameter sets (VPS/SPS/PPS)');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
logger.warn(`Failed to extract HEVC parameter sets: ${err.message}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Convert Annex B to length-prefixed format for MP4
|
|
63
|
+
if (outputFormat !== 'annexb') {
|
|
64
|
+
frameData = convertAnnexBToHvcc(packetData, 4);
|
|
65
|
+
logger.debug(`Converted HEVC frame to length-prefixed: ${packetData.length} -> ${frameData.length} bytes`);
|
|
66
|
+
}
|
|
67
|
+
return { description, frameData };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Process an encoded packet, handling codec-specific description extraction
|
|
71
|
+
* and format conversion based on codec type
|
|
72
|
+
*/
|
|
73
|
+
export function processEncodedPacket(packetData, isKeyFrame, codecType, existingDescription, outputFormat) {
|
|
74
|
+
if (codecType === 'avc') {
|
|
75
|
+
return processAvcPacket(packetData, isKeyFrame, existingDescription, outputFormat);
|
|
76
|
+
}
|
|
77
|
+
if (codecType === 'hevc') {
|
|
78
|
+
return processHevcPacket(packetData, isKeyFrame, existingDescription, outputFormat);
|
|
79
|
+
}
|
|
80
|
+
// For other codecs (VP8, VP9, AV1), no conversion needed
|
|
81
|
+
return {
|
|
82
|
+
description: existingDescription,
|
|
83
|
+
frameData: Buffer.from(packetData),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=codec-description.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec-description.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/codec-description.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Packet drain utilities for video encoding
|
|
3
|
+
*
|
|
4
|
+
* Handles draining encoded packets from the encoder
|
|
5
|
+
* and converting them to EncodedFrame output format.
|
|
6
|
+
*/
|
|
7
|
+
import type { Encoder } from 'node-av/api';
|
|
8
|
+
import type { EncodedFrame } from '../../../types.js';
|
|
9
|
+
export interface DrainContext {
|
|
10
|
+
/** Current codec description (AVCC/HVCC) */
|
|
11
|
+
codecDescription: Buffer | null;
|
|
12
|
+
/** Whether this is AVC codec */
|
|
13
|
+
isAvcCodec: boolean;
|
|
14
|
+
/** Whether this is HEVC codec */
|
|
15
|
+
isHevcCodec: boolean;
|
|
16
|
+
/** Output format (annexb or mp4) */
|
|
17
|
+
outputFormat: 'annexb' | 'mp4';
|
|
18
|
+
/** Fallback frame index for timestamp */
|
|
19
|
+
frameIndex: number;
|
|
20
|
+
}
|
|
21
|
+
export interface DrainResult {
|
|
22
|
+
/** Encoded frames extracted from packets */
|
|
23
|
+
frames: EncodedFrame[];
|
|
24
|
+
/** Updated codec description (may have been extracted from first keyframe) */
|
|
25
|
+
codecDescription: Buffer | null;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Drain all available packets from the encoder
|
|
29
|
+
*
|
|
30
|
+
* Converts packets to EncodedFrame format, extracting codec description
|
|
31
|
+
* from the first keyframe if needed.
|
|
32
|
+
*/
|
|
33
|
+
export declare function drainEncoderPackets(encoder: Encoder, context: DrainContext): Promise<DrainResult>;
|
|
34
|
+
//# sourceMappingURL=drain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drain.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/drain.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOtD,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gCAAgC;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,iCAAiC;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,oCAAoC;IACpC,YAAY,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC/B,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,4CAA4C;IAC5C,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,8EAA8E;IAC9E,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC,CA8CtB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Packet drain utilities for video encoding
|
|
3
|
+
*
|
|
4
|
+
* Handles draining encoded packets from the encoder
|
|
5
|
+
* and converting them to EncodedFrame output format.
|
|
6
|
+
*/
|
|
7
|
+
import { AV_PKT_FLAG_KEY } from 'node-av/constants';
|
|
8
|
+
import { createLogger } from '../../../../utils/logger.js';
|
|
9
|
+
import { processEncodedPacket } from './codec-description.js';
|
|
10
|
+
import { ptsToMicroseconds } from './timestamp.js';
|
|
11
|
+
const logger = createLogger('encoder-drain');
|
|
12
|
+
/**
|
|
13
|
+
* Drain all available packets from the encoder
|
|
14
|
+
*
|
|
15
|
+
* Converts packets to EncodedFrame format, extracting codec description
|
|
16
|
+
* from the first keyframe if needed.
|
|
17
|
+
*/
|
|
18
|
+
export async function drainEncoderPackets(encoder, context) {
|
|
19
|
+
const frames = [];
|
|
20
|
+
let codecDescription = context.codecDescription;
|
|
21
|
+
let packet = await encoder.receive();
|
|
22
|
+
while (packet) {
|
|
23
|
+
if (packet.data) {
|
|
24
|
+
// Convert packet PTS from packet's timebase to microseconds
|
|
25
|
+
let timestamp = context.frameIndex;
|
|
26
|
+
if (packet.pts !== undefined) {
|
|
27
|
+
timestamp = ptsToMicroseconds(packet.pts, packet.timeBase);
|
|
28
|
+
}
|
|
29
|
+
const keyFrame = (packet.flags & AV_PKT_FLAG_KEY) === AV_PKT_FLAG_KEY || packet.isKeyframe;
|
|
30
|
+
// Process packet: extract codec description and convert format if needed
|
|
31
|
+
const codecType = context.isAvcCodec ? 'avc' : context.isHevcCodec ? 'hevc' : 'other';
|
|
32
|
+
const result = processEncodedPacket(packet.data, keyFrame, codecType, codecDescription, context.outputFormat);
|
|
33
|
+
// Update codec description if newly extracted
|
|
34
|
+
if (result.description && !codecDescription) {
|
|
35
|
+
codecDescription = result.description;
|
|
36
|
+
}
|
|
37
|
+
const frame = {
|
|
38
|
+
data: result.frameData,
|
|
39
|
+
timestamp,
|
|
40
|
+
keyFrame,
|
|
41
|
+
description: codecDescription ?? undefined,
|
|
42
|
+
};
|
|
43
|
+
logger.debug(`Encoded packet: size=${packet.data.length}, key=${keyFrame}`);
|
|
44
|
+
frames.push(frame);
|
|
45
|
+
}
|
|
46
|
+
packet.unref();
|
|
47
|
+
packet = await encoder.receive();
|
|
48
|
+
}
|
|
49
|
+
return { frames, codecDescription };
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=drain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drain.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/drain.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAsB7C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAgB,EAChB,OAAqB;IAErB,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,IAAI,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAEhD,IAAI,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,OAAO,MAAM,EAAE,CAAC;QACd,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,4DAA4D;YAC5D,IAAI,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;YACnC,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC7B,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7D,CAAC;YAED,MAAM,QAAQ,GACZ,CAAC,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,eAAe,IAAI,MAAM,CAAC,UAAU,CAAC;YAE5E,yEAAyE;YACzE,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YACtF,MAAM,MAAM,GAAG,oBAAoB,CACjC,MAAM,CAAC,IAAI,EACX,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,OAAO,CAAC,YAAY,CACrB,CAAC;YAEF,8CAA8C;YAC9C,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC5C,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC;YACxC,CAAC;YAED,MAAM,KAAK,GAAiB;gBAC1B,IAAI,EAAE,MAAM,CAAC,SAAS;gBACtB,SAAS;gBACT,QAAQ;gBACR,WAAW,EAAE,gBAAgB,IAAI,SAAS;aAC3C,CAAC;YAEF,MAAM,CAAC,KAAK,CAAC,wBAAwB,MAAM,CAAC,IAAI,CAAC,MAAM,SAAS,QAAQ,EAAE,CAAC,CAAC;YAC5E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter chain utilities for video encoding
|
|
3
|
+
*
|
|
4
|
+
* Handles creation and management of FFmpeg filter chains
|
|
5
|
+
* for format conversion and rescaling.
|
|
6
|
+
*/
|
|
7
|
+
import { FilterAPI, type HardwareContext } from 'node-av/api';
|
|
8
|
+
export interface FilterConfig {
|
|
9
|
+
/** Target format name (e.g., 'nv12', 'yuv420p') */
|
|
10
|
+
targetFormat: string;
|
|
11
|
+
/** Input dimensions */
|
|
12
|
+
inputWidth: number;
|
|
13
|
+
inputHeight: number;
|
|
14
|
+
/** Output dimensions */
|
|
15
|
+
outputWidth: number;
|
|
16
|
+
outputHeight: number;
|
|
17
|
+
/** Whether rescaling is needed */
|
|
18
|
+
needsRescaling: boolean;
|
|
19
|
+
/** Whether format conversion is needed */
|
|
20
|
+
needsFormatConversion: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Build a CPU filter chain string for format conversion and/or rescaling
|
|
24
|
+
*/
|
|
25
|
+
export declare function buildCpuFilterChain(config: FilterConfig): string;
|
|
26
|
+
/**
|
|
27
|
+
* Create a filter chain for encoding
|
|
28
|
+
*
|
|
29
|
+
* Tries GPU-accelerated filter first if hardware context is available,
|
|
30
|
+
* falls back to CPU filter chain otherwise.
|
|
31
|
+
*/
|
|
32
|
+
export declare function createEncoderFilter(config: FilterConfig, hardware: HardwareContext | null): FilterAPI | null;
|
|
33
|
+
/**
|
|
34
|
+
* Create a CPU fallback filter after GPU filter failure
|
|
35
|
+
*/
|
|
36
|
+
export declare function createCpuFallbackFilter(config: FilterConfig): FilterAPI;
|
|
37
|
+
//# sourceMappingURL=filters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/filters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAO9D,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,cAAc,EAAE,OAAO,CAAC;IACxB,0CAA0C;IAC1C,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAahE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,eAAe,GAAG,IAAI,GAC/B,SAAS,GAAG,IAAI,CA2ClB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAIvE"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter chain utilities for video encoding
|
|
3
|
+
*
|
|
4
|
+
* Handles creation and management of FFmpeg filter chains
|
|
5
|
+
* for format conversion and rescaling.
|
|
6
|
+
*/
|
|
7
|
+
import { FilterAPI } from 'node-av/api';
|
|
8
|
+
import { createLogger } from '../../../../utils/logger.js';
|
|
9
|
+
import { buildGpuFilterChain } from './gpu-filters.js';
|
|
10
|
+
const logger = createLogger('encoder-filters');
|
|
11
|
+
/**
|
|
12
|
+
* Build a CPU filter chain string for format conversion and/or rescaling
|
|
13
|
+
*/
|
|
14
|
+
export function buildCpuFilterChain(config) {
|
|
15
|
+
const filterParts = [];
|
|
16
|
+
if (config.needsRescaling) {
|
|
17
|
+
// Use lanczos scaling for high quality
|
|
18
|
+
filterParts.push(`scale=${config.outputWidth}:${config.outputHeight}:flags=lanczos`);
|
|
19
|
+
}
|
|
20
|
+
if (config.needsFormatConversion) {
|
|
21
|
+
filterParts.push(`format=${config.targetFormat}`);
|
|
22
|
+
}
|
|
23
|
+
return filterParts.join(',');
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create a filter chain for encoding
|
|
27
|
+
*
|
|
28
|
+
* Tries GPU-accelerated filter first if hardware context is available,
|
|
29
|
+
* falls back to CPU filter chain otherwise.
|
|
30
|
+
*/
|
|
31
|
+
export function createEncoderFilter(config, hardware) {
|
|
32
|
+
// No filter needed if no conversion or rescaling
|
|
33
|
+
if (!config.needsFormatConversion && !config.needsRescaling) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
// Log rescaling if needed
|
|
37
|
+
if (config.needsRescaling) {
|
|
38
|
+
logger.debug(`Rescaling: ${config.inputWidth}x${config.inputHeight} → ${config.outputWidth}x${config.outputHeight}`);
|
|
39
|
+
}
|
|
40
|
+
// Try GPU-accelerated filter if hardware context is available
|
|
41
|
+
if (hardware) {
|
|
42
|
+
const hwType = hardware.deviceTypeName;
|
|
43
|
+
const gpuFilter = buildGpuFilterChain(hwType, config.targetFormat, config.inputWidth, config.inputHeight, config.outputWidth, config.outputHeight);
|
|
44
|
+
if (gpuFilter) {
|
|
45
|
+
try {
|
|
46
|
+
const filter = FilterAPI.create(gpuFilter, {
|
|
47
|
+
hardware,
|
|
48
|
+
});
|
|
49
|
+
logger.debug(`Created GPU filter chain (${hwType}): ${gpuFilter}`);
|
|
50
|
+
return filter;
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
logger.debug(`GPU filter failed, falling back to CPU: ${err.message}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Fallback: CPU filter chain via libswscale
|
|
58
|
+
const filterChain = buildCpuFilterChain(config);
|
|
59
|
+
const filter = FilterAPI.create(filterChain);
|
|
60
|
+
logger.debug(`Created CPU filter chain: ${filterChain}`);
|
|
61
|
+
return filter;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Create a CPU fallback filter after GPU filter failure
|
|
65
|
+
*/
|
|
66
|
+
export function createCpuFallbackFilter(config) {
|
|
67
|
+
const filterChain = buildCpuFilterChain(config);
|
|
68
|
+
logger.debug(`Created CPU fallback filter: ${filterChain}`);
|
|
69
|
+
return FilterAPI.create(filterChain);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=filters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/filters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAwB,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,MAAM,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;AAiB/C;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,uCAAuC;QACvC,WAAW,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,YAAY,gBAAgB,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;QACjC,WAAW,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAoB,EACpB,QAAgC;IAEhC,iDAAiD;IACjD,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0BAA0B;IAC1B,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CACV,cAAc,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,WAAW,MAAM,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE,CACvG,CAAC;IACJ,CAAC;IAED,8DAA8D;IAC9D,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC;QACvC,MAAM,SAAS,GAAG,mBAAmB,CACnC,MAAM,EACN,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,YAAY,CACpB,CAAC;QAEF,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE;oBACzC,QAAQ;iBACF,CAAC,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,6BAA6B,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;gBACnE,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,2CAA4C,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,CAAC,6BAA6B,WAAW,EAAE,CAAC,CAAC;IACzD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAoB;IAC1D,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,CAAC,gCAAgC,WAAW,EAAE,CAAC,CAAC;IAC5D,OAAO,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GPU-accelerated filter chain builders for video encoding
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Build GPU-accelerated filter chain for format conversion and optional rescaling
|
|
6
|
+
* Returns null if no GPU filter is available for this hardware type
|
|
7
|
+
*/
|
|
8
|
+
export declare function buildGpuFilterChain(hwType: string, targetFormat: string, inputWidth: number | undefined, inputHeight: number | undefined, outputWidth: number, outputHeight: number): string | null;
|
|
9
|
+
//# sourceMappingURL=gpu-filters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpu-filters.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/gpu-filters.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,IAAI,CAkBf"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GPU-accelerated filter chain builders for video encoding
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Build GPU-accelerated filter chain for format conversion and optional rescaling
|
|
6
|
+
* Returns null if no GPU filter is available for this hardware type
|
|
7
|
+
*/
|
|
8
|
+
export function buildGpuFilterChain(hwType, targetFormat, inputWidth, inputHeight, outputWidth, outputHeight) {
|
|
9
|
+
const needsScale = inputWidth !== undefined && inputHeight !== undefined &&
|
|
10
|
+
(inputWidth !== outputWidth || inputHeight !== outputHeight);
|
|
11
|
+
const scaleParams = needsScale ? `w=${outputWidth}:h=${outputHeight}:` : '';
|
|
12
|
+
// GPU filter chains: upload to GPU → scale on GPU (if needed) → convert format → keep on GPU for encoder
|
|
13
|
+
switch (hwType) {
|
|
14
|
+
case 'vaapi':
|
|
15
|
+
return `format=nv12,hwupload,scale_vaapi=${scaleParams}format=${targetFormat}`;
|
|
16
|
+
case 'cuda':
|
|
17
|
+
return `format=nv12,hwupload_cuda,scale_cuda=${scaleParams}format=${targetFormat}`;
|
|
18
|
+
case 'qsv':
|
|
19
|
+
return `format=nv12,hwupload=extra_hw_frames=64,scale_qsv=${scaleParams}format=${targetFormat}`;
|
|
20
|
+
case 'videotoolbox':
|
|
21
|
+
return `format=nv12,hwupload,scale_vt=${scaleParams}format=${targetFormat}`;
|
|
22
|
+
default:
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=gpu-filters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpu-filters.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/gpu-filters.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAc,EACd,YAAoB,EACpB,UAA8B,EAC9B,WAA+B,EAC/B,WAAmB,EACnB,YAAoB;IAEpB,MAAM,UAAU,GAAG,UAAU,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS;QACtE,CAAC,UAAU,KAAK,WAAW,IAAI,WAAW,KAAK,YAAY,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,WAAW,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5E,yGAAyG;IACzG,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO,oCAAoC,WAAW,UAAU,YAAY,EAAE,CAAC;QACjF,KAAK,MAAM;YACT,OAAO,wCAAwC,WAAW,UAAU,YAAY,EAAE,CAAC;QACrF,KAAK,KAAK;YACR,OAAO,qDAAqD,WAAW,UAAU,YAAY,EAAE,CAAC;QAClG,KAAK,cAAc;YACjB,OAAO,iCAAiC,WAAW,UAAU,YAAY,EAAE,CAAC;QAC9E;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hardware encoder constraints and minimum resolution requirements
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Get minimum resolution requirements for hardware encoders
|
|
6
|
+
* These are known constraints from hardware encoder specifications
|
|
7
|
+
*/
|
|
8
|
+
export declare function getHardwareMinResolution(hwaccel: string, codec: string): {
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=hardware-constraints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hardware-constraints.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/hardware-constraints.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAkB1G"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hardware encoder constraints and minimum resolution requirements
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Get minimum resolution requirements for hardware encoders
|
|
6
|
+
* These are known constraints from hardware encoder specifications
|
|
7
|
+
*/
|
|
8
|
+
export function getHardwareMinResolution(hwaccel, codec) {
|
|
9
|
+
// VAAPI constraints (Intel/AMD)
|
|
10
|
+
if (hwaccel === 'vaapi') {
|
|
11
|
+
if (codec === 'h264')
|
|
12
|
+
return { width: 128, height: 128 };
|
|
13
|
+
if (codec === 'hevc' || codec === 'h265')
|
|
14
|
+
return { width: 130, height: 128 };
|
|
15
|
+
if (codec === 'vp8' || codec === 'vp9')
|
|
16
|
+
return { width: 128, height: 128 };
|
|
17
|
+
if (codec === 'av1')
|
|
18
|
+
return { width: 128, height: 128 };
|
|
19
|
+
}
|
|
20
|
+
// QSV constraints (Intel)
|
|
21
|
+
if (hwaccel === 'qsv') {
|
|
22
|
+
return { width: 128, height: 128 };
|
|
23
|
+
}
|
|
24
|
+
// NVENC typically supports smaller sizes
|
|
25
|
+
if (hwaccel === 'nvenc') {
|
|
26
|
+
return { width: 32, height: 32 };
|
|
27
|
+
}
|
|
28
|
+
// Default: no minimum constraint
|
|
29
|
+
return { width: 1, height: 1 };
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=hardware-constraints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hardware-constraints.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/hardware-constraints.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAe,EAAE,KAAa;IACrE,gCAAgC;IAChC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACzD,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAC7E,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK;YAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAC3E,IAAI,KAAK,KAAK,KAAK;YAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAC1D,CAAC;IACD,0BAA0B;IAC1B,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACrC,CAAC;IACD,yCAAyC;IACzC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;IACD,iCAAiC;IACjC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Video encoder helper utilities
|
|
3
|
+
*
|
|
4
|
+
* Organized into focused modules:
|
|
5
|
+
* - pixel-format: Input pixel format mapping
|
|
6
|
+
* - pixel-format-config: Encoder pixel format configuration
|
|
7
|
+
* - software-encoders: Software encoder selection
|
|
8
|
+
* - hardware-constraints: Hardware minimum resolution
|
|
9
|
+
* - gpu-filters: GPU filter chain building
|
|
10
|
+
* - filters: Filter chain creation and management
|
|
11
|
+
* - options: Encoder options building
|
|
12
|
+
* - codec-description: AVCC/HVCC extraction
|
|
13
|
+
* - timestamp: PTS conversion utilities
|
|
14
|
+
* - setup: Encoder codec selection
|
|
15
|
+
* - drain: Packet draining utilities
|
|
16
|
+
*/
|
|
17
|
+
export { pixelFormatName, mapPixelFormat } from './pixel-format.js';
|
|
18
|
+
export { getSoftwareEncoder } from './software-encoders.js';
|
|
19
|
+
export { getHardwareMinResolution } from './hardware-constraints.js';
|
|
20
|
+
export { buildGpuFilterChain } from './gpu-filters.js';
|
|
21
|
+
export { buildEncoderOptions, configureVpxOptions, configureSvtAv1Options, configureX26xOptions, type EncoderOptions, } from './options.js';
|
|
22
|
+
export { processEncodedPacket, processAvcPacket, processHevcPacket, type CodecDescriptionResult, } from './codec-description.js';
|
|
23
|
+
export { microsecondsToPts, ptsToMicroseconds, getCodecTimeBase, } from './timestamp.js';
|
|
24
|
+
export { selectEncoderCodec, fallbackToSoftware, type EncoderSelection, type EncoderCodec, } from './setup.js';
|
|
25
|
+
export { configureEncoderPixelFormat, hasAlphaChannel, is10BitFormat, codecSupportsAlpha, codecSupports10Bit, type PixelFormatConfig, } from './pixel-format-config.js';
|
|
26
|
+
export { createEncoderFilter, createCpuFallbackFilter, buildCpuFilterChain, type FilterConfig, } from './filters.js';
|
|
27
|
+
export { drainEncoderPackets, type DrainContext, type DrainResult, } from './drain.js';
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,iBAAiB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,KAAK,YAAY,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,WAAW,GACjB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Video encoder helper utilities
|
|
3
|
+
*
|
|
4
|
+
* Organized into focused modules:
|
|
5
|
+
* - pixel-format: Input pixel format mapping
|
|
6
|
+
* - pixel-format-config: Encoder pixel format configuration
|
|
7
|
+
* - software-encoders: Software encoder selection
|
|
8
|
+
* - hardware-constraints: Hardware minimum resolution
|
|
9
|
+
* - gpu-filters: GPU filter chain building
|
|
10
|
+
* - filters: Filter chain creation and management
|
|
11
|
+
* - options: Encoder options building
|
|
12
|
+
* - codec-description: AVCC/HVCC extraction
|
|
13
|
+
* - timestamp: PTS conversion utilities
|
|
14
|
+
* - setup: Encoder codec selection
|
|
15
|
+
* - drain: Packet draining utilities
|
|
16
|
+
*/
|
|
17
|
+
export { pixelFormatName, mapPixelFormat } from './pixel-format.js';
|
|
18
|
+
export { getSoftwareEncoder } from './software-encoders.js';
|
|
19
|
+
export { getHardwareMinResolution } from './hardware-constraints.js';
|
|
20
|
+
export { buildGpuFilterChain } from './gpu-filters.js';
|
|
21
|
+
export { buildEncoderOptions, configureVpxOptions, configureSvtAv1Options, configureX26xOptions, } from './options.js';
|
|
22
|
+
export { processEncodedPacket, processAvcPacket, processHevcPacket, } from './codec-description.js';
|
|
23
|
+
export { microsecondsToPts, ptsToMicroseconds, getCodecTimeBase, } from './timestamp.js';
|
|
24
|
+
export { selectEncoderCodec, fallbackToSoftware, } from './setup.js';
|
|
25
|
+
export { configureEncoderPixelFormat, hasAlphaChannel, is10BitFormat, codecSupportsAlpha, codecSupports10Bit, } from './pixel-format-config.js';
|
|
26
|
+
export { createEncoderFilter, createCpuFallbackFilter, buildCpuFilterChain, } from './filters.js';
|
|
27
|
+
export { drainEncoderPackets, } from './drain.js';
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,GAErB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GAGnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,kBAAkB,GAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,GAEpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,GAGpB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encoder options building utilities
|
|
3
|
+
*
|
|
4
|
+
* Builds codec-specific encoder options for x264/x265, VP8/VP9, and SVT-AV1
|
|
5
|
+
*/
|
|
6
|
+
import { Rational } from 'node-av/lib';
|
|
7
|
+
import type { HardwareContext } from 'node-av/api';
|
|
8
|
+
import type { AVPixelFormat } from 'node-av/constants';
|
|
9
|
+
import type { VideoEncoderBackendConfig } from '../../../types.js';
|
|
10
|
+
export interface EncoderOptions {
|
|
11
|
+
type: 'video';
|
|
12
|
+
width: number;
|
|
13
|
+
height: number;
|
|
14
|
+
pixelFormat: AVPixelFormat;
|
|
15
|
+
timeBase: Rational;
|
|
16
|
+
frameRate: Rational;
|
|
17
|
+
bitrate?: number;
|
|
18
|
+
gopSize: number;
|
|
19
|
+
maxBFrames?: number;
|
|
20
|
+
hardware?: HardwareContext;
|
|
21
|
+
options: Record<string, string | number>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Configure VP8/VP9 encoder options
|
|
25
|
+
*/
|
|
26
|
+
export declare function configureVpxOptions(options: Record<string, string | number>, config: VideoEncoderBackendConfig): void;
|
|
27
|
+
/**
|
|
28
|
+
* Configure SVT-AV1 encoder options
|
|
29
|
+
*/
|
|
30
|
+
export declare function configureSvtAv1Options(options: Record<string, string | number>, config: VideoEncoderBackendConfig): void;
|
|
31
|
+
/**
|
|
32
|
+
* Configure x264/x265 encoder options (software and hardware variants)
|
|
33
|
+
*/
|
|
34
|
+
export declare function configureX26xOptions(options: Record<string, string | number>, config: VideoEncoderBackendConfig, hwType?: string): void;
|
|
35
|
+
/**
|
|
36
|
+
* Build complete encoder options for a given codec
|
|
37
|
+
*/
|
|
38
|
+
export declare function buildEncoderOptions(config: VideoEncoderBackendConfig, codecName: string, inputPixelFormat: AVPixelFormat, timeBase: Rational, hardware: HardwareContext | null): EncoderOptions;
|
|
39
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/video/encoder/options.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAQnE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,aAAa,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,QAAQ,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAC1C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACxC,MAAM,EAAE,yBAAyB,GAChC,IAAI,CAiBN;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACxC,MAAM,EAAE,yBAAyB,GAChC,IAAI,CAwBN;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACxC,MAAM,EAAE,yBAAyB,EACjC,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,CAgEN;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,yBAAyB,EACjC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,aAAa,EAC/B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,eAAe,GAAG,IAAI,GAC/B,cAAc,CAyDhB"}
|