Skip to content

refactor: eliminate container demuxing in conversion pipeline#18

Merged
juliendargelos merged 5 commits into
mainfrom
refactor/eliminate-container-demuxing
Apr 30, 2026
Merged

refactor: eliminate container demuxing in conversion pipeline#18
juliendargelos merged 5 commits into
mainfrom
refactor/eliminate-container-demuxing

Conversation

@juliendargelos
Copy link
Copy Markdown
Member

Summary

  • Eliminated temp-file I/O and @napi-rs/webcodecs demuxing: the Converter now collects raw Packet[] directly from the encoder in memory, and the Muxer packs them into FSV binary without container demuxing
  • Full VideoDecoderConfig extraction: reads codec, description (avcC/hvcC), codedWidth/codedHeight, and colorSpace (primaries, transfer, matrix, fullRange) from the encoder's CodecParameters after encoding, with optimizeForLatency: true baked in
  • Simplified TrackDecoder.config(): removed hardcoded bt709 fallback and 4-candidate loop — single config from manifest with immediate throw on unsupported
  • Removed @napi-rs/webcodecs dependency: no longer used anywhere in the codebase

Changes

File Change
src/core/Converter.ts In-memory packet collection, AV_CODEC_FLAG_GLOBAL_HEADER + CodecParameters config extraction, color space mapping from ffmpeg constants
src/core/Muxer.ts Accepts Packet[] instead of container buffers, private annexBToAVCC() for H.264/H.265
src/core/Packet.ts New shared interface
src/core/TrackDecoder.ts Simplified to single config candidate
package.json Removed @napi-rs/webcodecs, added ./core/Packet export
AGENTS.md, readme.md Updated architecture docs

Notes

  • @napi-rs/webcodecs was only used by the old Muxer to demux temp mp4/webm files — entirely eliminated
  • VP8/VP9 packets pass through unchanged (no Annex B → AVCC conversion needed)
  • Color space mapping covers BT.709, BT.2020, SMPTE 170M, sRGB, PQ (HDR), HLG, and more

- Replace temp-file + @napi-rs/webcodecs demuxing with in-memory Packet[] collection
- Extract full VideoDecoderConfig (codec, description, codedWidth/Height, colorSpace, optimizeForLatency) from encoder's CodecParameters
- Rewrite Muxer to accept Packet[] directly with private annexBToAVCC for H.264/H.265
- Simplify TrackDecoder config resolution to single candidate with immediate throw
- Remove @napi-rs/webcodecs dependency
- Update AGENTS.md and README.md to reflect new architecture
@juliendargelos juliendargelos added the Type: Enhancement New feature or request label Apr 30, 2026
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 30, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
fsv Ignored Ignored Apr 30, 2026 7:37pm

Request Review

@juliendargelos juliendargelos merged commit b9bc9c3 into main Apr 30, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Type: Enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant