-
Bilddaten
haben viele Abtastauflösungen.
Es gibt eine temporäre
Abtastrate, üblicherweise
Bildfrequenz genannt, von Bewegtbilddaten. Jedes Bild weist auch
eine vertikale und eine horizontale Abtastauflösung auf, die die Anzahl individueller
Elemente, üblicherweise
Pixel genannt, in der horizontalen und vertikalen Dimension des
Bilds angibt. Jedes Pixel wird typischerweise durch eine Anzahl
von Komponenten repräsentiert,
um eine Farbe zu definieren. Die Komponenten können Luminanz und Chrominanz
(z.B. YCrCb) repräsentieren,
oder sie können Farbkanäle (z.B.
rot, grün
und blau) repräsentieren. Ein
Wert für
jede Komponente wird im Allgemeinen mittels einer Anzahl von Bits,
Bittiefe genannt, repräsentiert.
Typische für
Bilder verwendete Bittiefen sind acht Bits, zehn Bits und sechzehn
Bits.
-
Hochwertige
digitale Videoverarbeitungssysteme verwenden häufig eine Bittiefe pro Zehnbit-Komponente.
Diese Bittiefe liefert einen guten Kompromiss zwischen Qualität und Bandbreite
sowie eine effiziente Implementation von Verarbeitungsfunktionen
in Hardware. Auf einem Universalcomputer haben die Bitpfade jedoch
eine Bittiefe, die auf einer Zweierpotenz (z.B. acht, sechzehn,
zweiunddreißig
oder vierundsechzig Bits) basiert. Daher werden 10-Bit Daten im
Allgemeinen in 16-Bit
Daten umgewandelt, bevor sie von dem Computer verarbeitet werden.
Es wäre
jedoch nicht effizient, alle sechzehn Bits zu übertragen oder zu senden.
-
Manchmal
ist es auch erwünscht,
Bilddaten unter Verwendung einer Bittiefe von nur acht Bits zu verarbeiten.
Eine 8-Bit Darstellung kann aus einer 10-Bit Darstellung durch Rundung
erhalten werden. Es würden
jedoch Daten verloren gehen, wenn nur acht Bits übertragen oder gespeichert
würden.
-
Um
10-Bit Daten auf einer Diskette zu speichern, wurden Techniken entwickelt,
um die 10-Bit Daten in Datenworte zu packen, die eine Bittiefe aufweisen,
die auf einer Zweierpotenz (z.B. 8-Bit und 32-Bit Worte) basiert.
Im US-Patent 6,239,815 werden beispielsweise 10-Bit YCrCb Daten
für zwei
Pixel in fünf
Bytes gepackt. Ein anderes üblicherweise
verwendetes Packformat, das als „10:10:10:2" bezeichnet wird,
wird beispielsweise im OpenGL Graphiksystem verwendet.
-
OpenGL
ist eine Marke von Silicon Graphics, Inc. In diesem Format werden
drei 10-Bit Werte
in einem 32-Bit Wort gespeichert, wobei zwei Bits unbenutzt bleiben.
Mit diesen gepackten Daten werden jedoch verschiedene Operationen
durchgeführt,
um entweder 8-Bit oder 10-Bit Daten zu extrahieren.
-
Die
EP 0 405 885 offenbart eine
Aufzeichnungsvorrichtung, die bei einem Beispiel eine 10-Bit Abtastung
eines digitalen Signals in ein Wort A der 8 signifikantesten Bits
und ein Wort B der 2 am wenigsten signifikanten Bits aufteilt. Die
Worte B entsprechender Abtastungen werden zu einem Wort C von 8 Bits
kombiniert, und die Worte A und C werden aufgezeichnet.
-
Die
US 2001/0049778 offenbart ein Verfahren zum Speichern von Datenelementen
in einem Speicher, in dem Datenelemente in aufeinander folgende
Datenstücke
fallender Signifikanz aufgeteilt werden und einzelne Datenstücke in dem
Speicher gespeichert oder verworfen werden, je nach Signifikanz
im Bezug auf die Signifikanz der bereits in dem Speicher gespeicherten
Datenstücke.
-
Die
vorliegende Erfindung trachtet danach, effizientere Speicherung
von und effizienteren Zugriff auf Bilddaten bereitzustellen.
-
Demgemäß besteht
die vorliegende Erfindung bei einem Aspekt aus einer Bildverarbeitungsvorrichtung
mit: einem Bitstrom-Speicher, der m-Bit Bilddaten enthält, einschließlich, für jeden
Frame von Bilddaten: einem ersten Datenabschnitt, der n signifikanteste
Bits der m-Bit Bilddaten für
alle Pixel in dem Frame in einem benachbarten Block enthält, wobei
n eine ganze Zahl und eine Potenz von Zwei ist; einem zweiten Datenabschnitt,
der k am wenigsten signifikante Bits der m-Bit Bilddaten für alle Pixel
in dem Frame in einem benachbarten Block enthält, wobei k gleich dem Unterschied
zwischen m und n ist; wobei der erste Datenabschnitt an einer Speicherseitengrenze
endet; und wobei der zweite Datenabschnitt dem ersten Datenabschnitt
in dem Bitstrom-Speicher vorangeht und benachbart ist; sowie Bildverarbeitungseinrichtungen,
die mit dem Bitstrom-Speicher kommunizieren.
-
Bei
einem weiteren Aspekt besteht die vorliegende Erfindung aus einem
Erzeugnis mit: einem computerlesbaren Medium mit Daten, die auf
dem computerlesbaren Medium gespeichert sind, die, wenn sie von
einem Computer ausgewertet werden, einen Bitstrom mit m-Bit Bilddaten
aufweisen. Der Bitstrom weist, für
jeden Frame von Bilddaten, einen ersten Datenabschnitt auf, der
n signifikanteste Bits der m-Bit Bilddaten für alle Pixel in dem Frame in
einem benachbarten Block enthält.
N ist eine ganze Zahl und eine Potenz von Zwei. Ein zweiter Datenabschnitt
enthält
k am wenigsten signifikante Bits der m-Bit Bilddaten für alle Pixel
in dem Frame in einem benachbarten Block. K ist gleich dem Unterschied zwischen
m und n. Der erste Datenabschnitt endet an einer Speicherseitengrenze.
Der zweite Datenabschnitt geht dem ersten Datenabschnitt in dem
Bitstrom voran und ist dazu benachbart.
-
Bei
einem anderen Aspekt besteht die vorliegende Erfindung aus einem
Verfahren und einem Computerprogramm-Erzeugnis, das einen Bitstrom von
m-Bit Bilddaten liest. Der Bitstrom weist für jeden Frame von Bilddaten
einen ersten Datenabschnitt auf, der n signifikanteste Bits der
m-Bit Bilddaten für alle
Pixel in dem Frame in einem benachbarten Block enthält, und
einen zweiten Datenabschnitt, der k am wenigsten signifikante Bits
der m-Bit Bilddaten für alle
Pixel in dem Frame in einem benachbarten Block enthält. N ist
eine ganze Zahl und eine Potenz von Zwei. K ist gleich dem Unterschied
zwischen m und n. Der erste Datenabschnitt endet an einer Speicherseitengrenze.
Der zweite Datenabschnitt geht dem ersten Datenabschnitt in dem
Bitstrom voran und ist dazu benachbart. Das Verfahren zum Lesen
umfasst das Zugreifen auf eine n-Bit Darstellung für einen
einzelnen Frame von Bilddaten. Ein Offset und die Größe der n-Bit
Daten für
den einzelnen Frame in dem Bitstrom werden bestimmt. Der Offset
wird auf die nächstgelegene
Speichergrenze abgerundet. Die Größe wird auf die nächstgelegene
Speichergrenze aufgerundet. Eine Lese-Operation wird für den Bitstrom
mittels des gerundeten Offsets und der gerundeten Größe durchgeführt.
-
Bei
einem weiteren Aspekt besteht die vorliegende Erfindung in einem
Verfahren und einem Computerprogramm-Erzeugnis, das m-Bit Bilddaten
in einen Bitstrom schreibt. Für
jeden Frame der Bilddaten ist Speicher für den Bitstrom zugeteilt. Die
n signifikantesten Bits jedes m-Bit Werts des Frames werden gesammelt,
um n-Bit Werte bereitzustellen.
N ist eine ganze Zahl und eine Potenz von Zwei. Die gesammelten
n-Bit Werte werden als benachbarter Block in einem ersten Datenabschnitt
des Bitstroms in dem zugeteilten Speicher platziert. Der erste Datenabschnitt
endet an einer Speichergrenze. Die k am wenigsten signifikanten
Bits jedes m-Bit Werts des Frames werden in n-Bit Worten der k-Bit
Werte gesammelt. Die n-Bit Worte der k-Bit Werte werden als benachbarter
Block in einem zweiten Datenabschnitt des Bitstroms in dem zugeteilten
Speicher platziert. Der zweite Datenabschnitt geht dem ersten Datenabschnitt
in dem Bitstrom voran und ist dazu benachbart.
-
Bestimmte
Beispiele der vorliegenden Erfindung können die folgenden Merkmale
aufweisen.
-
Bilddaten
mit einer Bittiefe von m Bits, wobei m keine Potenz von Zwei ist,
können
zum Speichern in zwei Teile aufgeteilt werden. Der erste Teil sind
die n signifikantesten Bits, wobei n eine Potenz von Zwei ist. Der
zweite Teil sind die k am wenigsten signifikanten Bits, wobei k
= m – n
und k < n. Beispielsweise können 10-Bit Daten in 8-Bit
und 2-Bit Teile getrennt werden. Die 8-Bit Daten für ein gegebe nes
Bild werden als benachbarter Block in dem Bitstrom platziert, wobei
das Ende der Daten mit einer Speichergrenze, beispielsweise einer
Seitengrenze, ausgerichtet ist. Die 2-Bit Daten werden in Bytes
gesammelt, die als benachbarter Block in dem Bitstrom platziert
werden. Der Block von 2-Bit Daten wird in dem Bitstrom dem Block
von 8-Bit Daten vorangehend und dazu benachbart platziert. Auffüllung (padding)
kann vorgesehen werden, um den Anfang der Bilddaten mit einer Speichergrenze
auszurichten. Die Bilddaten für mehrere
Bilder können
in dem Bitstrom zum Speichern benachbart angeordnet werden.
-
10-Bit
Daten für
einen Alphakanal können gegebenenfalls
ebenfalls in 8-Bit und 12-Bit Teile aufgeteilt werden. Die 8-Bit
Alphadaten für
ein gegebenes Bild werden in dem Bitstrom als benachbarter Block
platziert, wobei der Anfang der Daten mit einer Speichergrenze,
beispielsweise einer Seitengrenze, ausgerichtet wird. Die 2-Bit
Alphadaten werden in Bytes gesammelt, die in dem Bitstrom als benachbarter
Block platziert werden. Der Block von 2-Bit Alphadaten wird in dem
Bitstrom nach und benachbart mit dem Block von 8-Bit Alphadaten
platziert. Auffüllung kann
vorgesehen werden, um das Ende der Alphadaten mit einer Seitengrenze
auszurichten. Die Alphadaten für
mehrere Bilder können
in dem Bitstrom zum Speichern benachbart angeordnet werden.
-
Zum
Speichern können
die Alphadaten in einer Datendatei gespeichert werden, die von der
Datendatei, die die Bilddaten speichert, getrennt ist. Auf diese
Weise muss nicht auf die Alphadaten zugegriffen werden, wenn sie
nicht zu verarbeiten sind. Wenn die Alphadaten zu verarbeiten sind,
können
sie aus der Alphadatendatei ausgelesen und mit den Bilddaten aus
der Bilddatendatei in dem Speicher zur effizienten Verarbeitung
gemischt werden. Somit sind die Bilddaten und die Alphadaten für jedes
Bild in dem Bitstrom benachbart, und Daten für mehrere Bilder sind in dem
Bitstrom benachbart.
-
Durch
das Speichern von 10-Bit Daten in einem derartigen Format wird das
Packen effizient. Es ermöglicht
auch Zugriff auf den 8-Bit Abschnitt eines einzelnen Bilds ohne
Unkosten für
Zentralrechnereinheit, Diskette oder Speicherbandbreiten. Zum Zugriff
auf mehrere Bilder ermöglichen
Streuungs-/Sammel-Operationen (scatter/gather operations) durch
das Betriebssystem effizienten Zugriff auf den 8-Bit Abschnitt des
Bilds. Die 10-Bit Daten können
gelesen und in 16-Bit Worte umgewandelt werden, und umgekehrt, unter
Verwendung von Streuungs-/Sammel-Operationen und einfachen Schiebeoperationen.
Daten in diesem Format können
mit minimalem Verarbeitungsaufwand auch in und von sechzehn Bit
pro Komponente umgewandelt werden.
-
Die
Erfindung wird nun beispielhaft unter Bezug auf die beigefügten Zeichnungen
beschrieben. Es zeigt:
-
1 ein
Datenflussdiagramm eines beispielhaften Bildverarbeitungssystems,
das gepackte 10-Bit Daten verwendet.
-
2 ein
Diagramm einer beispielhaften gepackten Form von 10-Bit Daten.
-
3 ein
Flussdiagramm, das beschreibt, wie ein einzelner Frame von 8-Bit
Bilddaten gelesen wird.
-
4 ein
Flussdiagramm, das beschreibt, wie ein einzelner Frame von 10-Bit Bilddaten gelesen wird.
-
5 ein
Flussdiagramm, das beschreibt, wie mehrere Frames von 8-Bit Bilddaten
gelesen werden.
-
6 ein
Flussdiagramm, das beschreibt, wie mehrere Frames von 10-Bit Bilddaten
gelesen werden.
-
7 ein
Flussdiagramm, das beschreibt, wie jeder Frame von 10-Bit Bilddaten
geschrieben wird.
-
Bilddaten
mit einer Bittiefe von m Bit, wobei m keine Potenz von Zwei ist,
können
zum Speichern in zwei Teile aufgeteilt werden. Der erste Teil sind
die n signifikantesten Bits, wobei n eine Potenz von Zwei ist. Der
zweite Teil sind die k am wenigsten signifikanten Bits, wobei k
= m – n
und k < n. Bei
dem folgenden Beispiel werden 10-Bit Daten in 8-Bit und 2-Bit Teile getrennt.
-
1 ist
ein Datenflussdiagramm eines beispielhaften Bildverarbeitungssystems,
das gepackte 10-Bit Daten verwendet. Das Bildverarbeitungssystem 100 weist
einen Datenspeicher 102 auf, der 10-Bit Daten, die in einen
Bitstrom gepackt sind, speichert, der beispielsweise in einer oder
mehreren Datendateien gespeichert, oder der durch Metadaten in einem
Dateiformat wie MXF oder AAF referenziert werden kann. Ein solcher
Bitstrom kann auch in einem Speicher, wie z.B. einem Cache, gespeichert werden.
Dieses Bitstromformat kann auch als Format für die Übertragung von Daten verwendet
werden. In diesem Fall stellt 102 ein Übertragungsmedium dar, über das
die komprimierten Bilddaten als computerlesbare Signale übertragen
werden. Die Daten 104, die einen 10-Bit gepackten Bitstrom
aufweisen, werden mittels einer Leseanwendung 106 eingelesen. Derartige
Daten, wie bei 108 gezeigt, werden mittels der Schreibanwendung 110 auf
unten beschriebene Art und Weise in ein solches Format geschrieben.
-
Die
Leseanwendung 106 liest, auf unten beschriebene Art und
Weise, entweder einen einzigen Frame oder mehrere Frames von 8-Bit
Bilddaten oder einen einzigen Frame oder mehrere Frames von 10-Bit
Bilddaten aus dem Bitstrom. Die Lese awendung 106 stellt
die Lese-Bilddaten 112 für eine Bildverarbeitungsanwendung 114 bereit.
-
Die
Bildverarbeitungsanwendung 114 führt Operationen für die Bilddaten
durch, um verarbeitete Bilddaten 116 zu erzeugen. Derartige
Bildverarbeitungsoperationen können
beispielsweise Operationen zum Kombinieren von Bildern, z.B. Zusammensetzen
(compositing), Mischen (blending) und Tastung (keying) umfassen,
oder Operationen innerhalb eines Bilds, z.B. Nachprägen (resizing),
Filtern und Farbkorrektur, oder Operationen zwischen zwei Bildern,
z.B. Bewegungsabschätzung,
sind jedoch nicht hierauf beschränkt.
Die Ergebnisse derartiger Bildverarbeitungsoperationen können Bilddaten
in 10-Bit Format oder in anderem Format sein. Die Bildverarbeitungsanwendung
kann auch eine Anwendung sein, die digitale Bilddaten erfasst und/oder
erzeugt, ohne Eingangsbilddaten zu verwenden. Die Bildverarbeitungsanwendung
kann auch Metadaten über die
Bilddaten manipulieren, z.B. um eine Sequenz von Szenen von Bewegtbildinformationen
zu definieren. Die Bildverarbeitungsanwendung kann auch Bilddaten
in ein oder mehrere Formate zurückspielen,
ohne Ausgangsdaten bereitzustellen.
-
Obwohl 1 nur
eine Bildverarbeitungsoperation zeigt, kann es mehrere Bildverarbeitungsoperationen
geben, die die Bilddaten parallel bearbeiten, oder die als Abfolge
von Operationen arbeiten. Es gibt eine Vielzahl von Arten, auf die
eine Bildverarbeitungsoperation Bilddaten verarbeiten kann, und die
Erfindung wird dadurch nicht beschränkt. Als Beispiel können die
Leseanwendung und/oder die Bildverarbeitungsanwendung und/oder die
Schreibanwendung Teil einer größeren Anwendung
zum Editieren von Videoinformationen sein und auf die Bilddaten
in demselben Zwischenspeicher in dem Speicher zugreifen. Als weiteres
Beispiel können
die Leseanwendung und/oder die Bildverarbeitungsanwendung und/oder
die Schreibanwendung sich in eine Editieranwendung „einschalten", die Zugriff auf
Bilddaten in dem Speicher über
eine Schnittstelle zur Anwendungsprogrammierung (Application Programming
Interface; API) ermöglicht.
Die Lese- und Schreibanwendungen können in Hardware implementiert
werden, auf die durch die Bildverarbeitungsanwendung zugegriffen
wird.
-
Unter
Bezug auf 2 werden die 8-Bit Daten für ein gegebenes
Bild in dem Bitstrom als benachbarter Block 200 platziert,
wobei das Ende 202 der Daten mit einer Speichergrenze,
beispielsweise einer Seitengrenze, ausgerichtet wird. Die 2-Bit
Daten werden in Bytes gesammelt, die in dem Bitstrom als benachbarter
Block 204 platziert werden. Der Block von 2-Bit Daten wird
in dem Bitstrom vor und benachbart zu dem Block 200 von
8-Bit Daten platziert. Auffüllung 212 kann
vorgese hen werden, um den Anfang der Bilddaten mit einer Speichergrenze auszurichten.
Die Bilddaten für
mehrere Bilder können
in einem Bitstrom zum Speichern benachbart platziert werden.
-
10-Bit
Daten für
einen Alphakanal können gegebenenfalls
ebenfalls in 8-Bit und 2-Bit Teile gespalten werden. Die 8-Bit Alphadaten
für ein
gegebenes Bild werden in dem Bitstrom als benachbarter Block 206 platziert,
wobei der Anfang 208 der Daten mit einer Speicherseitengrenze
ausgerichtet wird. Die 2-Bit Alphadaten werden in Bytes gesammelt,
die in dem Bitstrom als benachbarter Block 210 platziert werden.
Der Block von 2-Bit Alphadaten wird in dem Bitstrom nach und benachbart
zu dem Block 206 von 8-Bit Alphadaten platziert. Auffüllung 214 kann
vorgesehen werden, um das Ende der Alphadaten mit einer Speichergrenze
auszurichten. Die Alphadaten für mehrere
Bilder können
in einem Bitstrom zum Speichern benachbart platziert werden.
-
Zum
Speichern können
die Alphadaten in einer Datendatei gespeichert werden, die von der
Datendatei, die die Bilddaten speichert, getrennt ist. Auf diese
Weise muss nicht auf die Alphadaten zugegriffen werden, wenn sie
nicht zu verarbeiten sind. Wenn die Alphadaten zu verarbeiten sind,
können
sie aus der Alphadatendatei ausgelesen und mit den Bilddaten aus
der Bilddatendatei in dem Speicher zur effizienten Verarbeitung
gemischt werden. Somit sind die Bilddaten und die Alphadaten für jedes
Bild in dem Bitstrom benachbart, und Daten für mehrere Bilder sind in dem
Bitstrom benachbart.
-
Daten
sind in einem Bitstrom benachbart, wenn der Offset und die Größe eines
Blocks von Daten in dem Bitstrom verwendet werden können, um den
Offset eines anderen Blocks von Daten zu ermitteln, der in diesem
Bitstrom dazu benachbart ist. Benachbart bedeutet nicht, dass die
Daten an benachbarten Speicherstellen in einem beliebigen Speichermedium
gespeichert werden. Jeder Block von Daten kann Kopf- und/oder Fußinformationen
(header and/or footer information) enthalten, die in dem Block gespeichert
sind. Das Vorhandensein derartiger Kopf- und Fußinformationen hat keinen Einfluss
darauf, ob Blöcke
von Daten benachbart sind.
-
3 ist
ein Flussdiagramm, das beschreibt, wie ein einzelner Frame von 8-Bit Bilddaten aus
einem Bitstrom, wie er in 2 gezeigt
ist, ausgelesen wird. Die Größe der gewünschten
8-Bit Daten und ihr Offset in dem Bitstrom wird bestimmt (300).
Der Offset der Leseoperation wird durch Abrunden des Offsets der
gewünschten
8-Bit Daten in dem Bitstrom auf die nächstliegende Seitengrenze bestimmt.
Der Wert wird durch Berechnen des Offset-Modulos 4096 und Subtrahieren
dieses Werts von dem Offset abgerundet. Die Größe der Leseoperation wird durch Aufrunden
der Größe der 8-Bit
Daten auf ein Vielfaches der Seitengrenze bestimmt (304).
Dieser Wert wird durch Berechnen des Offset-Modulos 4096 und seines
Addierens zu der 8-Bit Größe aufgerundet.
Dann werden die Daten, die an dem bestimmten Offset beginnen und
die bestimmte Größe haben,
gelesen (306). Der Unterschied zwischen dem tatsächlichen 8-Bit
Offset und dem abgerundeten 8-Bit Offset ist die Menge von Daten
am Anfang der Lesedaten, die verworfen werden kann.
-
Nehmen
wir zum Beispiel an, dass ein Bild eine aktive Gesamt-Bildatengröße von 5184000 Bytes
hat. Unter der Annahme einer Seitengröße von 4096 (4 K) Bytes ist
die Gesamtgröße der Daten 5185536
Bytes. Daher weist der Block von Daten, der das Bild repräsentiert,
Auffüllung
von 1536 Bytes, 2-Bit Daten von 1036800 Bytes und 8-Bit Daten von 4147200
Bytes auf. Der Offset des 8-Bit Abschnitts ist die Summe der Auffüllgröße und der
2-Bit Datengröße, also
1038336 Bytes. Der Offset für
die Leseoperation ist der 8-Bit Offset minus das Offset-Modulo 4096,
also 1036288. Die Größe für die Leseoperation ist
die 8-Bit Größe plus
das 8-Bit Offset-Modulo
4096, also 4149248. Somit werden 2048 Bytes am Anfang der Lesedaten
verworfen. Alphainformationen für
das Bild werden nicht gelesen.
-
Wenn
es Alphainformationen gibt, kann auf die 8-Bit Alphainformationen
für einen
einzelnen Frame folgendermaßen
zugegriffen werden. Eine Leseoperation startet am Anfang der 8-Bit
Alphainformationen für
das Bild mit dem Lesen. Die Größe der Leseoperation
ist die Größe der 8-Bit
Alphainformationen, aufgerundet auf die nächstliegende Seitengröße. Der
Unterschied zwischen der Lesegröße und der
tatsächlichen
Größe der 8-Bit
Alphainformationen gibt die Menge von Daten an, die am Ende der Lesedaten
zu verwerfen sind. Der Anfang der 10-Bit Alphainformationen kann
in einem Bitstrom benachbart mit dem Ende der 10-Bit Bilddaten platziert
werden.
-
4 ist
ein Flussdiagramm, das beschreibt, wie ein einzelner Frame von 10-Bit
Bilddaten aus einem Bitstrom gelesen wird. Der ganze Frame von Bilddaten
wird in einen Zwischenspeicher gelesen (400). Offsets für die 8-Bit
und 2-Bit Abschnitte werden in dem Zwischenspeicher bestimmt (402).
Vier Bytes der 8-Bit Bilddaten werden in das am wenigsten signifikante
Bit von vier 16-Bit Registern geschoben (404), das signifikanteste
Bit zuerst. Von dem entsprechenden Byte der 2-Bit Bilddaten wird
jede 2-Bit Date, das signifikanteste Bit zuerst, in dasselbe am
wenigsten signifikante Bit des 16-Bit Registers, das entsprechende
8-Bit Daten speichert, geschoben (406). Das Ergebnis dieser
Operationen ist ein ganzzahliger 16-Bit Wert in jedem Register,
wobei die 6 signifikantesten Bits auf Null gesetzt sind und die
10 am wenigsten signifikanten Bits den gewünschten 10-Bit Wert repräsentieren.
-
In
einer Hardware-Implementierung können zwei
DMA-Maschinen verwendet werden, um Daten aus einem Zwischenspeicher
in Bit-Schieber zu schreiben, um jeden 10-Bit Wert zu erzeugen.
Nachdem diese vier Werte verarbeitet worden sind, wiederholt sich
der Prozess für
die restlichen Bilddaten, wenn Bilddaten zur Verarbeitung (wie bei 408 bestimmt)
in dem Zwischenspeicher verblieben sind.
-
Wenn
Alphainformationen vorliegen, kann auf die 10-Bit Alphainformationen
für einen
einzelnen Frame auf ähnliche
Weise zugegriffen werden. Eine Leseoperation startet am Anfang der
8-Bit Alphainformationen mit dem Lesen. Die Gesamtmenge von 8-Bit
Alpha-, 2-Bit Alpha- und Auffüllungsdaten
für den
Frame wird in einen Zwischenspeicher gelesen. Die 8-Bit Alphadaten
und die 2-Bit Alphadaten werden zu 10-Bit Daten verarbeitet, die
auf dieselbe Weise wie die 8-Bit Bilddaten und die 2-Bit Bilddaten
als 16-Bit ganze Zahlen repräsentiert
werden. Der Anfang der 10-Bit Alphainformationen kann in einem Bitstrom
benachbart mit dem Ende der 10-Bit Bilddaten platziert werden.
-
5 ist
ein Flussdiagramm, das beschreibt, wie mehrere Frames von 8-Bit
Bilddaten aus einem Bitstrom gelesen werden. Das Lesen mehrerer
Frames von 8-Bit Daten involviert den Zugriff auf den ersten Frame
von 8-Bit Daten wie oben in Zusammenhang mit 3 beschrieben,
dann das Lesen des Bitstroms, einschließlich der 2-Bit Abschnitte,
für die
folgenden Bilder. Auf die Daten von den folgenden Bildern wird unter
Verwendung von Streuungs-/Sammeloperationen zugegriffen, die durch
das Betriebssystem bereitgestellt werden. Insbesondere werden die
Aufüllungsabschnitte
und die 2-Bit Abschnitte für
jedes Bild in dieselben Speicherplätze eingelesen, um sie zu verwerfen.
-
Insbesondere
werden der Offset und die Größe des ersten
Frames von 8-Bit Daten in dem Bitstrom an der nächstgelegenen Seitengrenze
auf dieselbe Weise bestimmt (500) wie oben in Zusammenhang
mit 3 beschreiben. Für jeden nachfolgenden Frame
werden der Offset und die Größe der 8-Bit Daten
bestimmt (502). Der Offset und die Größe der Auffüllungsdaten und der 2-Bit Daten
dieses Frames werden ebenfalls bestimmt (504). Diese Berechnungen
(502, 504) werden wiederholt (506), bis
der Offset und die Größe der 2-Bit
Daten und der 8-Bit Daten für
alle Frames bestimmt worden sind. Dann wird eine Liste von Offsets
und Größen für 8-Bit
Daten und 2-Bit Daten aufgestellt (508). Diese Liste wird
als Parameter für
eine Streuungs-/Sammel-Leseoperations-Anfrage (510) für das Betriebssystem
bereitgestellt. Das Betriebssystem wird insbesondere aufgefordert,
die Auffüllungsdaten
und die 2-Bit Daten an dieselben Speicherplätze zu leiten, um sie zu verwerfen.
-
Wenn
Alphainformationen in einer getrennten Datendatei vorliegen und
die Alphainformationen nicht benutzt werden, können sie ignoriert werden. Wenn
Alphainformationen in einer getrennten Datendatei vorliegen und
die 8-Bit Alphainformationen benutzt werden, werden der Offset und
die Größe in dem
Bitstrom jedes Teils der Alphainformationen ebenfalls bestimmt.
Diese Informationen werden zu der Streuungs-/Sammelliste hinzugefügt, um das
Betriebssystem zu instruieren, die 8-Bit Alphainformationen in geeignete
Zwischenspeicher zu lesen, die mit den 8-Bit Bilddaten durchsetzt
sind. Diese Informationen werden auch in der Streuungs-/Sammelliste verwendet,
um das Betriebssystem zu instruieren, die 2-Bit Alphainformationen
und die Auffüllung
während
einer Leseoperation in derselben Weise zu verwerfen wie die 2-Bit
Bilddaten oder die Auffüllung
verworfen werden.
-
6 ist
ein Flussdiagramm, das beschreibt, wie mehrere Frames von 10-Bit Bilddaten aus
einem Bitstrom gelesen werden. Für
mehrere Frames von 10-Bit Daten ist das Verfahren ähnlich zu
dem von 4, außer dass es für mehrere
Frames wiederholt wird. Insbesondere wird der gesamte Frame von
Bilddaten in einen Zwischenspeicher gelesen (600). Offsets
in dem Zwischenspeicher für
die 8-Bit Abschnitte und die 2-Bit Abschnitte werden bestimmt (602).
Vier Bytes der 8-Bit Bilddaten werden in das am wenigste signifikante
Bit von vier 16-Bit Registern geschoben, das signifikanteste Bit
zuerst. Von dem entsprechenden Byte von 2-Bit Bilddaten wird jede
2-Bit Date, das signifikanteste Bit zuerst, in dasselbe am wenigsten signifikante
Bit des 16-Bit Registers geschoben (606), das entsprechende
8-Bit Daten speichert. Nachdem diese vier Werte verarbeitet worden
sind, wird der Prozess für
die verbleibenden Bilddaten wiederholt, wenn Bilddaten in dem Zwischenspeicher zur
Verarbeitung (wie bei 608 bestimmt) verblieben sind. Nachdem
die Bilddaten für
das Bild verarbeitet worden sind, wird der Prozess (600, 602, 604, 606, 608)
wiederholt, wenn Bilder zur Verarbeitung übrig geblieben sind, wie bei 610 bestimmt.
-
Wenn
Alphainformationen in einer getrennten Datendatei vorliegen und
die Alphainformationen nicht benutzt werden, können sie ignoriert werden. Wenn
Alphainformationen in einer getrennten Datendatei vorliegen und
die Alphainformationen benutzt werden, werden die Alphainformationen
auf dieselbe Weise gelesen und verarbeitet wie die Bilddaten, unter
Verwendung der Streuungs-/Sammelliste, um die Bilddaten und die
Alphadaten in dem Speicher zu mischen. Die Alphadaten können auch
in 10-Bit Daten, die mittels 16-Bit ganzen Zahlen repräsentiert
werden, umgewandelt werden.
-
7 ist
ein Flussdiagramm, das beschreibt, wie jeder Frame von 10-Bit Bilddaten
in ein gepacktes Format umgewandelt wird. Im Allgemeinen werden
10- Bit Daten verarbeitet,
indem 10-Bit Werte als 16-Bit Ganzzahl-Werte dargestellt werden,
was als Eingabeformat für
das vorliegende Beispiel angenommen wird. Für jeden Frame von Videoinformationen
wird ein Zwischenspeicher zugeteilt (700), um den Bitstrom
für das
Bild aufzubauen. Die acht signifikantesten Bits der 10-Bit Videoinformationen
werden für
alle Pixel in dem Frame lokalisiert. Die 8-Bit Abschnitte werden
gesammelt und in einem ersten Datenabschnitt des Bitstroms am Ende
des Zwischenspeichers platziert (702). Insbesondere werden die
8-Bit Daten, die dem letzten Pixel des Bilds entsprechen, am Ende
des Blocks von 8-Bit Daten platziert und mit einer Speicherseitengrenze
ausgerichtet. Die beiden am wenigsten signifikanten Bits der 10-Bit
Videoinformationen werden für
alle Pixel in dem Frame lokalisiert. Die 2-Bit Abschnitte werden
in Bytes gesammelt und in einem zweiten Datenabschnitt des Bitstroms
vor den 8-Bit Daten in dem Zwischenspeicher platziert (704).
Auffüllungs-
oder Kopfzeileninformationen werden dann vor dem zweiten Datenabschnitt
in dem Zwischenspeicher platziert (706).
-
Alle
Alphainformationen können
auf ähnliche Weise
verarbeitet werden. Insbesondere können 8-Bit Abschnitte von Alphainformationen
gesammelt und in einem ersten Alphaabschnitt am Anfang eines Zwischenspeichers
in einem Bitstrom platziert werden. Die 2-Bit Abschnitte der Alphainformationen werden
gesammelt und in einem zweiten Alphabschnitt in dem Bitstrom nach
dem 8-Bit Alphaabschnitt platziert. Auffüllungs- oder Kopfzeilen-/Fußzeileninformationen
werden dann in dem Zwischenspeicher am Ende des Zwischenspeichers
platziert. Die Alphadaten für
mehrere Bilder werden benachbart in dem Bitstrom platziert und können in
einer Datei getrennt von den Bilddaten gespeichert werden.
-
Die
verschiedenen Bestandteile des in 1 gezeigten
Systems und die Flussdiagramme der 3 bis 7 können als
Computerprogramm unter Verwendung eines Universal-Computersystems implementiert
werden. Ein derartiges Computersystem umfasst typischerweise eine
Haupteinheit, die sowohl mit einer Ausgabevorrichtung verbunden
ist, die einem Benutzer Informationen anzeigt, als auch mit einer
Eingabevorrichtung, die Eingaben von einem Benutzer empfängt. Die
Haupteinheit umfasst im Allgemeinen einen Prozessor, der über einen
Verbindungsmechanismus mit einem Speichersystem verbunden ist. Die
Eingabevorrichtung und die Ausgabevorrichtung sind ebenfalls über den
Verbindungsmechanismus mit dem Prozessor und dem Speichersystem
verbunden.
-
Eine
oder mehrere Ausgabevorrichtungen kann/können mit dem Computersystem
verbunden sein. Beispielhafte Ausgabevorrichtungen umfassen, sind
jedoch nicht beschränkt
auf, eine Bildröhren (Cathode
Ray Tube; CRT) – Anzeige,
Flüssig kristallanzeigen
(Liquid Crystal Display; LCD) und andere Videoausgabegeräte, Drucker,
Kommunikationsvorrichtungen wie z.B. ein Modem, sowie Speichervorrichtungen
wie Diskette oder Band. Eine oder mehrere Eingabevorrichtungen kann/können mit
dem Computersystem verbunden sein. Beispielhafte Eingabevorrichtungen
umfassen, sind jedoch nicht beschränkt auf, Tastatur, Tastenfeld,
Track Ball, Maus, Grafiktablett, Kommunikationsvorrichtung und Dateneingabevorrichtungen.
Die Erfindung ist nicht auf die bestimmten Eingabe- oder Ausgabevorrichtungen,
die in Kombination mit dem Computersystem verwendet werden, oder
auf diejenigen, die hier beschrieben sind, beschränkt.
-
Das
Computersystem kann ein Universal-Computersystem sein, das mittels
einer Computer-Programmiersprache wie „C++", Visual Basic, JAVA oder einer anderen
Sprache, z.B. einer Skriptsprache oder auch Assemblersprache, programmierbar
ist. Das Computersystem kann auch speziell programmierte Spezialhardware
sein. Bei einem Universal-Computersystem ist der Prozessor typischerweise
ein handelsüblicher
Prozessor, wie z.B. verschiedene Prozessoren, die von Intel, AMD,
Cyrix, Motorola und IBM erhältlich
sind. Der Universalcomputer weist auch typischerweise ein Betriebssystem
auf, das die Ausführung
anderer Computerprogramme steuert und Planung, Fehlerbeseitigung,
Eingangs-/Ausgangssteuerung, Buchhaltung, Kompilation, Speicherzuordnung,
Datenverwaltung und Speicherverwaltung, sowie Kommunikationssteuerung und
verwandte Dienste zur Verfügung
stellt. Beispielhafte Betriebssysteme umfassen, sind jedoch nicht beschränkt auf,
das UNIX Betriebssystem und diejenigen, die von Microsoft und Apple
Computer erhältlich
sind.
-
Ein
Speichersystem umfasst typischerweise ein computerlesbares Medium.
Das Medium kann flüchtig
oder nicht flüchtig,
beschreibbar oder nicht beschreibbar und/oder zurückschreibbar
oder nicht zurückschreibbar
sein. Ein Speichersystem speichert Daten typischerweise in binärer Form.
Solche Daten können
ein Anwendungsprogramm definieren, das durch den Mikroprozessor
auszuführen
ist, oder Informationen, die auf der durch das Anwendungsprogramm
zu bearbeitenden Diskette gespeichert sind. Die Erfindung ist nicht
auf ein bestimmtes Speichersystem beschränkt.
-
Ein
System wie das oben beschriebene kann in Software oder Hardware
oder Firmware, oder in einer Kombination dieser drei implementiert
werden. Die verschiedenen Elemente des Systems können entweder einzeln oder
in Kombination als ein oder mehrere Computerprogramm-Erzeugnisse
implementiert werden, in dem/denen Computerprogrammbefehle zur Ausführung durch
einen Computer auf einem computerlesbaren Medium gespeichert sind. Verschiedene
Schritte eines Ver fahrens können
von einem Computer durchgeführt
werden, der derartige Computerprogrammbefehle ausführt. Das
Computersystem kann ein Multiprozessor-Computersystem sein oder
kann mehrere Computer umfassen, die über ein Computernetzwerk miteinander
verbunden sind. Die in 1 gezeigten Bestandteile können getrennte
Module eines Computerprogramms sein, oder können getrennte Computerprogramme
sein, die auf getrennten Computern betrieben werden können. Die
von diesen Bestandteilen erzeugten Daten können in einem Speichersystem
gespeichert oder zwischen Computersystemen übertragen werden.
-
Nachdem
nun eine beispielhafte Ausführungsform
beschrieben worden ist, sollte es für den Fachmann offensichtlich
sein, dass das Vorstehende nur illustrativ und nicht einschränkend ist,
da es nur als Beispiel dargelegt worden ist. Zahlreiche Modifikationen
liegen innerhalb der Fähigkeiten
eines Durchschnittsfachmanns und werden als in den Umfang der Erfindung
fallend betrachtet.