Security - Remove the unsafe Vec::set_len over recycled sector buffers — UB reachable from safe code (GHSA-j8ww-f5fg-9pmh, low). Uses Vec::resize; pooling unchanged. CI / tooling - clippy on stable with the MSRV single-sourced from Cargo.toml; cargo-deny dependency-audit gate with first-party git sources allowed (#15); audience-based comment-guard (#17). Docs - README (keydb ownership, BD-J parser count), drive-access transport/reset notes, mux timeline module-doc links.
3.1 KiB
Fox — dcx.xml label parser
Older Fox authoring (e.g. a real Fox release, /BDMV/JAR/05001/dcx.xml) ships a
human-readable XML manifest alongside the BD-J jar. Its root is <dcx>, and
under <disc> it lists every playlist the disc plays. The main-feature
playlists carry nested per-stream <audio>/<subtitle> elements naming
language, editorial purpose and forced/SDH state outright — everything a
label parser wants, in attributes, with no bytecode to walk.
NOT A SPECIFICATION. /BDMV/JAR/ is application-defined space, so this file
is one authoring house's internal metadata that happens to press onto the
disc. Every field meaning below was read off a real disc; treat an
unfamiliar value as unknown rather than guessing.
Confirmed schema
A real Fox release, /BDMV/JAR/05001/dcx.xml:
<dcx>
<disc>
<playlist id="00001" lang="eng" name="topmenu"/>
...
<playlist id="00800" lang="eng" name="feature" vers="1" durs="7628">
<audio id="01" lang="eng" type="feature"/>
<audio id="02" lang="eng" type="rnib"/>
<audio id="03" lang="spa" dial="lat" type="feature"/>
...
<subtitle id="01" lang="eng" type="feature" form="sdh"/>
<subtitle id="02" lang="spa" dial="lat" type="embed"/>
...
<subtitle id="11" lang="eng" type="text"/>
<properties> ...chapter marks... </properties>
</playlist>
<playlist id="00801" lang="jpn" name="feature" vers="1" durs="7628"> ... </playlist>
</disc>
</dcx>
Field meanings (read off the disc, not documented)
<audio type>:feature= a normal program track;rnib= a descriptive/narration track ("Royal National Institute of Blind People" described-video), mapped toLabelPurpose::Descriptive. Atypecontaining "comment" maps toLabelPurpose::Commentary.<subtitle form>:sdhmarks a subtitles-for-the-deaf-and-hard-of- hearing track (LabelQualifier::Sdh).<subtitle type>:embedmarks a dedicated forced/embedded-subtitle track (LabelQualifier::Forced);feature/textare full tracks.idon a nested stream is its 1-based STN slot WITHIN ITS TYPE (audio ids 01..N, subtitle ids 01..N independently), matching the vendorstream_numberconvention the ordinal binder insuper::apply_labelsreads.
The <audio>/<subtitle> elements are NESTED inside one feature playlist,
so extraction is scoped to a single <playlist name="feature"> element —
never a document-wide <audio> scan, which would merge the regional
00800 (eng) and 00801 (jpn) tables into one and collide their slots.
select_feature_playlist scoping rationale
Among all <playlist name="feature"> elements — Fox presses one per
regional variant (00800 eng, 00801 jpn) — the one carrying the most
<audio>/<subtitle> streams wins, ties to the first.
Returning ONE element is the whole point: each feature playlist is its own
STN table with its own 1-based slot ids, so merging two would put two
different streams on slot 01. The richest table is the fullest label set
and anchors to its matching title by language sequence in
super::apply_labels.