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