- Blocked upstream: justin13888/gamut#28 (requirements pinned in a comment there). **v1 hard blocker** — JPEG is in default features. - When it lands (pin bump first): replace `zune-jpeg` decode, `jpeg-encoder` encode, and the entire vendored jpegli stack (`codecs/jpegli.rs`, `third_party/jpegli` submodule, cc/cmake/bindgen build.rs slice). - APP-segment metadata embed/extract via gamut — final removal of `img-parts` happens here. - Drop deps: `zune-jpeg`, `jpeg-encoder`, `img-parts`, jpegli vendored toolchain; delete `jpeg-*-jpegli*` features. - Quality benches vs fixtures (`IMG_1347.jpg`, `_JIC7790.jpeg`, `test.jpeg`); jpegli-parity tracked upstream (gamut#19/#29/#30). - Depends on: #19.
zune-jpegdecode,jpeg-encoderencode, and the entire vendored jpegli stack (codecs/jpegli.rs,third_party/jpeglisubmodule, cc/cmake/bindgen build.rs slice).img-partshappens here.zune-jpeg,jpeg-encoder,img-parts, jpegli vendored toolchain; deletejpeg-*-jpegli*features.IMG_1347.jpg,_JIC7790.jpeg,test.jpeg); jpegli-parity tracked upstream (gamut#19/Hardware decode: VAAPI backend (Linux, HEVC + AV1, dlopen) #29/Hardware decode: MediaCodec backend (Android, HEVC + AV1) #30).