From 3f4e69f7b803c15c06455800f8b176251154a2c5 Mon Sep 17 00:00:00 2001 From: Matthew Jackson <1085847+MattJackson@users.noreply.github.com> Date: Tue, 25 Aug 2026 12:09:37 -0700 Subject: [PATCH] labels: add Fox dcx.xml vendor parser MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Older Fox discs ship a loose plain-XML manifest at /BDMV/JAR//dcx.xml (root ) that names every feature stream's language, editorial purpose and forced/SDH state in attributes — fully parseable and previously unowned (2 Fox discs matched no parser, 11 were mis-owned by the deluxe stub). New src/labels/fox.rs: - detect(): loose dcx.xml under /BDMV/JAR/*/ (cheap dir walk), falling back to a com/foxbd/ jar central-directory prefix so newer Fox discs are attributed to Fox even though their bytecode form isn't decoded yet (Phase 2, sketched in-file). - parse(): scopes extraction to one element (the richest, to avoid merging regional 00800/00801 STN tables), reusing labels/xml.rs. audio type=rnib -> Descriptive, comment* -> Commentary; subtitle form=sdh -> Sdh, type=embed -> Forced; nested id="NN" -> 1-based per-type STN slot. High confidence. - Feature playlist id recorded via tracing::debug for now; dev's ParseResult has no feature_playlist field (that FeaturePlaylistHint slot lives on selection-hardening). An in-code note documents wiring it at reconciliation, matching paramount::parse. Registered ahead of mpls_universal, alongside the High-confidence vendor parsers; registry-order lock test updated. Tests embed the real Life of Pi dcx.xml (/BDMV/JAR/05001), asserting the 00800 feature selection + id, all 11 audio labels (incl. the eng rnib descriptive track) and 11 subtitle labels (sdh/forced/none), the no-cross-playlist-merge scope rule, plus negative-detect cases. --- src/labels/fox.rs | 546 ++++++++++++++++++++++++++++++++++++++++++++++ src/labels/mod.rs | 17 +- 2 files changed, 559 insertions(+), 4 deletions(-) create mode 100644 src/labels/fox.rs diff --git a/src/labels/fox.rs b/src/labels/fox.rs new file mode 100644 index 00000000..5eab73c2 --- /dev/null +++ b/src/labels/fox.rs @@ -0,0 +1,546 @@ +//! Fox — loose `/BDMV/JAR//dcx.xml` plain-XML manifest. +//! +//! Older Fox authoring (e.g. *Life of Pi*, `/BDMV/JAR/05001/dcx.xml`) ships a +//! human-readable XML manifest alongside the BD-J jar. Its root is ``, and +//! under `` it lists every playlist the disc plays. The main-feature +//! playlists carry nested per-stream `