-
Beschreibung
-
Die Erfindung bezieht sich auf das
Abspielen von Softwareträgern
(beispielsweise kinematographischen Bildern), und insbesondere bezieht
sich die Erfindung auf ein Verfahren zur Datenverschachtelung auf
einem Träger
für die
kontinuierliche Wiedergabe von mehreren Programmversionen mit demselben
Material.
-
Hintergrund
der Erfindung
-
In der Patentschrift Nr. 5 463 565
mit dem Titel „Data
Block Format for Software Carrier and Player Therefor", erteilt am 31.
Oktober 1995 in Namen von Cookson and Ostrover (dieses wird im Folgenden
als das „'565-Patent" bezeichnet) ist
ein optischer Disk-Player beschrieben, der in der Lage ist, eine
von zwei Versionen der gleichen bewegten Bilder wiederzugeben. Die
bewegten Bilder werden auf der Disk als „compressed video" in Form aufeinanderfolgender
Datenblöcke
in einer einzelnen Spur repräsentiert,
wobei jeder Block möglicherweise
eine Video-Information,
eine Audio-Information, eine subtile Information und dergleichen
enthält.
Das '565-Patent
beschreibt, wie eine große
Datenmenge auf einer Disk repräsentiert
werden kann, die nicht größer ist
als die heutzutage geläufigen
Audio-CDs. Es ist nicht
nur möglich,
Tonspuren in mehreren Sprachen anzubringen, sondern es ist sogar
möglich,
zwei Versionen des gleichen kinematographischen Films zu speichern,
z. B. einen R-Standard und einen PG-Standard.
-
Zwei Versionen des gleichen kinematographischen
Films enthalten gewöhnlich
eine große Menge
von gemeinsamem Material. Dies gilt insbesondere für R-Standard- und PG-Standard-Versionen
des gleichen Programms, aber das Gleiche trifft zu für andere
Beispiele von Mehrfach-Versionen (wenigstens zwei) des gleichen
Programmmaterials. Beispielsweise könnte die gleiche Disk Lehr-
und Testmaterialien mit einem Buchthema enthalten, das beiden Versionen
gemeinsam ist. Um die redundante Speicherung von Daten zu minimieren;
werden drei Typen von Datenblöcken
in der gleichen Spur in einer verschachtelten Weise B vorgesehen,
wobei Blöcke vorhanden
sind, die Material enthalten, das der einen Version eigen ist und
Blöcke,
die Material enthalten, das der anderen Version eigen ist, wobei
schließlich noch
Blöcke
vorgesehen sind, die Material enthalten, das beiden Versionen eigen
ist. Durch Benutzung dieser Art von Datenspeichern, wie dies in
der
EP 0 847 197 A1 beschrieben
ist, wird es möglich,
die gewählten
Szenen ohne Datenunterbrechungen zu reproduzieren, indem intermittierend
auf die Daten zugegriffen und diese dekodiert werden, die für gewählte Szenen
spezifisch sind, wobei verschachtelte Dateneinheiten benutzt werden.
Eine Reihe von Codes und Markierungen, die in jedem Block enthalten
sind, ermöglichen
ein Abspielen der gemeinsamen Blöcke, wenn
eine der Versionen abgespielt wird und es werden dabei nur die Blöcke des
einen der zwei Typen abgespielt, je nachdem, welche Version gewählt wurde.
Die Blöcke,
die Daten enthalten, die der nicht gewählten Version zugeordnet sind,
werden übersprungen.
-
Wenn mehr als eine Programmversion
von einem optischen digitalen Disk-System abgenommen werden soll,
können
Umstände
auftreten, wo mechanische und Puffer-Management-Begrenzungen sonst
die kontinuierliche Abspielung der alternativen Versionen verhindern
könnten.
Der Ausdruck „kontinuierliches
Abspielen" bezieht
sich auf genügende
Daten, die jeweils in den notwendigen Puffern verfügbar sind,
um eine kontinuierliche Abspielung ohne erkennbare Unterbrechungen
zu erzeugen, selbst wenn der Wiedergabekopf über nicht gewählte Datenblöcke springen
muss. Während
der Wiedergabekopf über
eine nicht gewählte
Sequenz von Datenblöcken
springt, werden Daten für
die abzuspielende Version durch Puffer geliefert, die ergänzt wurden, bevor
der Start eines Sprunges beginnt. Wenn jedoch eine Folge von Datenblöcken, die übersprungen
werden muss, sehr lang ist, dann kann der Lesekopf möglicherweise
nicht in der Lage sein, sich selbst schnell genug in die richtige
Stellung zurück
zu bewegen, um Daten für
einen speziellen Puffer (Video, Audio usw.) zu beschaffen, der während des Sprunges
geleert wurde. In einem solchen Fall kann in der Zeit, in der der
Lesekopf sich repositioniert und beginnt, den leeren Speicher wieder
zu füllen,
der Schirm dunkelgesteuert sein oder die Tonspur kann angehalten
sein.
-
Je größer die Puffer, desto größer ist
natürlich
die Datenmenge, die darin gespeichert werden kann und desto länger wird
die zulässige
Zeit für
einen Sprung, ohne dass die Puffer erschöpft sind. Es gibt jedoch praktische
Grenzen für
die Größe der Puffer,
wenn man beispielsweise einen kinematographischen Film betrachtet,
wo nach einem gemeinsamen Material die Abspielung abzweigt, entweder
nach einem 10-Minuten-Segment für
eine Version eines 12-Minuten-Segmentes
für ein
weiteres, gefolgt von beiden Versionen, die einiges gleiches Material
enthalten. Von vier aufeinanderfolgenden Blocksequenzen, die auf
der Disk gespeichert sind, könnten
die erste und letzte Sequenz gemeinsames Material enthalten, und
die beiden mittleren Sequenzen könnten jeweils
die Versionen enthalten. Beim Abspielen der Disk muss der Lesekopf über eine
Blocksequenz springen, die entweder 10 Minuten oder 12 Minuten beträgt. Ein
derart großer
Sprung kann eine längere Zeit
erfordern als einer oder mehrere der Puffer durchhalten können. In
einem solchen Fall erfolgt die Abspielung nicht kontinuierlich.
Es ist nicht praktikabel, dieses Problem dadurch zu vermeiden, dass man
sagt, dass die Puffer größer sein
sollten, weil die zusätzlichen
Puffer in hohem Maße
zu den Kosten des Abspielgerätes
beitragen könnten
und innerhalb praktischer Grenzen gibt es immer gewisse Mehrfach-Versions-Disks,
die gerade nicht kontinuierlich abgespielt werden können.
-
Zusammenfassung
der Erfindung
-
Die vorliegende Erfindung besteht
in einem Verfahren zur Initialisierung oder Formatierung von Datenblocks
auf einer Disk zur kontinuierlichen Abspielung beider Versionen
eines Programms mit gemeinsamem Material, wie dies im Patentanspruch
1 definiert ist, und die Erfindung betrifft weiter ein Medium, wie
dies im Patentanspruch 6 definiert ist. Wenn ein Teil eines zu überspringenden
Programms zu lang ist, d. h. wenn der Abstand (gemessen zeitlich oder
in der Länge)
längs der
Spur, über
die der Lesekopf springen muss, so groß ist, dass sich der Lesekopf
nicht selbst rechtzeitig repositionieren kann, um wieder Daten aus
dem relevanten Puffer aufzunehmen, dann werden aufeinanderfolgende
Datenblöcke,
die die zwei Versionen repräsentieren,
in Stücke zerhackt
und in der Spur verschachtelt. Auf diese Weise werden, beispielsweise
wenn die Version B abgespielt wird und die Blöcke A übersprungen werden müssen, die
A-Blöcke
alle so kurz, dass, wenn der Lesekopf einen B-Block ausliest, die
Puffer alle genug Daten besitzen, um ein kontinuierliches Abspielen
zu ermöglichen,
ohne dass irgendein Puffer in der Zeit aufgebraucht wird, in der
der Lesekopf sich selbst am Start des nächsten B-Blockes positioniert.
-
Das Problem bei dieser einfachen
Anordnung besteht darin, dass die A-Datenblöcke nur so wenige sein können oder
so kurz sein können,
dass sie gerade die Puffer nicht genügend ergänzen können, um ein Überspringen
der jeweiligen verschachtelten B-Blöcke zu ermöglichen. Noch schlechter ist die
Gefahr, dass überhaupt
kein A-Block vorhanden ist. In anderen Worten ausgedrückt: zwischen
zwei aufeinanderfolgenden Blöcken
oder Sequenzen von Blöcken,
die gemeinsames (C) Material enthalten, kann ein B-Segment, aber
kein A-Segment vorhanden sein. Wenn die Version A abgespielt wird,
muss der Lesekopf über
die Datenblöcke
springen, die das gesamte B-Segment repräsentieren, und es kann gerade
nicht möglich
sein, ein kontinuierliches Abspielen von einer gemeinsamen Sequenz
nach der nächsten
Sequenz zu ermöglichen,
wenn die Version A abgespielt wird und das B-Material übersprungen werden
muss.
-
Das Grundprinzip der Erfindung besteht
darin, dass in einem solchen Fall das gemeinsame Material, das sonst
dem A-Material folgt, genommen wird, um es, wie in dem gerade für die A-Version-Datenblöcke beschrieben,
zu benutzen. Wenn daher die A-Version abgespielt wird, dann gibt
es Material, zu dem der Lesekopf Zugriff hat, bevor er über jede
folgende Sequenz der B-Version-Datenblöcke springt. Wenn aber gemeinsames
Material auf diese Weise vorgezogen und verschachtelt mit den B-Version-Datenblöcken gespeichert
wird, dann wird dieses gemeinsame Material als Teil der Version
A abgespielt, noch bevor der Lesekopf das gemeinsame Material erreicht,
und um das gemeinsame Material von Anbeginn an abzuspielen, würde dies
in einer Wiederholung des gerade Gesehenen resultieren. Aus diesem
Grunde wird das Material am Start des gemeinsamen Segmentes, das
vorgeschoben und als Blöcke
für die
A-Version benutzt wird, in Blöcken
dupliziert, die die B-Version repräsentieren und vom gemeinsamen
Material gelöscht.
Auf diese Weise wird der Lesekopf den Start des verbleibenden gemeinsamen
Materials erreichen, das noch nicht abgespielt war, und zwar unabhängig davon,
welche Version gerade abgespielt wird. Es ist notwendig, eine gewisse Datenredundanz
in die Disk-Formatierung einzubauen, weil gemeinsames Material,
welches wirklich nur einmal in einem gemeinsamen Segment gespeichert war,
in der Tat dort nicht gespeichert und stattdessen zweimal gespeichert
wurde, nämlich
einmal für
jede der beiden Versionen. Die geringe Redundanz (die zu einem geringen.
Verlust der Gesamt-Speicherkapazität führt) ermöglicht jedoch ein kontinuierliches Abspielen
beider Versionen, unabhängig
davon, wie lang ein Materialsegment ist, das während des Abspielens einer
Version übersprungen
werden muss. Ein Algorithmus zur Steuerung dieses „Datenvorschubs" wird weiter unten
beschrieben. Er ist so ausgebildet, dass das Ausmaß der Redundanz
minimiert wird.
-
Kurzbeschreibung
der Zeichnungen
-
Weitere Ziele, Merkmale und Vorteile
der Erfindung ergeben sich aus der folgenden Beschreibung von Ausführungsbeispielen
anhand der Zeichnung. In der Zeichnung zeigen:
-
1 zeigt
schematisch die Art der Sprünge, die
erforderlich sind, wenn zwei Versionen des gleichen Programms, die
gemeinsames Material besitzen, in einer einzigen Spur gespeichert
werden;
-
2A und 2B sind die gleichen Darstellungen
wie die entsprechenden 7A und 7B des oben erwähnten '565-Patentes, wobei 2A ein Status-Diagramm und
eine Erläuterung
enthält,
wodurch die Art und Weise charakterisiert wird, in der ein Disk-Player
nur jene Datenblöcke
auf einer Diskspur ausliest, die erforderlich sind, um eine gewählte Version
eines Kinofilms oder einer anderen Video-Präsentation
abzuspielen und wobei 2B die Art
und Weise angibt, auf die eine von zwei verschiedenen Versionen
abgespielt werden kann, indem die Regeln benutzt werden, die im
Status-Diagramm nach 2A angegeben
sind;
-
3 entspricht
der 2 in dem oben erwähnten '565-Patent und die
Figur ist ein Blockschaltbild des Disk-Players (mit verschiedenen
Puffern, deren Verständnis
erforderlich ist, um die vorliegende Erfindung zu verstehen);
-
4 ist
ein vereinfachtes Diagramm längs der
Linien gemäß 2B, und es werden zwei Fälle gezeigt,
bei denen eine Pufferkapazität
kein Problem ergibt;
-
5 ist
ein der 4 entsprechendes
Diagramm, aber mit relativ einfachen Änderungen, und es wird gezeigt,
wie lange Segmente ein Abspielen verursachen können, das nicht kontinuierlich
verläuft;
-
6 veranschaulicht
das Verschachtelungs-Verfahren gemäß der Erfindung, wo ausreichend
Programmmaterial sowohl in den A- als auch in den B-Segmenten zwischen
zwei gemeinsamen C-Segmenten vorhanden ist;
-
7 ist
eine Fortsetzung von 6,
jedoch wird hier das Verschachtelungs-Verfahren gemäß der Erfindung
veranschaulicht, wenn eines der beiden Segmente nicht genügend Material
aufweist, um die notwendige Verschachtelung zuzulassen;
-
8 ist
eine weitere Fortführung
nach 7, und es wird
hier ein extremer Fall veranschaulicht, bei dem gemeinsames Material
redundant kodiert ist, um Sprünge über anderes
redundant kodiertes gemeinsames Material zu ermöglichen;
-
9 veranschaulicht
eine weitere Erstreckung des Verschachtelungs-Verfahrens gemäß der Erfindung, und es wird
ein extremer Fall gezeigt, bei dem das gemeinsame Material in einem
gemeinsamen Segment redundant in Datenblöcken kodiert ist, die die beiden
unterschiedlichen Versionen repräsentieren;
-
10 veranschaulicht
die Blocksegmente, die durch die Ausdrücke α und β(α) repräsentiert werden, wie diese
in den Ablaufdiagrammen benutzt werden, die das Verfahren der Erfindung
beschreiben;
-
die 11A und 11B veranschaulichen zwei alternative
mathematische Beziehungen zwischen den Variablen α und β(α);
-
12 veranschaulicht
ein System, mit welchem das Verfahren der vorliegenden Erfindung
ausgeführt
werden kann, und es sind weiter verschiedene Listen und Quellmaterialien
gezeigt, die im Einzelnen weiter unten beschrieben werden;
-
13A und 13B veranschaulichen das
bevorzugte Verfahren zur Redundant-Kodierung gemeinsamen Materials,
um eine unterbrechungslose Abspielung von zwei Versionen des gleichen
Materials zu gewährleisten.
-
Detaillierte
Beschreibung des Ausführungsbeispiels der
Erfindung
-
Das Problem, auf das die
vorliegende Erfindung gerichtet ist
-
1 veranschaulicht
symbolisch aufeinanderfolgende Programmsegmente, die abzuspielen sind,
wenn eine ausgewählte
von zwei unterschiedlichen Versionen des gleichen Programmmaterials
abgespielt werden soll. Wie dargestellt, gibt es fünf gemeinsame
C-Segmente, die alle abgespielt werden müssen, gleichgültig, ob
die Version A oder die Version B gewählt wurde. Die obere Zeile,
die mit VERSION A gekennzeichnet ist, zeigt drei Segmente, die der
Version A eigen sind. Die Segmente, die für diese Version nacheinander
abgespielt werden müssen, sind
CACACCAC . Die Version B erfordert andererseits das Abspielen unterschiedlicher
eigener Segmente, wie dies in der mit VERSION B gekennzeichneten
Zeile angegeben ist. Hier ist die korrekte Reihenfolge CBCCBCBC.
In beiden Fällen
zeigen die Pfeile die Flussrichtung von Segment zu Segment. Die
C-Segmente sind beiden Versionen gemeinsam. Die gemeinsamen Segmente
vermindern weitgehend den Speicherbedarf, der sonst für zwei unterschiedliche
Versionen erforderlich wäre.
-
Obgleich die verschiedenen Segmente
(von denen jedes durch zahlreiche aufeinanderfolgende Datenblöcke repräsentiert
werden kann) in 1 in drei
Zeilen dargestellt sind, werden im typischen Falle sämtliche
Segmente in einer einzigen Spur auf einer optischen Disk oder auf
irgendeinem anderen äquivalenten
Speichermedium aufgezeichnet. Die Segmente oder die Datenblöcke sind
nicht parallel zueinander gespeichert, obgleich zur Veranschaulichung
dies in 1 in der Weise
dargestellt ist. Wenn daher alternierende Segmente A und B zwischen
zwei aufeinanderfolgenden C-Segmenten vorhanden sind, wie dies am
linken Ende von 1 und auch
am rechten Ende dargestellt ist, dann ist es notwendig, sowohl die
A-Segmente als auch die B-Segmente zwischen den beiden C-Segmenten
zu speichern. Es können
entweder die A-Segmente oder die B-Segmente zuerst gespeichert werden,
solange die A-Datenblöcke übersprungen
werden, wenn die Version B abgespielt wird und die B-Versions-Datenblöcke übersprungen
werden, wenn die A-Version abgespielt wird. Dies ist deutlicher
aus 2B ersichtlich, und
diese Figur stellt eine Kopie der 7B des oben
erwähnten '565-Patentes dar.
-
2B zeigt
einen Teil der Spur mit aufeinanderfolgenden Datenblöcken, die
mit A, B oder C bezeichnet sind. Es ist klar, dass in der Praxis
Tausende von Datenblöcken
der gleichen Type aufeinanderfolgen können, wobei die meisten der Datenblöcke auf
der Disk von der Type C sind. Um jedoch die Art und Weise zu veranschaulichen,
wie das System über
die Datenblöcke
springt, die nicht erforderlich sind, zeigt 2B nur zwei Blöcke der gleichen Type aufeinanderfolgend.
In 2B sind zwei Sequenzen dargestellt,
eine oben zum Abspielen der Version B und die andere unten zum Abspielen
der Version A. Wenn es die Version B ist, die ausgewählt wurde
und angenommen wird, dass irgendwie der B-Block auf der linken Seite
abgespielt wird, dann wird klar, dass die nächsten beiden A-Blöcke übersprungen
werden müssen,
um auf den vierten Block, einen B-Block, überzugehen. Nachdem dieser
Block abgespielt ist, muss der nächste
A-Block übersprungen
werden. Zwei gemeinsame C-Blöcke
werden dann abgespielt, wonach ein Sprung über einen A-Block auf einen
weiteren C-Block durchgeführt
werden muss. Dann wird der nächste
Block, ein B-Block, abgespielt, gefolgt von B-, C- und B-Blöcken. Zum
Schluss wird ein Sprung über
einen A-Block nach dem letzten Block durchgeführt, der in 2B ersichtlich ist, nämlich einen C-Block.
-
Wenn andererseits die Version A abgespielt werden
soll, dann werden zwei aufeinanderfolge A-Blöcke abgespielt, und es gibt
dann einen Sprung über
einen B-Block, und
es werden die nächsten
fünf Blöcke ACCAC
abgespielt, und dann gibt es einen weiteren Sprung über zwei
B-Blöcke
nach einem C-Block, und schließlich
gibt es einen Sprung über
einen weiteren B-Block nach einem A-Block und einen folgenden C-Block.
Das Übergangsmuster
ist, dass drei verschiedene Übergänge von
einem Block auf einen anderen vorhanden sind. Zuerst erfolgt ein
Abspielen eines Blockes unmittelbar nach dem Abspielen des vorherigen
Blockes. Es gibt sieben Beispiele hiervon, die in 2B dargestellt sind: AA, BB, CC, CA,
CB, AC und BC. Die beiden auszuschließenden Möglichkeiten sind AB und BA,
da Blöcke,
die beiden Versionen gleich sind, nicht während der gleichen Disk-Abspielung
ausgelesen werden, sondern eine nach der anderen. Es gibt sieben
Möglichkeiten
des Übergangs
von Blocktype zu Blocktype, und es gibt in Wirklichkeit gerade drei
Grundoperationen, die von einem Block nach irgendeiner Type des
nächst
benachbarten Blockes jener Type folgen; ein Sprung von einem A nach
einem A oder C oder ein Sprung von einem B nach einem B oder C oder
ein Abzweig von einem C-Block, entweder nach einem benachbarten
A-Block oder einem benachbarten B-Block oder nach B oder A irgendwo
hinten in der Linie. Die meisten Übergänge sind von der ersten Type.
Die zweite Type tritt auf, wenn ein A von einem B gefolgt wird (von
denen zwei Blöcke
niemals aufeinanderfolgend abgespielt werden können). Ein Sprung muss von
dem A-Block nach einem weiteren A-Block oder auf einen C-Block vorgenommen
werden. Ähnliche Bemerkungen
treffen für
B-Blöcke zu,
denen ein A-Block folgt. Die dritte Type tritt am Ende des Abspielens
eines C-Blocks auf, wenn kein weiteres gemeinsames Material abzuspielen
ist und eine Schaltung nach einer Version oder der anderen Version durchgeführt werden
muss. Der nächste
Block wird abgespielt, wenn er ein Teil der gewählten Version ist, oder es
müssen
einige Blöcke übersprungen
werden, wenn die Abzweigung nach einem Block in der anderen Version
führt.
-
2A zeigt
das Zustands-Diagramm, welches definiert, wie und wann Übergänge von
einem Block nach einem anderen vorgenommen werden. Jeder Datenblock
umfasst eine Zwei-Bit-Zeigermarkierung, möglicherweise gefolgt durch
ein Feld, das einen 20-Bit-Zeiger enthält (wenn ein Zeiger vorhanden
ist, dann ist er immer auf die serielle Block-Nummer eines weiteren
Datenblockes gerichtet). Es wird auf den Code in 2A Bezug genommen. Wenn die Zwei-Bit-Zeigermarkierung
gleich 00 ist, dann ist das eine Anzeige dafür, dass die Verarbeitung mit
dem nächsten
Block fortgesetzt werden sollte; in diesem Fall besteht kein Bedarf
nach einem Zeiger. Wenn die Zwei-Bit-Zeigermarkierung ein 01-Code
ist, dann ist dies eine Anzeige dafür, dass ein Sprung nach einem Block
in der gleichen Version in einiger Entfernung durchgeführt werden
sollte oder nach einem C-Block in einem gewissen Abstand hiervon.
In jedem Fall ist dabei ein Zeiger erforderlich.
-
Die Codes 10 und 11 werden benutzt,
wenn ein Abzweig von einem gemeinsamen C-Block vorgenommen wird.
Welcher Code benutzt wird, hängt davon
ab, ob der nächste
Block ein A oder ein B ist. Wenn der Block nach dem C ein A ist,
dann wird der Code 10 benutzt und der Zeiger ist auf ein B oder
ein C weiter hinten in der Zeile gerichtet. Wenn der Code 11 ist,
bedeutet dies, dass der nächste
Block ein B ist und der Zeiger ist auf ein A oder ein C weiter längs der
Spur gerichtet. Das Betriebssystem weiß, welche Version abgespielt
wird. Wenn die Version A abgespielt wird und der gegenwärtige Block
eine 10-Zeigermarkierung besitzt, bedeutet dies, dass der nächste Block,
ein A, nach dem gegenwärtigen
Block abgespielt werden sollte. Es besteht kein Bedarf nach einem
Zeiger. Der Zeiger ist notwendig, wenn die Version B abgespielt
wird. In diesem Falle sollte keine Abspielung erfolgen, da der nächste Block
ein A ist. Das Abspielgerät
sollte auf den Block springen, der durch den Zeiger angegeben wird – entweder
auf einen weiteren Block C oder einen B-Block, der nur für die abzuspielende
Version B gültig
ist.
-
In gleicher Weise bedeutet dies,
dass der nächste
Block ein B ist, wenn die Version A abgespielt wird und der gegenwärtige Block
ein C mit dem Code 11 für
die Zeigermarkierung ist. Da die Version A abgespielt wird, sollte
der nächste
Block nicht abgespielt werden, nachdem der gegenwärtige beendet ist.
Stattdessen wird ein Sprung nach dem A-Block oder dem C-Block vorgenommen,
der durch den Zeiger identifiziert ist. Andererseits geht das System
einfach auf den nächsten
Block weiter, wenn die Version B abgespielt wird. Die Legende in 2A zeigt, ob der Zeiger
benutzt wird oder nicht, wenn 10- und 11-Zeigermarkierungen in einem
B-Block gefunden wurden.
Die Repräsentation
10(P) ist eine Anzeige, dass der Zeiger benutzt werden sollte, und
eine Repräsentation
10[P] ist eine Anzeige, dass der Zeiger ignoriert werden sollte.
Hierbei ist zu wiederholen, dass der 10-Code für einen C-Block benutzt wird, wenn
der nächste
Block ein A ist. Wenn die Version A abgespielt wird, ist der Zeiger
nicht erforderlich, weil ein Übergang
vom C-Block nach dem folgenden Block ein A ist, wie dies durch das
Symbol 10[P] gekennzeichnet ist. Wenn andererseites die Version
B abgespielt wird, kann keine Abspielung erfolgen, da der nächste Block
ein A ist. Stattdessen muss ein Sprung nach dem Block erfolgen,
der durch den Zeiger angegeben wird, und so wird die Repräsentation 10(P)
benutzt – der
Zeiger zeigt entweder auf einen A-Block oder einen weiteren C-Block.
Eine ähnliche Bemerkung
gilt für
die Repräsentationen
11(P) und 11[P]. In beiden Fällen
ist es ein C-Block, der abgespielt wird, und der nächste Block
ist ein B-Block. Wenn die Version A abgespielt wird, dann sollte
der nächste
Block nicht abgespielt werden, und demgemäß wird das Symbol 11(P) gefordert,
um einen Übergangszustand
anzuzeigen. Wenn andererseits die Version B abgespielt wird, ist
es der folgende B-Block, der abgespielt werden sollte, und demgemäß ist das
Symbol 11[P] zutreffend.
-
Die vier Codes sowie die Belegungen
(P) und [P] sind in 2B angegeben.
Unter Bezugnahme auf die Übergangs-Abspielsequenz
B ist der erste Übergang
01(P). Dabei muss wiederum berücksichtigt
werden, dass der 01-Code einen Sprung von einem Block einer Version
nach einem Block der gleichen Version oder einem gemeinsamen Block
repräsentiert,
und es ist ein Zeiger erforderlich. Der erste gezeigte Übergang
ist 01(P) und ein Sprung von einem B-Block nach einem anderen B-Block.
Der nächste Übergang
auf der B-Abspiellinie ist 10(P) und ein Sprung von B auf ein C.
Das Nächste
ist ein Beispiel des häufigsten Übergangs
von allen, 00, d. h. die nachfolgende Abspielung des nächsten Blockes
nach dem gegenwärtigen
Block.
-
Der vierte Übergang der B-Abspiellinie
wird durch ein 10(P)-Symbol repräsentiert.
Der 10-Code repräsentiert
einen Abzweig von einem C-Block, wenn der nächste Block ein A ist, und
dieses Beispiel ist in 2B dargestellt.
In einem solchen Fall wird, wenn die Version B abgespielt wird,
ein Sprung nach einem Block vorgenommen, der durch den Zeiger identifiziert
wird, und zwar in diesem Falle zu dem nächsten Block C.
-
Der 11-Code wird benutzt, um eine
Abzweigung von einem C-Block zu identifizieren, wenn der nächste Block
ein B ist. Wenn die Version B abgespielt wird, dann ist bei der
betrachteten Situation der Zeiger nicht erforderlich, weil der nächste Block
abgespielt wird. Das bedeutet, warum der nächste Code, wie dargestellt,
11[P] ist. Daraus folgen zwei 00-Code, die eindeutige Übergänge nach
benachbarten Blöcken
repräsentieren,
gefolgt von einem 11[P]-Code, einem Abzweig von einem C-Block nach dem
folgenden Block, der ein B-Block ist. Schießlich wird ein Sprung von diesem
B-Block über
den nächsten
A-Block nach einem C-Block vorgenommen. Dies erfordert einen 01(P)-Code,
und der Code wird benutzt, um von einem Block irgendeiner Version
auf einen Block der gleichen Version oder einen gemeinsamen Block
zu springen.
-
Die A-Abspielfolge in 2B nimmt an, dass es die
Version A ist, die abgespielt wird. Die ersten vier Codes repräsentieren Übergänge auf
benachbarte Blöcke
oder einen Sprung von einem Block einer Version nach einem Block
der gleichen Version. Der nächste
Code 10[P] wird benutzt, um eine Abzweigung von einem C-Block nach einem
benachbarten A-Block anzugeben. Der Zeiger wird nicht benutzt, da
die Version A abgespielt wird, und der Code 10 wird benutzt, weil
der nächste
Block ein A-Block ist. Der nächste
00-Code symbolisiert den Übergang von
einem A-Block auf einen folgenden C-Block.
-
Das Nächste ist ein Sprung von einem C-Block
auf einen weiteren C-Block, wobei zwei B-Blöcke übersprungen werden. Der 11-Code
wird benutzt, weil dies ein Code ist, der benutzt wird, wenn ein
B-Block einem C-Block folgt. Das benutzte Symbol ist 11(P) und nicht
11[P], weil der Zeiger erforderlich ist, um von einem C-Block nach
einem C-Block zu gelangen, der weiter unten in der Zeile liegt.
In gleicher Weise ist der nächste
Code wiederum ein 11(P)-Code, um eine Abzweigung von einem C-Block nach einem
A-Block zu symbolisieren, der weiter unten in der Zeile liegt. Die
Folge in 2 erstreckt
sich mit einem Übergang
von einem A-Block nach dem nächsten
Block, der ein C-Block ist und für
den der Code 00 benutzt wird.
-
Das Status-Diagramm nach 2A fasst alle Möglichkeiten
zusammen. Es wird zunächst
der Status betrachtet, bei dem ein A-Block verarbeitet wird, was
durch den Kreis mit A in der linken oberen Hälfte repräsentiert wird. Eine Zwei-Bit-Zeigermarkierung
in einem A-Block ist 00, wenn der nächste Block auch ein A ist
(dargestellt durch den Übergang von
A zurück
auf A). Wenn der nächste
Block ein B ist, dann sollte er natürlich nicht abgespielt werden. Es
muss ein Sprung von dem A-Block über den B-Block,
entweder auf einen weiteren A-Block oder auf einen C-Block, erfolgen.
In jedem Fall ist der Code 10(P). Die Zeichnung zeigt sowohl einen Sprung über B (nach
einem weiteren A) als auch einen Sprung über B auf ein C.
-
Der einzige andere Übergang
von einem A-Block nach dem nächsten
Block erfolgt, wenn dies ein C-Block ist. Dies wird durch den Code
00 dargestellt.
-
Es gibt vier ähnliche dargestellte Übergänge für den Status
B, d. h. wenn ein Datenblock der Version B ausgelesen wird. Der
00-Code wird benutzt, wenn der nächste
Block ein B oder ein C ist. Der 01(P)-Code wird benutzt, wenn der
nächste
Block ein A ist, und es wird übersprungen,
so dass das System als Nächstes
ein weiteres B oder ein C lesen kann.
-
Die Übergänge von einem C-Block sind
komplizierter, weil es sieben von ihnen gibt und nicht nur vier
für jeden
der A- und B-Blöcke.
Wenn der nächste Block
auch ein C ist, dann ist der Code einfach 00, d. h. lese den nächsten Block.
Wenn der nächste
Block ein A-Block ist und ein Sprung nach einem weiteren C durchgeführt werden
muss, dann steuert der Code 10(P) den Sprung über den A-Block. In gleicher
Weise steuert der Code 11(P) einen Sprung über einen B-Block auf einen
weiteren C-Block. Es ist daran zu erinnern, dass diese beiden Code
benutzt werden, um Abzweigungen von einem C-Block zu steuern in Abhängigkeit
davon, ob der nächste
Block ein A oder ein B ist. In jedem Fall darf der nächste Block
nicht ausgelesen werden und er muss (ebenso wie gleiche Blöcke) über den
nächsten
C-Block springen.
-
Jedoch ist es nach dem Auslesen eines C-Blocks
auch möglich,
einen A-Block oder einen B-Block auszulesen. Um einen A-Block auszulesen, wird
einer der Code 11(P) oder 10[P] benutzt. Der 11-Code wird benutzt,
wenn der nächste
Block ein B ist, und in diesem Falle ist der Zeiger erforderlich.
Der 10-Code wird benutzt, wenn der nächste Block ein A ist, und
in diesem Fall wird der Zeiger nicht benötigt. In gleicher Weise wird,
um den nächsten
B-Block auszulesen, entweder der Code 10(P) oder 11[P] benutzt.
Ersterer wird benutzt, wenn der nächste Block auf der Disk ein
A ist und der Zeiger ist erforderlich, weil dieser Block übersprungen
werden muss. Wenn andererseits der nächste Block ein B ist, dann
teilt der Code 11 dem System mit, nach diesem nächsten Block zu gehen und in
diesem Prozess den Zeiger zu ignorieren, weil dieser nicht benötigt wird.
-
Vielleicht der wichtigste Punkt,
der berücksichtigt
werden muss, ist einer, der aus den Zeichnungen nicht klar wird,
und dieser Punkt besteht darin, dass die meisten Blöcke 00-Zeigermarken
enthalten und keine Zeiger. (Der 00-Code ist der einzige ohne ein
folgendes Zeigerfeld.) Der Grund dafür liegt darin, weil dann, wenn
ein Bild irgendeiner Version abgespielt wird oder wenn ein Bild
eines gemeinsamen Materials wiedergegeben wird, es höchst wahrscheinlich
ist, dass das nächste
Bild von der gleichen Type ist. Infolgedessen übernimmt ein 00-Code allein diese
Aufgabe. Das Gesamtergebnis besteht darin, dass zwei Versionen des
gleichen Kinobildes auf der Disk gespeichert werden können, wobei
der Benutzer die Option hat, eine davon abzuspielen (vorausgesetzt,
dass dies durch irgendeine anwendbare parentale Verriegelung zugelassen
wird), und nur eine winzige Fraktion des gesamten Disk-Inhalts wird durch
organisatorische Bits „verschwendet", die Übergänge von
einem Block nach dem nächsten Block
steuern, der danach auszulesen ist. Dies ist in Übereinstimmung mit der zugrunde
liegenden Konstruktionsphilisophie einer maximalen Flexibilität und dem
Ziel, so viele Optionen wie möglich
zur Verfügung
zu haben, ohne in dem Prozess unnötig Bits zu verschwenden.
-
Die vorliegende Erfindung befasst
sich nicht mit den Codes und den Zeigern, die erforderlich sind, um
von einem Datenblock eines Typs nach einem Datenblock eines anderen
Typs zu gelangen. Es wird angenommen, dass die notwendigen Zeiger
in den Datenblöcken
plaziert sind oder dass sie in einer geeigneten Tabelle irgendwo
gespeichert sind. Die vorliegende Erfindung zeigt, wie A- und B-Type-Datenblöcke auf
der Disk abgelegt (d. h. eingeteilt) werden. Bei der früheren Anordnung
wurde angenommen, dass es immer möglich ist, von einem Datenblock
zu einem anderen zu springen ohne eine sichtbare oder hörbare Unterbrechung
des Programms. Es hat sich jedoch gezeigt, dass ein nahtloses Abspielen
nicht immer möglich
ist. Um zu verstehen, warum dies der Fall ist, wird auf die Elemente
eines typischen Abspielgerätes
Bezug genommen. Das Abspielgerät gemäß 3 ist das gleiche wie das
gemäß 2 des früheren Patentes.
-
Zur vollständigen Beschreibung des Abspielgerätes wird
auf das '565-Patent
Bezug genommen. Es genügt
an dieser Stelle zu bemerken, dass die Information, die von den
Datenblöcken
ausgelesen wird, in jeweiligen Puffern 53, 55, 57 und 59 plaziert wird.
Die Information wird aus den Puffern zu jenem Zeitpunkt ausgelesen,
der tatsächlich
verarbeitet wird, um Bild oder Ton darzustellen. Sprünge über A- oder
B-Datenblöcke sind
möglich,
weil, selbst wenn der Lesekopf nicht alle Daten ausliest, während der Sprung
durchgeführt
wird, genügend
Daten in all den Puffern vorhanden sind, damit das Programm fortgesetzt
und beendet werden kann. Solange der Sprung durchgeführt wird
und der Lesekopf auf der richtigen Spur positioniert ist, bevor
jeder Puffer entleert wurde, ist ein nahtloses Abspielen möglich.
-
4 veranschaulicht
symbolisch zwei einfache Fälle,
bei denen ein nahtloses Abspielen kein Problem ist. In dem einen
Fall befindet sich zwischen zwei gemeinsamen Segmenten ein A-Segment
(einer oder mehrere Datenblöcke),
das abgespielt wird, aber es ist kein B-Segment vorhanden. Das bedeutet,
dass zur Abspielung der A-Version die drei Gruppen von Datenblöcken kontinuierlich
nacheinander abgespielt werden. (Ein Rechteck, das mit A, B oder C
in irgendeiner der Zeichnungen bezeichnet ist, repräsentiert
ein Programmmaterialsegment ohne Bezugnahme auf die akutelle Kodierung
oder einen einzelnen Datenblock der speziellen Type oder eine Gruppe
aufeinanderfolger Datenblöcke
der speziellen Type, abhängig
von dem Kontext.) Um die Version B abzuspielen, wird ein Sprung über die
A-Datenblöcke
vorgenommen. Solange die A-Datenblöcke kurz sind, werden die Puffer
nicht entleert, während der
Lesekopf den ersten C-Block verlässt
und in den zweiten eintritt. Die Zeichnung auf der rechten Seite von 4 zeigt die Spurauslegung,
wenn eines von zwei unterschiedlichen Segmenten abgespielt werden
muss in Abhängigkeit
von der jeweiligen Version. Die beiden Gruppen von Datenblöcken A und
B sind aufeinanderfolgend zwischen zwei gemeinsamen Blöcken gespeichert.
In Abhängigkeit
von der abgespielten Version werden entweder die A-Datenblöcke übersprungen
oder die B-Datenblöcke
werden übersprungen.
Wiederum besteht kein Problem bei der nahtlosen Abspielung, solange
jede Sequenz kurz ist.
-
Das Problem, das in den beiden Fällen auftritt,
ist in 5 dargestellt.
Der einzige Unterschied zwischen den vergleichbaren Fällen gemäß 4 besteht darin, dass das
A-Segment im ersten Fall und die A- und B-Segmente im zweiten Fall
alle sehr viel länger
sind. Deshalb ist es nicht möglich, über derart
lange Segmente zu springen, ohne die Puffer zu entleeren. Wie lang
ein Segment tatsächlich übersprungen
werden kann, ohne dass die Abspielung unterbrochen wird, hängt von
mechanischen Bedingungen und dem benutzten Puffer-Managementsystem
ab. Zum Verständnis
der vorliegenden Erfindung reicht es aus festzustellen, dass es
Segmente mit einer maximalen Länge
gibt, die übersprungen
werden können,
ohne dass eine Unterbrechung der Abspielung erfolgt. Der Wert hängt notwendigerweise
von dem Abspielgerät
ab, für
das die Disks formatiert sind. Bei der vorliegenden Erfindung wird
angenommen, dass es eine solche maximale Länge gibt, wie diese weiter
unten definiert wird, und das erfindungsgemäße Verfahren berücksichtigt
die Benutzung dieses Wertes.
-
Methodologie
zum Erreichen einer nahtlosen Abspielung
-
Das Grundprinzip zur Erlangung einer
nahtlosen Abspielung ist in 6 dargestellt,
obgleich es offensichtlich ist, dass in vielen Fällen die Technik gemäß 6 selbst nicht ausreichend
ist. Die Methodologie besteht darin, das Material der A- und B-Blöcke (dies
kann als Programmmaterial oder Datenblöcke angesehen werden) zwischen
zwei aufeinanderfolgenden gemeinsamen Blöcken zu nehmen und dies Material
in kleinere verschachtelte Abschnitte zu unterteilen. Auf diese
Weise wird es nicht mehr notwendig, über eine Sektion zu springen,
die so lang ist, dass ein Puffer oder mehrere Puffer entleert werden.
-
Der obere Teil von 6 zeigt drei Spuren A, B und C. Natürlich befindet
sich nur eine Spur auf der Disk. Das, was im oberen Teil von 6 dargestellt ist, sollte
als Zeit-Zeilen-Diagramm betrachtet werden. Wenn die Version A abgespielt
wird, dann wird zunächst
der erste C-Block abgespielt, dann der A-Block und schließlich der
zweite C-Block. Wenn die Version B abgespielt wird, dann wird in
gleicher Weise zunächst
der C-Block abgespielt, dann der B-Block und schließlich der
zweite C-Block.
Was in der einzigen Spur jedoch gespeichert wird, ist nicht die
Folge CABC. Stattdessen werden die A-Segmente und die B-Segmente
in zahlreiche kleinere Segmente unterteilt. Dies wird symbolisch
durch die Pfeile in 6 angedeutet.
Die beiden C-Blöcke
werden kontinuierlich abgelegt und zwischen diesen können zahlreiche
alternierende A- und B-Blöcke
vorhanden sein. Der Mittelteil von 6 ist
ein Zeit-Zeilen-Diagramm, vergleichbar mit dem oben dargestellten, aber
mit dem Material, das den A- und B-Versionen eigen ist, wie dies
geteilt in kleinere Segmente und verschachtelt dargestellt ist.
Die Endspurauslegung ist am unteren Teil der Zeichnung dargestellt,
und es ist klar, dass es mehrere altemierende A- und B-Datenblöcke zwischen
den beiden C-Blöcken
gibt. (Wiederum muss festgestellt werden, dass, während individuelle „Blöcke" in der vorstehenden
Beschreibung erwähnt
sind, sich die Beschreibung auch auf Mehrfach-Datenblöcke bezieht.
Selbst jeder der zerhackten A- und B-Blöcke kann ein Mehrfach-Datenblock sein.
Wichtig dabei ist, dass jedes A- und R-"Rechteck" eine genügend kleine Informationsmenge
enthält,
gemessen in Datenblöcken,
Zoll, Sekunden oder anderen zweckmäßigen Parametern, die ein Überspringen
des Blockes ermöglichen,
ohne eine merkliche Unterbrechung beim Abspielen infolge der Entleerung
eines Puffers.) Das B-Segment ist etwas länger als das A-Segment. Dies
bedeutet, dass ein kleines Stück
des Materials der B-Version übrig bleibt.
Dieser kleine Teil wird einfach in der Spur hinter den vier A-Blöcken plaziert.
Es gibt demgemäß fünf „kleine" B-Blöcke und
nur vier „kleine" A-Blöcke. Der
erste Block, der auf der Spur liegt, ist ein B-Block, so dass die
vier A-Blöcke
mit den fünf
B-Blöcken
verschachtelt werden können.
-
Das offensichtliche Problem im Hinblick
auf die einfache Annäherung
gemäß 6 besteht darin, dass nicht
beide A-Versions-Segmente und B-Versions-Segmente zwischen den zwei
gemeinsamen Blöcken
sein können.
Wenn nur ein A-Segment vorhanden ist, dann gibt es kein B-Material,
das zwischen A-Blöcke
verteilt werden könnte,
nachdem das A-Segment aufgeteilt ist. Wenn umgekehrt nur B-Material
vorhanden ist und dies lang ist, besteht scheinbar keine Möglichkeit,
das B-Material mit A-Versions-Blöcken
aufzubrechen, so dass die Puffer ergänzt werden können, wenn
die A-Version abgespielt wird und das B-Material übersprungen
wird. Die Lösung
dieses Problems ist in 7 dargestellt,
wo die Grund-Methodologie der Erfindung ersichtlich ist.
-
Wie aus 7 ersichtlich, wird ein A-Segment in
vier Blöcke
unterteilt, und sie sind verschachtelt mit vier vergleichbaren Blöcken, die
vom längeren B-Segment
erhalten wurden. Anstatt, dass das B-Segment nur ein wenig länger ist
als das A-Segment
wie in 6 dargestellt,
wobei das „belassene" B-Material dem letzten
A-Block folgt, ist
gemäß 7 das B-Material sehr viel
länger.
Es wird ein fünfter B-Block auf der Spur
nach den vier A-Blöcken
plaziert, und dieser Block wird mit B5 in der Zeichnung bezeichnet.
Es wird angenommen, dass all die Blöcke so lang als möglich sind.
Mit anderen Worten ausgedrückt:
alle in 6 und 7 dargestellten Blöcke haben
die maximale Länge.
in dem Sinne, dass irgendeine Verlängerung zu einem Abspielen
führen würde, das
nicht nahtlos verläuft.
Wie in der Zeichnung dargestellt, bleibt ein wenig B-Material übrig, aber
es kann nicht als Teil des Blockes B5 gespeichert werden, weil dies
zu einer Gesamtlänge
führen würde, die
nicht übersprungen
werden kann, ohne dass einer oder mehrere Puffer entleert würden.
-
Das übrige Material im B-Segment
wird in der Spur abgelegt, wie durch die Blöcke B6 dargestellt. Um aber
den Block B6 nach dem Block B5 zu überspringen, wenn die Version
A abzuspielen ist, muss etwas Material der A-Type in einem A-Block zwischen
den Blöcken
B5 und B6 gespeichert werden. Dieses Material ist notwendig, damit
der Lesekopf eine Ablesung vornehmen kann, um die Puffer zu ergänzen, bevor
der Sprung über
den Block B6 erfolgt. Das Problem besteht darin, dass kein A-Material übrig bleibt,
weil sämtliches
Material benutzt wurde beim Ablegen der vier Blöcke zu Beginn der Verschachtelungs-Sequenz.
-
Aus diesem Grunde ist das, was zwischen die
Blöcke
B5 und B6 plaziert wird, um eine Auslesung beim Abspielen der Version
A zu ermöglichen, ein
Block aus einem Material C1, abgenommen vom Beginn des gemeinsamen
Materials auf der rechten Seite der Zeichnung. Dieses gemeinsame
Material muss während
der Abspielung beider Versionen ausgelesen werden, so dass es kein
Problem gibt, dieses vorzuschieben und nach den Blöcken A zu
plazieren, bevor das gemeinsame Material tatsächlich erreicht ist. Das Material
wird einfach durch den Lesekopf abgenommen, wenn die A-Version abgespielt wird,
bevor das gemeinsame Material sonst erreicht werden könnte.
-
Wenn jedoch gemeinsames Material
C1 vorgeschoben und zwischen die Blöcke B5 und B6 plaziert wird
und wenn dieses Material während
der Abspielung der A-Version
ausgelesen wird, bevor das gemeinsame Segment erreicht ist, würde es nicht wieder
im C-Segment ausgelesen, weil dies zu einer Doppelabspielung des
gleichen Materials führen
würde.
Deshalb muss das Material C1 vom gemeinsamen Material gelöscht werden.
Wenn es jedoch vom gemeinsamen Material gelöscht wird, wird es nicht ausgelesen,
wenn die B-Version abgespielt, wird, weil die B-Version immer noch fordert, dass das
gemeinsame Material ausgelesen wird. Die Lösung besteht darin, dass das
mit C1 bezeichnete Material genommen und nicht nur einmal, sondern
zweimal vorgeschoben wird. Das Material wird in der Blocksequenz
plaziert, die während
der Abspielung der A-Version ausgelesen wird, wie dies gerade beschrieben
wurde und ebenso in der Blocksequenz, die der Version B eigen ist.
Dies geschieht, weil der C1-Block unmittelbar hinter dem Block B6
in der Datenblocksequenz liegt, die der Version B eigen ist. Auf
diese Weise wird das C1-Material als Teil der einheitlichen A-Folge
und der einheitlichen B-Folge ausgelesen. Da eine Auslesung in beiden
einheitlichen Sequenzen erfolgt, ist es nicht mehr notwendig, dies in
dem gemeinsamen Material einzuschließen, das auf der Disk eingegeben
wird. Aus diesem Grunde ist, wie unten rechts in 7 angegeben, der letzte Teil des dargestellten
Gesamtspursegmentes der „Rest" des gemeinsamen
Materials – das
ursprüngliche
C-Segment minus C1.
-
In einem gewissen Sinne kann die
Erfindung als Einführung
von Ausfüllblocks
betrachtet werden, wobei der Lesekopf „landen" kann, aber diesen unmittelbar zu Beginn
des Sprunges nach dem nächsten
Ausfüllblock
verlässt.
Der Block C1 in der A-Blockfolge ist ein solcher Ausfüllblock.
Er kann sehr kurz sein, da er nur genug Daten für die Puffer liefern muss,
damit ein Sprung über
den folgenden Block in der B-Version möglich ist. Jeder Ausfüllblock sollte
so kurz als möglich
sein, weil er in dem Material, das der anderen Version eigen ist,
dupliziert werden muss und er vom nächsten gemeinsamen Material „geborgt" wird und dann gelöscht wird,
und es ist zweckmäßig, die
Redundanz auf ein Minimum zu begrenzen.
-
Die der 7 zugrunde liegende Annahme besteht darin,
dass das C1-Material, welchem das Material zugefügt wurde, das der Version B
eigen ist, die dem Block B6 folgt, so kurz ist, dass B6 und C1 zusammen
nicht die maximale Blocklänge überschreiten,
die bei Überschreitung
einen nahtlosen Sprung verhindern würde, wenn die Version A abgespielt
wird und der Lesekopf über
den B6,C1-Block springt. 8 zeigt
einen Fall (eine „Fortsetzung" von 7), bei dem das B-Segment so viel länger ist als
das A-Segment, dass viele Stücke
des C-Materials vorgeschoben werden müssen, um als Ausfüllblöcke in der
Blockfolge zu dienen, die der Version A eigen ist. Dies bedeutet
wiederum, dass sie auch in den Blöcken enthalten sein müssen, die
der Version B eigen sind, da sämtliches
gemeinsame Zeitmaterial vorgeschoben wird und dies notwendigerweise
zu einer redundanten Aufzeichnung führt. Was nach B5 in 7 verbleibt, ist so lang
in 8, dass, zusammen
mit all den vorgeschobenen C-Blöcken,
das resultierende B-Material die maximale Länge überschreitet.
-
Eine andere Möglichkeit, die Situation zu
betrachten, besteht darin dass, während in 7 der Block B6 am Ende des Materials
stand, die der Version B eigen war und der Block C1 angeheftet werden
konnte, dies im Falle von 8 nicht
möglich
ist. Hier ist das B-Segment so lang, dass ein maximal bemessener
Block B6 gerade für
das Material der B-Version erforderlich ist. Da sämtliche
B-Segment-Materialen (einschließlich
B7 und B8) vor dem gemeinsamen Material abgespielt werden müssen, ist
es nicht möglich,
den Block C1 an das Ende des Blockes B6 anzuheften, und da ein Block
B6 in der Endspur aufgezeichnet wird, ist ein weiterer Ausfüllblock
erforderlich, um die Version A abzuspielen. Dieser Ausfüllblock
ist als C2 dargestellt und er wird in der Endspur unmittelbar hinter
dem Block B6 angeordnet. Der nächste
Teil des Segmentes, der der Version B eigen ist, wird als B7 dargestellt,
und dieses Material wird in der Endspur unmittelbar hinter dem Ausfüllblock
C2 aufgezeichnet. Es ist ein weiterer Ausfüllblock C3 erforderlich, der
von dem gemeinsamen Material abgeleitet wurde, bevor der letzte
Teil des B-Materials,
nämlich
der Block B8, abgelegt wird.
-
Wie oben erwähnt, muss sämtliches Material, das von
dem gemeinsamen Segment vorgeschoben und in den Datenblöcken benutzt
wird, die der Version A eigen sind, auch in den Datenblöcken gespeichert
werden, die der Version B eigen sind. Das Material C1 könnte unmittelbar
nach dem Material B8 folgen, wenn die Version B abgespielt wird.
Dies ist in 8 dargestellt.
In gleicher Weise muss C2 C1 folgen und C2 könnte ein Teil des Datenblocks
sein, der B8 und C1 aufweist, außer dass C2 nicht an den Block
angeheftet werden kann, der B8 und C1 enthält, weil dies einen kombinierten
Block ergeben würde,
der größer ist
als die maximale Länge,
die ein nahtloses Abspielen ermöglicht.
Um das Material C2 (und C3) in den Blöcken niederzulegen, die der
Version B eigen sind, ist es tatsächlich erforderlich, einen vierten
Ausfüllblock
in das Material einzufügen,
das der Version A eigen ist. Dieses Material wird wiederum von dem
gemeinsamen Material abgenommen. Dies ist durch den kleinen Block
C4 veranschaulicht. Weil aber C4 nunmehr von dem gemeinsamen Material
vorgeschoben ist, enthält
der letzte Datenblock für
die Version B C4, was auf C2 und C3 folgt. Schließlich wird
das gemeinsame Material, vermindert um die Blöcke C1–C4, aufgezeichnet, um bei
der Abspielung beider Versionen ausgelesen zu werden.
-
Interessant gemäß der Folge nach 8 ist, dass das gemeinsame
Material C4 zweimal in jeder eigenen Datenblocksequenz nur deshalb
aufgezeichnet wird, weil es notwendig ist, einen letzten Ausfüllblock
in der Folge für
die Version A einzufügen,
um in der Lage zu sein, gemeinsames Material C2 und C3 in dem Material
aufzuzeichnen, das der Version B eigen ist. Das erfindungsgemäße Verfahren
betrifft sich jedoch nicht selbst, weil gemeinsames Material aus
einem gemeinsamen Segment herausgenommen und in zwei einheitliche
Versionen dupliziert wurde. Das System schiebt einfach Material
immer dann vor, wenn es erforderlich ist, um einen Ausfüllblock
einzusetzen, der einen weiteren Sprung ermöglicht. Und irgendetwas, das
für die
eine Version aufgezeichnet wird, muss auch für die andere Version aufgezeichnet
werden.
-
Der letzte Fall, der zu betrachten
ist, ist jener, der in 9 dargestellt
ist. In 8 wurde angenommen,
dass es unbegrenztes gemeinsames Material gab, das vorgeschoben
werden konnte, um als Ausfüllblock
für eine
oder beide Versionen zu dienen. Das letzte derartige Segment in 8 war das Segment C4. In
dem Beispiel nach 9 ist
das gemeinsame Material sehr viel kürzer, und das Segment ist nicht
einmal gleich der minimalen Länge,
die für
einen Datenblock erforderlich ist. Deshalb wurde so weit Bezug genommen
auf die maximale Länge
(die Länge, über die
ein nahtloser Sprung nicht stattfinden kann), und es gibt aber auch
eine minimale Länge. Es
muss den Daten eine gewisse endliche Zeit oder Länge in einer Folge von Datenblöcken zugebilligt werden,
um wenigstens teilweise die Puffer zu füllen, bevor ein Sprung durchgeführt wird.
(In der Praxis erlauben sehr kleine Längen Sprünge, aber die Sprünge können für die Praxis
zu klein sein. In dem unten beschriebenen Flussdiagramm ist die
minimale Länge,
die benutzt werden kann, um den „Rest" C4 zu testen, eine solche, die mit αopt definiert
wird, obgleich dies nicht das absolute Minimum ist, das benutzt
werden könnte.)
Es ist gerade nicht möglich,
zu kurze Datenblöcke
niederzulegen, wenn diese als Ausfüllblöcke dienen sollen. Wenn infolgedessen
das verbleibende C4-Material zu kurz ist, um als in sich abgeschlossener
Datenblock für
die Version A zu wirken, muss etwas Anderes damit geschehen, und
das erforderliche Ausfüllblockmaterial
muss von igendwo herkommen. Was dabei geschieht, ist in 9 dargestellt.
-
Nach dem gemeinsamen Material, von
dem C4 das letzte Stück
ist, folgt ein weiteres A-Segment (das keine Daten haben kann),
ein weiteres B-Segment (welches keine Daten haben kann, obgleich
wenigstens eines der A- oder B-Segmente
Daten besitzt) und ein folgendes C-Segment. Das verbleibende Stück C4 des
gemeinsamen Blocks wird einfach auf beide einheitlichen Sequenzen
A und B übertragen,
und das nächste
gemeinsame Material wird als Quelle für einen weiteren Ausfüllblock
benutzt, der erforderlich ist.
-
Gemäß 9 besitzt die weitere Folge (wie beispielsweise
in 8 dargestellt) kein
A-Material mehr; dabei muss man sich vergegenwärtigen, dass das C-Material
für jeden
Ausfüllblock
benutzt wurde, der im Datenblock für die Version A erforderlich
war. So wird das verbleibende C4-Material, das beiden Versionen
gemeinsam ist, einfach hinzugefügt,
um das nächste
A-Material zu starten, da es vor dem nächsten A-Material abgespielt
werden muss. Dies ist unten in 9 dargestellt,
wo C4 vor dem nächsten
A-Material plaziert ist. (Was in 9 dargestellt ist,
ist nicht, wie die letzten drei Segmente A, B und C auf der Disk
abgelegt worden, sondern wie sie erneut formuliert werden, bevor
die Verschachtelungsmethode gemäß 6 bis 8 das nächste Mal benutzt wird.)
-
Das gleiche C4-Material wird nicht
einfach zu Beginn des nächsten
B-Segmentes abgelegt. Der Grund hierfür besteht darin, dass immer
noch etwas B-Material im Segment verarbeitet wird, das bisher nicht
auf der Disk abgelegt wurde. Das B-Material, das verarbeitet werden muss,
ist das Schwanzende des B-Segmentes, das abgelegt wurde, die Blöcke C1 bis
C3, die ihm folgten und nicht abgelegt wurden und dann das kleine
Stück C4,
das nach den Blöcken C1
bis C3 ausgelesen werden muss und schließlich das nächste B-Segment. Was das System
nunmehr „verarbeiten" muss, sind drei
neue aufkommende Segmente – das
nächste
A-Segment mit C4
am Start; ein B-Segment, das aus B8 besteht, gefolgt von C1–C4 und
dem nächsten
vollen B-Segment; und das folgende C-Segment. Die nächsten drei
Segmente werden nicht in dem Sinne rekonstruiert, dass das Material
auf der Disk wie in 9 abgelegt
wird, sondern in dem Sinne, dass dies das Material ist, das für die folgende
Verarbeitung der Type gemäß 6 bis 8 verfügbar ist.
-
Zusammenfassend kann das C4-Material nicht
durch sich selbst auf der Disk formatiert werden, weil es zu kurz
ist. Es scheint, dass es zum Start des nächsten A-Segmentes gehört, weil
das gemeinsame Material in dem gegenwärtigen Segment schon fertig
zur Bearbeitung ist und es gerade dieses eine Stück ist, um das Material einzufügen, das
für die Version
A abgespielt werden muss. Wie bei der Version B ist es auch notwendig,
den Block B8 zu verarbeiten, und es wurde bereits bestimmt, dass
nach dem Block B8 C1, C2 und C3 folgen sollten. Aus diesem Grund
besteht die neue „Zuführung" für die B-Version,
wie in 9 dargestellt,
aus B8, gefolgt von C1 bis C4 und schließlich aus dem nächsten B-Segment.
Wenn die 9 zeigen soll,
dass irgendwelches Material, das von einem gemeinsamen Segment vorgeschoben
werden soll, um in Datenblöcken aufgezeichnet
zu werden, die der Version A (oder der Version B) eigen sind, muss
dieses reserviert werden zur Aufzeichnung in der Datenblockfolge,
die der jeweils anderen Version eigen ist, aber es kann keine Aufzeichnung
erfolgen, bis das Material, das für jene Version bleibt, mit
den früher
vorgeschobenen gemeinsamen Datenblöcken aufgezeichnet ist.
-
Wenn die Verarbeitung fortschreitet,
wird schließlich
ein Punkt erreicht, bei dem die Aufzeichnung der Type gemäß 6 möglich ist und keine weitere
Redundanz eingeführt
werden muss. Dies wird bei Betrachtung und Analyse des Flussdiagramms
klar.
-
Optimale und
maximale Blocklängen
-
Bevor das Flussdiagramm weiter behandelt wird,
das die weiteren Schritte angibt, um die Formatierung der Spur zu
steuern, müssen
die Symbole α und β gemäß 10 verständlich gemacht werden. Das
Symbol α repräsentiert
das, was bisher mit „Ausfüllblock" bezeichnet wurde.
Das Symbol β repräsentiert
einen Block, der in einer Version übersprungen werden muss, und
durch Lesen der Daten, die im Block α enthalten sind (in der abzuspielenden
Version) ergibt sich ein Material in den Puffern, das verfügbar ist
zur Abspielung, wenn der Lesekopf über den Abschnitt β springt
(Die Ausdrücke
wie Segmente, Blöcke
und Abschnitte werden austauschbar benutzt, da ein Segment oder
ein Abschnitt ein Block oder mehrere Blöcke umfassen kann.) Während α und β einfach
zwei aufeinanderfolgende Längen
sind, repräsentiert
das Symbol β(α) die maximale
Länge β, über die
ein nahtloser Sprung durchgeführt
werden kann, nachdem ein Block der Länge α ausgelesen wurde. Es wird auf 11A Bezug genommen. Wenn
die Beziehung linear ist, dann ist es klar, dass, je länger der
Abschnitt α ist,
desto länger
der folgende Abschnitt β sein
kann, weil dort mehr Daten in den Puffern verfügbar sind als Ergebnis der
Auslesung mehrerer Daten. Sogar wenn jedoch α wächst, dann wächst β nicht auf
Unendlich. Der Grund dafür
besteht darin, weil es eine Grenze gibt, wieviele Daten in den Puffern
enthalten sein können.
Wenn diese einmal voll sind, dann bestimmt dies das längste β-Segment,
das übersprungen
werden kann. Das ist der Grund dafür, warum in 11A ein Maximalwert für β(α) vorhanden ist, unabhängig davon,
wie groß α wird. Wenn
die Puffer einmal voll sind, während
der Lesekopf den Abschnitt α verlässt, wird
die Länge des
maximalen nahtlosen Sprungs durch die Kapazität der Puffer bestimmt.
-
Wenn α ein redundantes Material ist,
das von einem C-Segment vorgeschoben wird, gibt es keinen Grund, α über den
Wert am Knick der graphischen Darstellung zu vergrößern, der
den maximalen Anstieg auf β(α) angibt,
d. h. der Wert der Ordinate längs
der horizontalen Linie der graphischen Darstellung. Der niedrigste
Wert von α,
der einen Anstieg auf den maximalen Wert von β(α) liefert, ist ein αopt Wenn ein
Ausfüllblock
erzeugt wird, dessen einziger Zweck darin besteht, einen Sprung über die
folgenden Datenblöcke
zu ermöglichen,
wenn die Version, die den Block enthält, abgespielt wird, dann gibt
es keinen Grund, einen Ausfüllblock
zu benutzen, der länger
ist als αopt. Jeder Ausfüllblock, der von einem gemeinsamen
Material ausgefüllt
ist, führt
zu einer Redundanz, und derartige Redundanzen sollten minimiert
werden.
-
Es sollte beachtet werden, dass der
maximale Wert von β(α) tatsächlich als αmax angegeben
ist. Der Grund dafür
besteht darin, dass dann, wenn der maximale Wert von β(α) das längste Segment
repräsentiert,
das auf der Spur für
eine nahtlose Abspielung aufgezeichnet wurde, die gleiche maximale
Länge für die beiden
aufeinanderfolgenden Abschnitte gilt. Jeder Datenblock einer Type
geht in der verschachtelten Sequenz vor einem Datenblock der anderen
Type, so dass jeder Abschnitt sowohl ein α als auch ein β ist. Infolgedessen
kann die maximale Länge
einer Blocksequenz als αmax bezeichnet werden, d. h. keine Datenblocksequenz,
die einer Version eigen ist, sollte in der Länge αmax überschreiten.
-
Unter der Annahme einer linearen
Beziehung zwischen α und β ist in 11A eine typische Übertragungscharakteristik
dargestellt. Wenn die Länge
von α eines
Datenblocks (oder von Datenblöcken)
ansteigt, dann vergrößert sich
auch die maximale Länge
des folgenden Datenblockes β(α), der übersprungen
werden kann. Jeder Datenblock ist jedoch in der Länge auf αmax begrenzt,
beispielsweise unter der Annahme, dass mehr B-Material als A-Material
auf der Spur vorhanden ist, bevor das nächste gemeinsame Material folgt.
In diesem Fall ist das Ziel der Verschachtelung darin zu sehen,
dass kleine A-Datenblöcke
und große
B-Datenblöcke erhalten werden.
Jeder kleine A-Datenblock, dessen Länge α ist, ermöglicht die Aufzeichnung eines
längeren B-Datenblockes,
wobei die Länge
des B-Datenblockes β(α) ist. Die
optimale Länge
für jeden
A-Datenblock ist jene, die das größte Verhältnis von B(α)/α ergibt.
Der optimale Wert von α – αopt ist
jener, der das maximale Verhältnis
liefert und der in 11A angegeben
ist. Im Falle einer nicht-linearen Beziehung, wie dies in 11B dargestellt ist, muss
der Wert von αopt nicht notwendigerweise der Knick der
Kurve sein. In beiden Fällen
besteht das Ziel darin, aufeinanderfolgend α- und β-Längen zu benutzen, die das Verhältnis β(αopt)/αopt maximieren.
Beim Ablegen dieser diese Längen
benutzenden Datenblöcke
wird das Material längerer
Version so schnell als möglich ausgenutzt,
während
der Anteil des gemeinsamen Materials vermindert wird, das möglicherweise
vorgeschoben wurde, um die α-Segmente
zu erhalten.
-
Die anwendbaren Listen,
die durch die Hardware benutzt werden
-
12 veranschaulicht,
wie das erfindungsgemäße Verfahren
durchgeführt
werden kann. Ein Steuergerät
100, im typischen Fall ein Mikroprozessor, steuert direkt eine Aufzeichnungsvorrichtung 102.
Die dem Steuergerät
zugeführte
Eingangsinformation ist eine Standard-Edit-Decision-List, die die Folge
spezifiziert (gewöhnlich
in Gruppen von Bildern oder GOPs), und zwar in Einheitslängen der
Serien von Segmenten, die für
die beiden Versionen erforderlich sind, wie dies in 1 dargestellt ist. Das tatsächliche
digitale Quellmaterial für
die drei Arten von Segmenten (Version A, Version B und gemeinsame Version)
befinden sich in drei Digitalspeichern 104, 106 und 108.
Das Steuergerät
veranlasst eine der drei Quellen, Material auszugeben, welches über die entsprechenden
Gatter, ebenfalls unter Steuerung des Steuergerätes 100, aufgezeichnet
wird, um die Aufzeichnungsvorrichtung 102 auszudehnen.
-
Das Steuergerät enthält drei Listen, die die nächst verfügbaren Daten
für jede
Quelle identifizieren. Die Listen werden durch die Symbole R(A),
R(B) und R(C) identifiziert. Jede Liste ist nicht mehr als die Repräsentatation
eines jeweiligen ankommenden A-, B- oder C-Segmentes, wie beispielsweise
in Verbindung mit den Segmenten am unteren Teil von 9 diskutiert. Wie in Verbindung mit dem
Flussdiagramm erläutert,
werden die drei Listen während
aufeinanderfolgender Iterationen aktualisiert. Jede Liste repräsentiert
jederzeit eine aufkommende Information für eine der drei Arten von Daten,
die aufgezeichnet werden müssen.
Die Liste R(C) enthält
sämtliches gemeinsame
Material in dem zu behandelnden Segment von dem nächsten abzulegenden
Material bis zum Ende des Segmentes. Wenn das System A-Segmente
und B-Segmente verarbeitet, repräsentiert
R(C) das volle folgende C-Segment, von dem Stücke „ausgeborgt" wurden (vorgeschoben
wie oben erwähnt).
Die Listen R(A) und R(B) repräsentieren
A-Segmente und B- Segmente,
die verarbeitet werden sollen. Wenn ein C-Segment durch sich selbst
verarbeitet wird, sind R(A) und R(B) leer. Sie werden am Ende der
C-Segment-Verarbeitung
aktualisiert, wenn neue A-Segmente und B-Segmente erreicht werden.
Das Steuergerät
benutzt die Information auf der Edit-Decision-List, um die „nächst verfügbaren Daten"-Listen R(A), R(B)
und R(C) zu aktualisieren. Jede Liste identifiziert das jeweilige
digitale Quellmaterial, das die Daten auslesen sollte, um die Aufzeichnung
des zu verarbeitenden Segmentes zu vervollständigen.
-
Flussdiagramm gemäß 13A und 13B
-
Die 13A und 13B zeigen das Flussdiagramm,
das die Formatierung enthält,
wie dies oben in Verbindung mit den 6 bis 9 beschrieben wurde. Gemäß 1 befindet sich fast immer
am Start irgendeines Kinofilms mit zwei Versionen ein gemeinsames
Segment – der
Titel ist in allen Fällen
der gleiche. Demgemäß befindet
sich anfänglich
nur gemeinsames Material, mit dem das System arbeiten muss. Die
drei Funktionen R(A), R(B) und R(C), wie diese in Verbindung mit 12 diskutiert wurden, repräsentieren
Listen von Daten, die unmittelbar verfügbar sind. Unter „unmittelbar
verfügbar" werden die Daten
verstanden, die als Nächstes
auf der Disk formatierbar sind. Die R(C)-Liste umfasst alle der übrigen Daten
in dem gemeinsamen Segment, die zu verarbeiten sind und die bisher
nicht auf der Disk formatiert wurden oder das vollständige gemeinsame Segment,
das dem A-Segment
und dem B-Segment folgt, die formatiert werden, wenn die Verarbeitung der
vorhergehenden gemeinsamen Segmente bereits vollendet ist. Es muss
stets eine „Zuführung" von gemeinsamem
Material vorhanden sein, das vorgeschoben werden kann, falls Ausfüllblöcke erforderlich sind,
und zu diesem Zweck hält
das System die Spur in der Liste R(C) von allen Teilen des gemeinsamen Segmentes.
-
Die R(A)- und R(B)-Listen können andererseits
leer sein. Wenn ein gemeinsames Segment auf der Disk aufgelegt wird,
gibt es kein A- und B-Material, das zu verarbeiten ist. Nur am Ende
der Verarbeitung eines gemeinsamen Segmentes werden neue A- und
B-Segmente verfügbar
(eines von diesen kann nicht existent sein und in diesem Falle ist
die Liste leer – beispielsweise
symbolisiert durch die Bezeichnung R(A) = 0). Es besteht keine Notwendigkeit, eine
Liste der nächsten
A- und B-Segmente
aufrecht zu erhalten, die verarbeitet werden müssen, bis sie tatsächlich erreicht
sind. Es besteht jedoch eine Notwendigkeit, eine R(C)-Liste ständig aufrecht
zu erhalten, selbst dann, wenn nur A- und B-Segmente auf der Disk
formatiert werden, weil es notwendig sein kann, ein Stück des folgenden
gemeinsamen Materials als Ausfüllblock
zu benutzen.
-
Bei dem Schritt S1 werden R(A) und
R(B) beide auf Null gesetzt, da anfänglich nur gemeinsames Material
zu verarbeiten ist. Gleichzeitig wird R(C) gesetzt für die Daten
für das
erste gemeinsame Segment.
-
Die Variable L(X) (wobei X = A, B
oder C) repräsentiert
die Daten, die tatsächlich
auf der Disk während
der gegenwärtigen
Iterationsstufe abgelegt werden. (Alle Referenzen zur Ablage von
Daten auf die Disk können
eine Zwischenstufe aufweisen, in der die formatierten Daten auf
einem Band oder einem Speicher gespeichert werden und dann – zu einem
späteren
Zeitpunkt – eine
Masterkopie erzeugt wird, von der Kopien gezogen werden können.) Es gibt
Grenzen, wieviele Daten abgelegt werden können; die Grundprämisse der
Erfindung besteht darin, dass zum nahtlosen Abspielen eine Grenze
der Länge
eines jeden Segmentes besteht, über
das ein Sprung notwendig werden kann. Es gibt jedoch keine Grenze
bezüglich
der Länge
eines gemeinsamen Segmentes, das keinen Sprung über ein solches Segment erfordert.
Infolgedessen wird der Schritt S2, L(C) gleich R(C) – alles,
was in dem ersten gemeinsamen Segment in der Liste L(C) plaziert
ist, wobei L(C) die Daten repräsentiert,
die auf der Disk während
des gegenwärtigen
Zyklus abgelegt werden. (Die Daten selbst werden aus der digitalen
Quelle 104, 106, 108 gemäß 12 abgelegt und die drei jeweiligen
Listen weisen einfach auf das Material hin, das zu behandeln ist.)
-
Der nächste Unterschritt im Schritt
S2 ist die Formatierung L(C). Dies bedeutet einfach, dass die Daten,
die in L(C) repräsentiert
sind, von der jeweiligen Quelle abgezogen und auf der Disk abgelegt werden.
-
Da R(C) anfänglich die gesamten ersten
gemeinsamen Segmente repräsentiert
und nun alles auf der Disk befindlich ist, muss R(C) auf Null zurückgesetzt
werden. Dies geschieht in dem letzten Unterschritt. Am Ende des
Schrittes S2 sind alle drei Listen leer. Die ersten zwei Schritte
gehen zurück
auf nicht mehr als die Formatierung des ersten gemeinsamen Segmentes,
d. h. die Plazierung sämtlicher
Daten, die das erste gemeinsame Segment des Kinofilms auf der Disk
repräsentieren
unter Benutzung von Kodierungen, Zeigern, Datenblöcken und
eine Formatierung, die in dem jeweiligen betrachteten System benutzt
wird.
-
Wenn nunmehr die drei Listen leer
sind, müssen
sie aus der Edit-Decision-List (vergleiche 12) ergänzt werden. Im Schritt S3 ist
der letzte Unterschritt am Leichtesten zu verstehen. Mit der Verarbeitung
eines gemeinsamen Segmentes, das gerade vollendet wurde, wird R(C)
mit Daten ergänzt, die
für das
nächste
gemeinsame Segment maßgebend
sind. Es gibt jedoch vorhergehende A- und B-Segmente. Während der zeitlich erste Schritt
S3 durchgeführt
wird, gibt es keine frühere „Geschichte", die berücksichtigt
werden müsste,
aber dies ist nicht immer der Fall. Dies kompliziert, das was in
R(A) und. R(B) gespeichert wird.
-
In 9 ist
unten dargestellt, wie die nächst verfügbaren Datenlisten
entwickelt werden. Es kann dort ein kleines Stück von R(C) (C4 in 9) sein, das vom gegenwärtigen C-Segment
verbleibt, das verarbeitet wird. Dieses Stück muss an die R(A)- und R(B)-Listen
angefügt
werden. Nur dann wird das nächste
A-Segment an R(A) angefügt
und das nächste
B-Segment wird an R(B) angefügt.
Immer dann, wenn die Listen aktualisiert werden, indem die neuen
Segmente des Programmmaterials erbracht werden, wurde, wie aus dem
Schritt S3 ersichtlich, R(A) dann zu seinem „Gehalt" sowohl das „Überbleibsel" R(C) als auch das neue Material hinzugefügt. Ähnliche
Bemerkungen gelten für
R(B). Wie für R(C)
wird es einfach gleich dem nächsten
C-Segment gesetzt, da nunmehr „verlorengeht", was darin belassen
wurde.
-
Im Schritt S4 wird eine Probe durchgeführt, ob
irgendwelche weiteren Daten zu verarbeiten sind. Wenn es dort keine
weiteren Daten gibt, dann wird die Verarbeitung angehalten – sämtliche
Daten, die beide Versionen eines Zwei-Stunden-Kinofilms repräsentieren,
wurden beispielsweise auf der Disk aufgetragen oder, wie oben erwähnt, in
Zwischenspeichern in dem richtigen Format und der Folge). Natürlich wird
die Antwort auf die Frage im Schritt S4 negativ beim ersten Abfragen
sein, aber dieser Schritt wird kurz nach dem Start jeder folgenden
Iteration durchgeführt.
Schließlich
gibt es keine A-, B- und C-Segmente mehr, und die Verarbeitung gelangt zu
einem Ende.
-
Wie auf dem Flussdiagramm zwischen
den Schritten S4 und S5 angedeutet, wird beim Rest des Flussdiagramms
angenommen, dass R(B) größer ist als
R(A). In anderen Worten: die beiden Segmente in unterschiedlichen
Versionen werden gleichzeitig verarbeitet. Es wird angenommen, dass
das Segment der Version B größer ist
als das Segment A. Wenn das Gegenteil der Fall ist, dann sollte
die Darstellung im Flussdiagramm umgekehrt werden. Es ist leichter, die
Methodologie zu verstehen, wenn man annimmt, dass mehr B-Daten als
A-Daten für
die zwei entsprechenden Segmente in den unterschiedlichen Versionen
vorhanden sind, als wenn man die Methodologie in allgemeineren Audrücken erklärt. Alles,
was in der tatsächlichen
Praxis erforderlich ist, nachdem eine ursprüngliche Aktualisierung der
drei Listen erfolgt ist, besteht darin, einen Test durchzuführen, ob
R(A) oder R(B) größer ist
und die größere Version
als R(B) im Flussdiagramm zu behandeln und die kleinere als R(A).
-
Unabhängig davon, wie die relativen
Längen von
R(A) und R(B) sind, würde
es scheinen, dass die maximale Datenmenge für das B-Segment zu Beginn jeder
Iteration niedergelegt werden sollte, da R(B) länger ist. Es kann so viel B-Material
vorhanden sein, dass die erforderlichen Sprünge keine nahtlose Abspielung
ermöglichen,
ohne Ausfüllblöcke mit
der begleitenden Redundanz einzuführen, so dass zu Beginn einer
jeden Iteration es bestimmt Sinn macht, so viel B-Material als möglich „loszuwerden". Wie oben in Verbindung
mit den 10 und 11 beschrieben, ist die maximale
Länge einer
Folge von Datenblöcken der
maximale Wert von β(α), was geschrieben
werden kann als β(α)max, und dies ist das Gleiche wie (α)max. Demgemäß können diese vielen Daten von der
R(B)-Liste in L(B) zur unmittelbaren Ablage plaziert werden. Tatsächlich kann
das gesamte Segment, das in R(B) repräsentiert ist, abgelegt werden, wenn
es (α)max nicht überschreitet. Dies wird im Schritt
S5 bestimmt. Wenn R(B) klein genug ist, um insgesamt formatiert
zu werden, so ist R(A) kleiner. L(A) und L(B) werden auf R(A) bzw.
R(B) gesetzt. Nachdem sie auf der Disk formatiert sind, kann das nächste gemeinsame
Segment, das durch R(C) repräsentiert
ist, abgelegt werden, so dass L(C) gleichgesetzt wird R(C). Alle
drei Segmente werden dann formatiert und die drei Listen werden
genullt. Dann wird eine Rückführung auf
den Schritt S3 vorgenommen, wo die Listen ergänzt werden.
-
Früher oder später werden die neuen Segmente
verarbeitet, für
die die einfachen Ablagen des Schrittes 6 nicht möglich sind,
weil R(B) größer ist
als β(α)max. An dieser Stelle muss eine Verschachtelung vorgenommen
werden. Es gibt einen Sinn, einen β-Block zuerst zu formatieren
und mit einer maximalen Länge
vorzusehen, damit ein Ungleichgewicht in R(A) und R(B) vermindert
wird. Wenn jedoch ein großer
B-Block abgelegt wird und nicht genügend Material in R(A) für einen
A-Block vorhanden ist, dann kann die Verschachtelung nicht beginnen.
So wird im Schritt S7 ein Test durchgeführt, um herauszufinden, ob
genügend
Material für
einen A-Block verfügbar
ist.
-
Die Frage ist, wieviel Material in
jedem Block der Version A abgelegt werden sollte. Wie oben erwähnt, wird,
wenn das B-Segment sehr viel größer ist als
das entsprechende A-Segement, während
jeder Iteration ein Teil des Materials in dem nächsten gemeinsamen Segment
auf R(A) übertragen,
so dass ein Ausfüllblock
auf der Disk eingefügt
werden kann, um während
der Abspielung der Version A ausgelesen zu werden. Um die resultierende
Redundanz zu verringern (da der Ausfüllblock sich in den Blöcken, die
der Version B eigen sind, wiederholt), sollte soviel R(B)-Material
für so
wenig R(A)-Material verarbeitet werden, das „ausgeborgt" wurde. Das ideale
Verhältnis
R(B)/R(A) ist β(αopt)/αopt,
was im Flussdiagramm mit „Q" bezeichnet ist,
wie dies erkennbar wird, so dass αopt verfügbar
werden sollte, wenn es für
einen A-Block benötigt
wird. Demgemäß wird,
bevor der erste B-Block der Länge β(α) formatiert
wird, eine Überprüfung durchgeführt, dass
genug Material für einen
A-Block der Länge αopt verfügbar ist,
das dem ersten B-Block der Länge β(α)max folgt, und dies wird dem nächsten B-Block der Länge β(αopt)
vorausgeschickt. (Hierbei sollte berücksichtigt werden, dass dann,
wenn die β(α)-Funktion
linear ist wie in 1 A,
der erste Block der Länge β(α)max die gleiche Länge β(αopt)
hat wie die anderen.) Die Frage ist, wieviel Material tatsächlich für den nächsten A-Block
verfügbar
ist. Gemäß 7 bis 9 ist das, was für einen A-Block verfügbar ist,
das, was in der Liste R(A) belassen ist; zusätzlich zu dem, was von R(C)
vorgeschoben (geborgt) werden kann. So wird im Schritt S7 die Summe
mit dem Betrag der Daten verglichen, die für einen A-Block erforderlich
sind – αopt.
Falls unzureichende Daten vorhanden sind, wird nicht einmal der
erste B-Block abgelegt.
Stattdessen erfolgt eine Rückführung nach
dem Schritt S3, so dass alle drei Listen geändert werden können – R(A) und
R(B) werden beide um den kleinen Betrag von Daten vergrößert, die
für das
nächste
gemeinsame Segment verfügbar
sind und dann werden sie dem jeweils nächsten Segment zugefügt. Da die
A- und B-Segmente ausgedehnt wurden, wird R(C) einfach gleichgesetzt dem
nächsten
C-Segment.
-
Wenn andererseits im Schritt S7 festgestellt wird,
dass genügend
Material verfügbar
ist (die Summe von R(A) und R(C) ist nicht geringer als αopt),
dann wird im Schritt S8 der erste B-Block – maximaler Länge – endgültig niedergelegt
und R(B) wird um den Anteil der so verarbeiteten Daten reduziert.
-
Beginnend mit dem Schritt S9 beginnen
auf einanderfolgende Iterationen, während A,B-Blockpaare optimaler
Längen αopt, β(αopt)
abgelegt werden können.
Aber das optimale Verhältnis
ist nicht immer das, was benötigt
wird, wie dies im Folgenden erläutert
wird.
-
Im Schritt S10 wird ein Test durchgeführt, um zu
bestimmen, ob das gegenwärtige
Verhältnis R(B)/R(A)
kleiner oder gleich ist Q. Da eine Division durch 0 nicht möglich ist,
wird im Schritt S9 eine Überprüfung durchgeführt, um
zu sehen, ob R(A) gleich 0 ist. Wenn dies der Fall ist, ist dies
ein Zeichen dafür,
dass es B-Material gibt, das mit keinem entsprechenden A-Material
vorausgehen muss, und in einem solchen Fall besteht das Ziel darin,
soviel B-Material als möglich
abzulegen und die Ausfüllblöcke auf
einem Minimum zu halten – diese
repräsentieren
eine Redundanz, wenn kein entsprechendes A-Material vorhanden ist –. Im Schritt
S11 wird L(A) gleich αopt gesetzt und L(B) wird gleich β(α)opt gesetzt. Wenn gemäß 11A ein Ausfüllblock eine Länge von αopt hat,
ist β(α) gleich
dem Maximalwert. In anderen Worten ausgedrückt: durch Benutzung von αopt als
Länge des
Ausfüllblockes
kann der folgende Abschnitt (der B-Daten enthält) der längst mögliche sein, relativ zur Länge des
A-Abschnitts. Der Gedanke besteht darin, das Verhältnis β(α)/α zu maximieren,
so dass so viel B-Material als möglich
und so wenig A-Material als möglich
benutzt werden kann.
-
Im Schritt S10 wird unter der Annahme,
dass R(A) nicht gleich 0 ist, das Verhältnis der Daten gebildet, die
in den beiden Listen R(B) und R(A) erzeugt werden, und dieses Verhältnis wird
mit Q verglichen. Q ist das ideale β/α-Verhältnis, β(α)opt/αopt und
es repräsentiert
die größten Daten,
die „auf
Kosten" der geringsten
Redundanz abgelegt werden können, wenn
irgendwelches R(C)-Material geborgt wurde. Wenn das Verhältnis R(B)/R(A)
kleiner oder gleich Q ist, bedeutet dies, dass das A- und B-Material
abgelegt werden kann, ohne irgendwelche Ausfüllblöcke von dem folgenden Segment
ausborgen zu müssen – es gibt
genug A-Material, um diese Arbeit durchzuführen. Wie im Schritt S12 dargestellt,
werden die nächsten
A-Daten, die abgelegt werden, L(A) gleich αopt gesetzt
und das nächste
B-Material wird abgelegt, L(B) wird gleich der gleichen Länge αopt gesetzt, multipliziert
mit dem Verhältnis
der verbleibenden Daten in den beiden Listen. Auf diese Weise wird, wenn
das Verfahren fortgesetzt wird, αopt immer aus der Liste R(A) zur Plazierung
auf der Disk entnommen, gefolgt von einer Datenmenge, die von der
Liste R(B) entnommen wird, was kleiner ist als β(αopt),
aber dazu führt,
dass die B-Liste zur gleichen Zeit mit der Erschöpfung der A-Liste leer wird.
Die Differenz zwischen den Schritten S11 und S12 besteht darin, dass,
während
die Daten L(A), die auf der Disk für die kürzere Version plaziert werden,
immer gleich αopt eingestellt werden, die Daten, die der
längeren
Liste von L(B) entnommen werden, nicht das Maximum sein müssen, das
für einen
nahtlosen Sprung benutzt werden könnte. Wenn ein großer Teil
von B-Daten vorhanden ist, dann wird L(B) = β(αopt).
Wenn jedoch weniger Daten vorhanden sind, dann werden weniger Daten
aus der Liste R(B) entnommen, wie im Schritt S12 dargestellt.
-
Wenn der Zeitschritt S13 erreicht
ist, dann hat das System die Werte von L(A) und L(B) bestimmt. Die
Länge von
L(A) wird immer gleich αopt gemacht und die Daten werden von der
R(A)-Liste entnommen; L(A) wird gesetzt, sogar ohne zu überprüfen, ob
irgendwelche Daten in der R(A)-Liste verfügbar sind, weil im Schritt
S7 bestimmt wurde, dass, falls erforderlich, R(C) genug Daten enthält. Im Schritt
S13 wird eine Überprüfung durchgeführt, um zu
sehen, ob genug Daten in R(A) selbst vorhanden sind, um das L(A)-Erfordernis
zu erfüllen.
Der Test im Schritt S13 überprüft, ob die
Daten, die in R(A) verbleiben, wenigstens gleich αopt sind.
Wenn genügend Daten
in R(A) vorhanden sind, um das L(A)-Erfordernis zu erfüllen, dann
wird der Schritt S14 übersprungen.
Andernfalls wird der Schritt S14 durchgeführt. In diesem Schritt wird
jenes Material von dem nächsten C-Segment
vorgeschoben und in Form von Daten verarbeitet, die der Version
A eigen sind, um als Ausfüllblock
in der Datenblockfolge abgelegt zu werden, die während des Abspielens der Version
A ausgelesen wird. Aus der in Verbindung mit den 7 bis 9 diskutierten
Gründen
ist es außerdem
notwendig, das gleiche Material zu nehmen, das von dem nächsten C-Segment
erhalten wird und dieses in dem Material einzufügen, das für die Version B eigen ist – das Grundbetriebsprinzip
der Erfindung besteht darin, dass immer dann, wenn Material von
einem C-Abschnitt zur Benutzung in einem A-Material-Ausfüllblock vorgeschoben wird,
das gleiche Material in den Daten aufgenommen werden muss, das der
Version B eigen ist. Nachdem die Überprüfung im Schritt S13 durchgeführt wurde,
ob R(A) leer ist oder selbst wenn R(A) einige Daten aufweist, nicht
genug Daten hat, um die L(A)-Forderung zu erfüllen, wird die Differenz Δ zwischen
R(A) und L(A) gebildet. In dem zweiten Unterschritt wird Δ R(A) hinzugefügt, so dass
R(A) nunmehr genug Daten besitzt, um die L(A)-Forderung zu erfüllen. Als
Nächstes
wird die gleiche Datenmenge, die von der R(C)-Liste abgenommen wurde, der
R(B)-Liste hinzugefügt,
um eine Einfügung
in dem Material zu bewirken, das der Version B eigen ist. Schließlich wird
das Material, welches vom C-Segment vorgeschoben wurde, von der
R(C)-Liste gelöscht,
weil es bereits zweimal abgelegt wurde während der Verarbeitung der
A-Daten und der
B-Daten.
-
Die Unterschritte des Schrittes S14
sind in 7 und 8 symbolisiert, wo gezeigt
wird, dass das C-Material vorgeschoben wurde und die eigene Folge
für jede
Version einschließt.
Dies ist, wo die Redundanz ankommt – ein Abschnitt des gemeinsamen Materials
wird gelöscht,
aber es wird stattdessen zweimal aufgezeichnet. Dies ist der Preis,
der gezahlt werden muss, um einen Ausfüllblock abzuleiten, der sonst
nicht existieren würde,
und dieser Ausfüllblock dient
als Absprungpunkt zur Überspringung
des folgenden Datenblocks, der der Version B eigen ist.
-
So wird in den Schritten S13 und
S14 bestimmt, ob genug Material in R(A) enthalten ist, um L(A) zu
stützen;
wenn dies nicht der Fall ist, dann wird R(A) (längs R(B)) im Schritt S14 vergrößert und gleichzeitig
wird R(C) verkleinert. Für
L(B) ist eine unterschiedliche Überprüfung und
mögliche
Korrektur erforderlich. Die Datenmenge, die auf der Disk in einem
der Version B eigenen Block untergebracht werden soll, wird während des
Schrittes S11 oder S12 bestimmt. Im Schritt S15 wird eine Überprüfung durchgeführt, um
zu sehen, ob genug Daten in der R(B)-Liste vorhanden sind, um L(B)
zu stützen.
Wenn dies der Fall ist, wird ein Sprung nach dem Schritt S17 durchgeführt. Wenn
andererseits R(B) kleiner ist als L(B), dann sind nicht genügend Daten
in dem B-Segment verblieben, die verarbeitet werden können, um
den letzten Block zu stützen,
der durch L(B) repräsentiert
ist und der auf der Disk plaziert werden soll. Es besteht jedoch
keine Notwendigkeit, R(B) in einem solchen Fall zu vergrößern. L(B)
wird einfach kürzer
im Schritt S16 gemacht; L(B) wird gleich R(B) gesetzt, und die Daten,
die in dem gegenwärtigen B-Segment
verbleiben, werden verarbeitet. Jedes praktikable System besitzt
eine minimale Blocklänge. Wenn
eine Blocklänge
für eine
Version auftritt, die weniger Daten in dem A-, B-Segmentpaar zu
verarbeiten hat, dann wird immer eine Länge gleich αopt benutzt,
wie dies in Verbindung mit den Schritten S11 und S12 erläutert wurde.
Jene Länge überschreitet notwendigerweise
die minimale Länge,
und die minimale Länge
ist, wie aus 11A ersichtlich,
kleiner als αopt. Es besteht jedoch keine Notwendigkeit
für eine
minimale Länge
für den
letzten Block, der der Version B eigen ist. Der Grund dafür besteht
darin, dass dieser Block auf der Spur unmittelbar vor den folgenden
gemeinsamen Daten plaziert ist. Wenn der Lesekopf die Version B
abspielt, springt er nach dem Start des letzten kurzen B-Datenblockes
und liest diesen Block und setzt weiter auf dem nächsten Datenblock
fort. Und wenn die Version A abgespielt wird, dann wird ein Sprung
unmittelbar nach dem kurzen B-Block
nach dem Start des gemeinsamen Materials vorgenommen. Da kein Sprung
vom letzten B-Block vorgenommen wird, besteht kein Erfordernis bezüglich einer
minimalen Länge.
Infolgedessen wird, anstatt R(B) im Schritt S16 zu vergrößern, um eine
Anpassung an L(B) zu erreichen, was analog zu dem wäre, was
im Schritt S14 für
die A-Version durchgeführt
wurde, L(B) einfach im Schritt S16 verringert, um die übrigen Daten
in der R(B)-Liste gleich zu machen.
-
Wenn der Zeitschritt S17 erreicht
ist, wurde R(A), falls erforderlich, im Schritt S14 durch einen kleinen
Anteil von C-Daten vergrößert, und
die beiden Datenblöcke,
die nunmehr auf der Disk plaziert werden, L(A) und L(B), wurden
ebenfalls im Schritt S17 bestimmt, wobei R(A) und R(B) beide durch
die jeweiligen Datenmengen vermindert wurden, die auf der Disk plaziert
wurden, und die Daten in L(A) und die Daten in L(B) werden formatiert.
-
Die einfachste Möglichkeit, die Verarbeitung von
diesem Gesichtspunkt aus zu verstehen, besteht darin, den allgemeinen
Fall zu betrachten, bei dem abwechselnd Segmente A und B verarbeitet
werden. Wenn B sehr viel größer beginnt
als A, dann werden L(A) und L(B) im Schritt S11 so eingestellt,
dass die Menge von B-Material, die auf der Disk plaziert wird, relativ
zu dem A-Material in dem vorhergehenden Block maximiert wird. Auf
diese Weise wird das Verhältnis
R(B)/R(A) abnehmend gehalten. Wenn schließlich die Ungleichung im Schritt
S10 erfüllt
ist, dann wird im Schritt S12 L(B) auf einen kleineren Wert eingestellt
als er im Schritt S11 während
der übrigen
Verarbeitung der betrachteten A- und B-Segmente eingestellt wurde.
Das bei der Einstellung von L(B) im Schritt S12 benutzte Verhältnis ist
so ausgebildet, dass die R(A)- und die R(B)-Listen gleichzeitig gelöscht werden.
In jenem Fall werden im Schritt S18 R(A) und R(B) beide während der
gleichen Iteration gelöscht.
Wenn andererseits B-Starts so viel größer sind als A – wenn beispielsweise
kein A-Segment entsprechend einem B-Segment vorhanden ist –, muss
sogar eine Maximierung des Verhältnisses
der Daten, die für
das β,α-Paar im
Schritt S11 ausgelegt wurden, nicht dazu führen, dass R(A) und R(B) beide in
der gleichen Iteration genullt werden. Was in einem solchen Fall
geschieht, ist, dass R(A) auf 0 vermindert wird unter der Annahme,
dass es nicht dort an der ersten Stelle mit der Verarbeitung des
B-Segmentes startet, das kein entsprechendes A-Segment hat und es für R(B) länger dauert, bis zu einem Punkt gelöscht zu
werden, wo keine Daten in der Liste mehr vorhanden sind (repräsentiert
durch R(B) = 0 im Schritt S 18). So wird R(A) immer gelöscht, entweder während der
gleichen Iteration mit R(B) oder in einer früheren Iteration, aber niemals
während
einer Iteration, die der Löschung
von R(B) folgt.
-
Zunächst soll der Fall betrachtet
werden, in dem R(A) zuerst gelöscht
wird. Dabei muss berücksichtigt
werden, dass R(A) in jeder Iteration während des Schrittes S14 vergrößert wird,
so dass genug Daten in der Liste vorhanden sind, um die L(A)-Forderung zu erfüllen. Im
gleichen Schritt wird jedoch L(A) wiederum gelöscht, da die Daten auf der
Disk gespeichert sind. In einem solchen Fall muss das System fortfahren,
Stücke
von B-Daten abzulegen, während vom
C-Segment für
die A-Ausfüllblöcke ausgeborgt wird
(und auch das ausgeborgte Material zu der R(B)-Liste hinzugefügt wird, das verarbeitet werden muss).
Während
jeder Durchführung
des Schrittes S18 zeigt sich, dass R(A) = 0; da R(B) nicht 0 ist,
wird eine Abzweigung zum Schritt S19 hergestellt. An dieser Stelle
bei der Verarbeitung ist noch B-Material vorhanden, das sorgfältig behandelt
werden muss, und vorzugsweise ist außerdem auch A-Material vorhanden.
Bevor jedoch die nächste
Iteration beginnen kann, muss gewährleistet werden, dass genug
C-Material in der R(C)-Liste verbleibt, um die nächste L(A)-Forderung zu befriedigen.
In anderen Worten ausgedrückt:
wenn ein A-Block auf der Disk plaziert wurde und das Material für den Ausfüllblock
wenigstens teilweise vom C-Segment genommen und dann verarbeitet
wurde, müssen
genügend
Daten in dem C-Segment hierfür
verbleiben, damit eine Durchführung
erfolgen kann. Der Test in Schritt S19 ist demgemäß der gleiche
wie der Test im Schritt S7. Wenn genug Material in R(C) verblieben
ist, um die αopt-Forderung zu erfüllen, d. h. wenn die Summe
von R(A) + R(C) nicht kleiner ist als αopt,
dann erfolgt eine Rückführung nach
dem Schritt S9. Da dort genügend
verfügbare
Daten vorhanden sind, setzt sich die Iteration mit den Schritten
S9 bis S12 und die Ableitung von L(A) und L(B) fort.
-
Wenn andererseits angenommen wird,
dass R(A) + R(C) kleiner als αopt, ist, bedeutet dies, dass nicht genügend Daten
in R(C) vorhanden sind, um ein Ausborgen einer Menge zu ermöglichen,
die bei Hinzufügung
zu R(A) gleich αopt während
des Schrittes S14 wird. Es wird eine Rückführung nach dem Beginn der Hauptverarbeitungsschleife,
d. h. nach dem Schritt S3 durchgeführt, was das in 9 Ersichtliche implementiert.
Das letzte Bit des C-Materials, C4 in 9,
wird dem Ende des vorangehenden A-Materials und B-Materials hinzugefügt, das
verblieben ist, um verarbeitet zu werden. Dies kann geschehen, weil
das vorangehende C-Material
(C1, C2 und C3 in 9)
bereits am Hinterende der vorangehenden A- und B-Segmente plaziert
war, die verarbeitet werden. Selbst wenn das B-Segment nicht voll
niedergelegt wurde, ist es nur erforderlich, das letzte Bit des
C-Segmentes am Ende von dem zu plazieren, was bereits in der R(B)-Liste
vorhanden ist. Die Plazierung von C4 am Ende des gegenwärtigen R(A) und
R(B) läuft
auf das Gleiche hinaus wie eine Vermischung des gegenwärtigen A-Segmentes
(wenn irgendwas in diesem verblieben ist) mit dem folgenden A-Segment
und einer Vermischung des gegenwärtigen
B-Segmentes mit dem folgenden B-Segment, da sämtliches C- Material, das sie trennt, bereits berücksichtigt
wurde. Wie in 9 dargestellt,
wird C4 zu Beginn des nächsten
A-Segmentes hinzugefügt
und es wird am Ende des gegenwärtigen
B-Segmentes hinzugefügt
(R(B), das die vorhergehenden R(C)-Blöcke
C1 bis C3 enthält,
die zu der R(B) hinzugefügt
wurden), worauf das nächste
B-Segment zu R(B) hinzugefügt
wird. Schließlich
wird R(C) einfach das nächste
C-Segment.
-
Die Verarbeitung wird fortgesetzt,
wobei die äußere Schleife
nach dem Schritt S3 zurückkehrt
und die innere Schleife nach dem Schritt S9. Schließlich hört die Verarbeitung
auf, wenn im Schritt S4 bestimmt wird, dass keine weiteren Daten
vorhanden sind.
-
Die Erfindung wurde vorstehend in
Verbindung mit einem illustrativen Ausführungsbeispiel beschrieben,
das nur zwei Versionen von einem Programm besitzt. Das erfindungsgemäße Verfahren
ist aber sehr viel weiter nützlich
anwendbar. Beispielsweise soll eine Multimedia-Disk betrachtet werden, deren
Gegenstand „amerikanische
Präsidenten" sind, und nach Abspielen
eines Segmentes mit Kriegen allgemein kann ein Abzweig nach einem
Segment getroffen werden nach irgendeinem Präsidenten, in dessen Administration
Amerika im Krieg war. Die Segmente von Roosevelt und Truman können gemeinsame
Gegenstände
zu Beginn und irgendwo enthalten, und beide Segmente können weit
weg sein von dem Segment, von dem die Abzweigung getroffen wurde.
Gemeinsames Material kann redundant aufgezeichnet werden, wie oben
beschrieben wurde, um Ausfüllblöcke für nahtlose
Sprünge
für diese
beiden Videosegmente zu erzeugen, während die gleiche Sache noch
für andere
gepaarte Präsidenten-Videosegmente
geschehen kann. Es besteht kein Grund, die Sprünge nur über zwei Arten von Materialen
zu begrenzen – es
können
Dutzende oder sogar Hunderte sein, und zwar in beiden Richtungen,
wenn extensive, auf Wahl des Benutzers vorgenommene Abzweigungen
erlaubt sind. In gleicher Weise können drei oder mehrere Videosegmente,
die gemeinsames Material benutzen, dieses gemeinsame Material dreimal
oder mehrfach in Ausfüllblöcken aufgezeichnet
haben, die den drei oder mehreren individuellen Videosegmenten zugeordnet
sind, wenn es notwendig ist, eine nahtlose Abzweigung zuzulassen. Der
gemeinsame Nenner ist in allen Fällen
jenes Material, das wenigstens zwei Programmen oder zwei Programmsegmenten
gemeinsam und redundant aufgezeichnet ist – auf Kosten eines „realen
Besitzes" –, um eine
nahtlose Abspielung stattfinden zu lassen.
-
Das Augenmerk wurde hierbei darauf
gelegt, die Redundanz auf ein Minimum zu vermindern, jedoch ist
ein gewisser Spielraum zulässig.
Es ist nicht notwendig, jeden möglichen
Millimeter der Bit-Kapazität
auszuquetschen. Die Erfindung wurde beschrieben unter Bezugnahme
auf ein spezielles Ausführungsbeispiel,
es ist jedoch klar, dass dieses Ausführungsbeispiel nur illustrativ
für die
Anwendung der Prinzipien der Erfindung ist. Es können zahlreiche Modifikationen
und andere Anordnungen getroffen, wenn diese in den Rahmen der Erfindung
fallen, wie dies in den Ansprüchen
definiert ist.