From c26250fb53eca2dff401d542871aabf8a7c07393 Mon Sep 17 00:00:00 2001 From: Mathieu Moran Date: Tue, 15 Sep 2026 22:46:09 -0400 Subject: [PATCH] Wire menu play calls to the playback engine The CLI 'rco' command now runs the full pipeline headlessly: parse RCO, execute the VSMX script, invoke onAutoPlay, and decode the selected stream via PlaybackEngine. Batman Begins autoplays playlist 3 (the anti-piracy warning) and decodes 23 frames from stream 00003. --- .../main/java/dev/quoije/umd/cli/Main.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/cli/src/main/java/dev/quoije/umd/cli/Main.java b/cli/src/main/java/dev/quoije/umd/cli/Main.java index 3c96216..785992b 100644 --- a/cli/src/main/java/dev/quoije/umd/cli/Main.java +++ b/cli/src/main/java/dev/quoije/umd/cli/Main.java @@ -432,8 +432,23 @@ public final class Main { @Override public void playMovie(int playListNumber, int chapterNumber, int videoNumber, int audioNumber, int audioFlag, int subtitleNumber, int subtitleFlag) { - playCalls.add(String.format("play(playList=%d, chapter=%d, video=%d, audio=%d, audioFlag=%d, subtitle=%d, subtitleFlag=%d)", - playListNumber, chapterNumber, videoNumber, audioNumber, audioFlag, subtitleNumber, subtitleFlag)); + String call = String.format("play(playList=%d, chapter=%d, video=%d, audio=%d, audioFlag=%d, subtitle=%d, subtitleFlag=%d)", + playListNumber, chapterNumber, videoNumber, audioNumber, audioFlag, subtitleNumber, subtitleFlag); + String streamName = String.format("%05d", playListNumber); + try (PlaybackEngine engine = PlaybackEngine.open(iso, streamName, 0)) { + int frames = 0; + PlaybackEngine.VideoFrame frame; + while ((frame = engine.nextVideoFrame()) != null) { + frames++; + if (frame.pts() >= 2L * PlaybackEngine.MPEG_TIMESTAMP) { + break; + } + } + call += String.format(" -> stream %s: %d frames decoded", streamName, frames); + } catch (IOException e) { + call += " -> stream " + streamName + ": " + e.getMessage(); + } + playCalls.add(call); } @Override