Skip to content

Add public TOC inspection API for progressive streaming#786

Open
tokyovigilante wants to merge 2 commits into
libjxl:mainfrom
tokyovigilante:toc-api
Open

Add public TOC inspection API for progressive streaming#786
tokyovigilante wants to merge 2 commits into
libjxl:mainfrom
tokyovigilante:toc-api

Conversation

@tokyovigilante

@tokyovigilante tokyovigilante commented Jun 1, 2026

Copy link
Copy Markdown

Expose the frame Table of Contents through the public decoder API so streaming consumers can locate frame-section byte boundaries without fully decoding the bitstream: TocEntry / TocGroupKind plus JxlDecoder::{toc_num_entries, toc_entry, frame_data_size, frame_data_offset}, available once the decoder reaches WithFrameInfo.

Entries are reported in bitstream order, each kind resolved through the TOC permutation when present. The section-data offset accumulates the TOC byte size across process() calls, since the TOC may be parsed incrementally.

Tests cover TOC invariants (single/multi-group, permuted), bare-vs- container consistency, and a chunked-vs-single-shot regression.

AI disclosure: written with Claude Code (Opus 4.8) but all code reviewed and unit tested, as well as against jxl-oxide and libjxl outputs. Also tested against an in-house JXL streaming server and client previously using jxl-oxide.

Closes #387

Expose the frame Table of Contents through the public decoder API so
streaming consumers can locate frame-section byte boundaries without
fully decoding the bitstream: `TocEntry` / `TocGroupKind` plus
`JxlDecoder::{toc_num_entries, toc_entry, frame_data_size,
frame_data_offset}`, available once the decoder reaches `WithFrameInfo`.

Entries are reported in bitstream order, each kind resolved through the
TOC permutation when present. The section-data offset accumulates the TOC
byte size across `process()` calls, since the TOC may be parsed
incrementally.

Tests cover TOC invariants (single/multi-group, permuted), bare-vs-
container consistency, and a chunked-vs-single-shot regression.

Signed-off-by: Ryan Walklin <ryan@testtoast.com>
@google-cla

google-cla Bot commented Jun 1, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Way to tell the byte range needed for full lower-resolution image

1 participant