Index
Nächste Vorherige


Variablenkonzept (bzw. Programmierung): 

Die 'Programmiersprache' bei dvdauthor und MuxMan ist leider sehr unterschiedlich. Dvdauthor verwendet eine C ähnliche 'Hochsprache', MuxMan ist sehr nah am 'Maschinencode' und daher eher mit 'Assembler' vergleichbar. Ein Vorteil bei MuxMan ist die Möglichkeit symbolische Namen zu verwenden, so kann man anstatt 'titleset 1 menu 4' den symbolischen Namen 'titleset1submenu3' verwenden. Außerdem ist der code praktisch identisch mit demjenigen in pgcedit, so dass man sich bei Nachbearbeitung, Prüfung oder Fehlersuche mit pgcedit sehr leicht 'zurechtfindet'.

DVD Player (auch Soft Player wie PowerDVD, WinDVD...) haben eine sogenannte "virtual machine". Diese kann man als simplen programmierbaren Prozessor verstehen. Die virtual machine hat 16 "general purpose" Register (die man mit Variablen in einer Programmiersprache vergleichen kann), die 16 Bit Integer (Ganzzahl) Werte verwenden. Dvdauthor verwendet 3 davon für interne Zwecke, so dass man die Register g0 bis g12 zur (freien) Verfügung hat (bei MuxMan hat man alle 16 GPRM0 bis GPRM15 verfügbar). Außerdem hat man Vergleichsoperatoren =,<,>... und man kann "if... then ... else..." Befehle verwenden.
Zusätzlich zu den "general purpose" Registern gibt es Systemregister, diese werden z.B. für den ausgewählen Audiostream bzw. Untertitelstream sowie für den in einem Menü ausgewählten Button verwendet (in dvdauthor: audio0 bis audio7, bzw. subtitle0 bis subtitle31/subtitle64 bis subtitle95, sowie button1024 bis button36864). Bei Untertitelstreams gibt es zwei Bereiche 0-31 sowie 64-95. Dies hängt damit zusammen, dass es sogenannte "forced" Untertitel gibt, die immer angezeigt werden sollen. Wenn man "normale" Untertitel sehen will, muss man den Bereich 64 bis 95 verwenden, sonst werden nur die Untertitel (aus dem gewählten Stream) angezeigt die "forced" formattiert sind. Bei Buttons ist die Buttonnummer immer mit 1024 multipliziert, der erste Button eines Menüs ist daher 1024, der zweite 2048... Eine brauchbare Übersicht gibt es im dvdauthor Wiki.

In MuxMan ist es 'ähnlich', Buttonnummern werden jedoch nicht mit 1024 multipliziert (also kann man hier button=1 bis 36 verwenden). Um einen Audio oder Untertitel Stream auszuwählen gibt es das Kommando 'SetSTN' (z.B. 'SetSTN audio=1, subpicture=1:OFF'), um einen Button als ausgewählt zu setzen kann man das Kommando SetHL_BTNN HL_BTNN=X mit X= Buttonnummer verwenden. Eine offizielle freie Doku hierfür ist aber leider nicht verfügbar, vieles kann man bei dvd-replica bzw. bei mpucoder nachlesen (kostet allerdings ein wenig). Außerdem hilft pgcedit. Einige weitere Befehle und 'Tricks' sind im Kapitel VM Command Editor sowie im Jump und Call Überblick beschrieben.

Der folgende Absatz bezieht sich rein auf dvdauthor. Für MuxMan gilt prinzipiell ähnliches, weil aber MuxMan insgesamt wesentlich komplexer ist, beschreibe ich hier 'nur' die einfacher zu verstehende dvdauthor Variante.

In GFD werden die Register g0, g1 und g2 bei MultiVTS DVDs für interne Zwecke verwendet: g1 um einen Film direkt zu starten ("Start action = Show movie") und g2 um den nächsten Film zu starten ("End action = Next title"). Anmerkung: Wenn 'Loop mit jump Menu' aktiviert ist, wird zusätzlich auch noch die Variable g3 verwendet.
1. Film direkt starten:
Hierzu wird das Register g1 vor dem Anzeigen des Hauptmenüs auf "1" gesetzt 
( < pre > { g1=1;  } </pre > ). 
In den Titleset Menüs wird dann geprüft ob g1=1 ist. Falls ja, wird gleich der Film gestartet (das Menü wird "übersprungen"), falls nicht, wird normal das Menü angezeigt. 
(   < pre > { if (g1 eq 1) jump title 1 chapter 1;  } </pre >   )
Vor dem Abspielen des Films wird dann g1 auf 0 zurückgesetzt, um ggf. das Menü per Fernbedienung starten zu können, ansonsten würde es wieder "übersprungen" werden.
 (  < pre > { g1=0;  } </pre >   )

2. Nächsten Film starten: (Ist relativ kompliziert, da hierzu ein nicht sichtbares PseudoMenü im VMGM (Hauptmenü) Bereich verwendet wird)
Im (normalen) Hauptmenü passiert nichts besonderes, aber es gibt ein zweites PseudoMenü was nur Kommandos enthält:

  < pgc pause="0 ">
  < pre >
   { if (g2 eq 1) jump titleset 1 menu;
     if (g2 eq 2) jump
titleset 2 menu;
      ... 
     if (g2 eq N) jump
titleset N menu; }
  </pre >
  </pgc >

(N ist die Nummer des letzten Films)
Wenn dieses PseudoMenü gestartet wird, werden die Kommandos "abgearbeitet" und je nach Wert von g2 das entsprechende Titlesetmenü gestartet.

Nach einem Film wird jetzt g2 auf die Nummer des nächsten Films gesetzt (sowie g1 auf "1" gesetzt) und das PseudoMenü angesprungen. Nach dem ersten Film also:

< post>{g1=1;g2=2;call vmgm menu 2;}</post >

Weiteres (sowie Aufbau der gesamten Steuerungs XML Datei) siehe dvdauthor manual:
 http://dvdauthor.sourceforge.net/doc/dvdauthor.html