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.
This commit is contained in:
2026-09-15 22:46:09 -04:00
parent 20d325d383
commit c26250fb53
+17 -2
View File
@@ -432,8 +432,23 @@ public final class Main {
@Override @Override
public void playMovie(int playListNumber, int chapterNumber, int videoNumber, int audioNumber, public void playMovie(int playListNumber, int chapterNumber, int videoNumber, int audioNumber,
int audioFlag, int subtitleNumber, int subtitleFlag) { 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)", 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)); 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 @Override