Preview from BDMV folder so the BD-J menu Xlet actually loads

The disc structure, signed JAR, and video are all valid. The menu never
appeared because 'make run' opened the UDF .iso: libbluray's BD-J stack must
copy BDMV/JAR/00000.jar out of the image into /tmp/libbluray-bdj-cache before
the JVM can load it, and that write is refused by libbluray's BD-J
SecurityManager (usingUdf=true / no disc root). With no JAR mounted the Xlet
class isn't found (ClassNotFoundException: org.homebrew.MyXlet) and VLC falls
back to the raw playlist -> video, no menu.

Opening the build/disc BDMV folder instead lets libbluray read the JAR
directly, so the Xlet loads and the menu overlay runs. The ISO is still built
for burning; real players read the JAR from the disc filesystem directly.

- run-vlc.sh: default to build/disc, accept folder or .iso, add --bluray-menu
- Makefile: 'run' depends on the disc folder, not the ISO
- README: document the folder-vs-ISO libbluray caveat

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
happy 2026-08-25 14:57:31 -04:00
parent 9c88b8f7f6
commit 48c172cb80
3 changed files with 42 additions and 10 deletions

View file

@ -102,8 +102,11 @@ inspect: $(ISO_FILE)
bd_info $(ISO_FILE)
bd_list_titles $(ISO_FILE) -a
run: bootstrap $(ISO_FILE)
scripts/run-vlc.sh $(ISO_FILE)
# Preview the menu straight from the BDMV folder. libbluray loads the BD-J Xlet
# from a folder but not from a UDF .iso on this setup (see scripts/run-vlc.sh),
# so `run` intentionally does not depend on the ISO.
run: bootstrap $(JAR_FILE)
scripts/run-vlc.sh $(DISC_DIR)
open: run