-
GEBIET DER
ERFINDUNG
-
Die
vorliegende Erfindung betrifft Computer und die multimediale Verarbeitung,
und im Besonderen betrifft sie die Decodierung von komprimiertem Video
in einem Mehrprozessorsystem.
-
STAND DER
TECHNIK
-
Neuere
Fortschritte auf dem Gebiet der Computertechnologie haben Videoanwendungen
zu immer häufiger
verwendeten Anwendungen gemacht. Zum Beispiel zählen zu den heute umgesetzten
Videoanwendungen das hochauflösende
Fernsehen, der Fernmeldesatelliten-Funkdienst, Kabelfernsehen über optische
Netze, Electron Cinema, interaktive Speichermedien, multimedialer
Postversand, vernetzte Datenbankdienste, Firmenschulungen und Konferenzen über das
Internet, Videoüberwachung aus
der Ferne und andere Anwendungen.
-
Die
großen
Datenmengen, die erforderlich sind, um Video in all diesen Fällen verfügbar zu
machen bzw. bereitzustellen, hat zu der Anwendung der Standards
Motion Pictures Experts Group 1 (MPEG) und MPEG-2 für die Komprimierung
und Entkomprimierung von Bewegtbildaufnahmen geführt. Diese Standards reduzieren
die Bandbreiten- und Speicherplatzanforderungen erheblich. Folglich
werden MPEG-1 und MPEG-2 in vielen Videoanwendungen eingesetzt und
nehmen weiter an Beliebtheit zu.
-
Ein
Merkmal, dass den weit verbreiteten Einsatz des MPEG-Standards jedoch
beschränkt,
ist die hohe Rechenkomplexität.
Die Videocodierung und -decodierung gemäß MPEG ist aufwändig, häufig zu aufwändig für einzelne
Prozessoren, um eine Echtzeit-Ausführung in Software für Anzeigen
in akzeptabler Auflösung
und Größe zu erreichen.
Die Anforderungen in Bezug auf die Rechenkomplexität steigen
weiter an im Zuge des Wunschs nach höherwertigem Video seitens der
Anwender.
-
Die
Codierung ist teurer bzw. aufwändiger als
die Decodierung, wobei sie für
gewöhnlich
aber auch offline vorgenommen werden kann und somit nicht in Echtzeit
ausgeführt
werden muss. Die Decodierung setzt für gewöhnlich jedoch eine Ausführung in
Echtzeit voraus.
-
Als
ein Beispiel für
eine dem Stand der Technik entsprechende Vorrichtung zum Dekomprimieren von
Video wird auf WO98/44745A und US-A-5.212.742 verwiesen, wobei ein
komprimiertes Videobild an mehrere Videodecodierungschips empfangen
wird, welche durch eine Systemsteuereinheit gesteuert werden. Das
Videobild wird in einzelne Bestandteile, so genannte Slices aufgeteilt,
und jeder Slice wird durch einen entsprechenden Chip der Videodecodierungschips
decodiert. In diesen Bezugsdokumenten unterstützt die Steuereinheit die Aufteilung
des Videobilds in Slices und steuert den Betrieb der Videodecodierungschips.
Der Einsatz einer derartigen separaten Steuereinheit ist ineffizient.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Vorgesehen
ist gemäß einem
ersten Aspekt der vorliegenden Erfindung ein Verfahren gemäß dem gegenständlichen
Anspruch 1.
-
Vorgesehen
ist gemäß einem
zweiten Aspekt der vorliegenden Erfindung ein computerlesbares Medium
gemäß dem gegenständlichen
Anspruch 3.
-
Vorgesehen
ist gemäß einem
dritten Aspekt der vorliegenden Erfindung ein Computersystem gemäß dem gegenständlichen
Anspruch 6.
-
Vorgesehen
ist gemäß einem
vierten Aspekt der vorliegenden Erfindung ein Computerprogramm gemäß dem gegenständlichen
Anspruch 8.
-
Bevorzugte
Merkmale der Erfindung sind in den Unteransprüchen definiert.
-
KURZE BESCHREIBUNG
DER ZEICHNUNGEN
-
Es
zeigen:
-
1 eine
Hierarchie von Schichten in einem MPEG-Bitstrom;
-
2 ein
Blockdiagramm der Codierung und Decodierung von Videodaten gemäß einem
Ausführungsbeispiel
der Erfindung;
-
3 ein
Blockdiagramm einer Bild-Slice-Struktur;
-
4 ein
Ablaufdiagramm der Schritte der Decodierung von Videodaten mit mehreren
parallelen Prozessoren gemäß einem
Ausführungsbeispiel der
Erfindung; und
-
5 ein
Mehrprozessoren-Computersystem mit einem computerlesbaren Medium
mit darauf gespeicherten Anweisungen bzw. Befehlen gemäß einem
Ausführungsbeispiel
der Erfindung.
-
GENAUE BESCHREIBUNG
-
Offenbart
werden ein Verfahren und eine Vorrichtung zum Decodieren von komprimiertem
Video in einem Mehrprozessorensystem. In der folgenden Beschreibung
werden zu Erläuterungszwecken spezielle
Einzelheiten ausgeführt,
um ein umfassendes Verständnis
der vorliegenden Erfindung zu vermitteln. Für den Fachmann auf dem Gebiet
ist es jedoch offensichtlich, dass diese besonderen Einzelheiten
für die
Ausführung
der vorliegenden Erfindung nicht erforderlich sind. In den nachstehend
beschriebenen Ausführungsbeispielen
wird die vorliegende Erfindung zwar in Bezug auf den Einsatz zum
Decodieren von gemäß dem MPEG-Standard
codierten Videodaten beschrieben, wobei aber auch alternative Videocodierungs/Videodecodierungs-Standards
eingesetzt werden können,
ohne dabei vom Umfang der vorliegenden Erfindung abzuweichen.
-
MPEG-Decodierung
-
In
der allgemein Ausführung
besteht ein MPEG-Systemstrom aus zwei Schichten: die Systemschicht
enthält
Zeitsteuerungs- und andere Informationen, die erforderlich sind,
um die Audio- und Videoströme
zu demultiplexieren und um Audio und Video während der Wiedergabe zu synchronisieren; und
die Kompressionsschicht, welche die Audio- und Videodatenstöme aufweist.
-
Ein
Ausführungsbeispiel
der Hierarchie der Schichten in einem MPEG-Bitstrom ist wie folgt
angeordnet, wie dies in der Abbildung aus 1 dargestellt
ist: Sequenz, Bildergruppe (GOP), Bild-Slice, Makroblock und Block.
Die verschiedenen Bestandteile des Stroms sind mit eindeutigen, Byte-ausgerichteten
Codes gekennzeichnet, so genannten Startcodes. Die Startcodes werden
sowohl zum Identifizieren bestimmter Bestandteile des Stroms verwendet
als auch, um einen wahlfreien Zugriff auf den Videostrom zu ermöglichen.
-
Die
höchste
Ebene in der Schichtanordnung ist die Sequenzebene. Eine Sequenz
besteht aus Gruppen von Bildern (GOPs). Jede GOP fasst eine Reihe
benachbarter Bilder zu einer Gruppe zusammen. Ein Zweck der Erzeugung
einer derartigen identifizierbaren Gruppierung ist es, einen Punkt
des wahlfreien Zugriffs in dem Videostrom für Wiedergabesteuerungsfunktionen
(Schnelles Vorspielen, Rückwärts, etc.)
bereitzustellen.
-
In
jeder GOP gibt es eine Reihe von Bildern. Gemäß MPEG-2 wird Zeilensprung-Video
unterstützt,
so dass jedes Bild entweder einem Vollbild bzw. Einzelbild (für progressive
oder verschachtelte Videoströme)
oder einem Halbbild (für
verschachtelte Videoströme)
in dem ursprünglichen
Strom entspricht.
-
Die
Bilder werden weiter in Slices unterteilt, die jeweils ein Fragment
einer Zeile in dem Bild definieren. Slices umfassen eine Reihe von
Makroblöcken,
bei denen es sich in einem Ausführungsbeispiel
um 16 × 16
Pixelgruppen handelt, welche die Luminanz- und Chrominanzdaten für diese
Pixel in dem decodierten Bild aufweisen. Makroblöcke werden in Blöcke unterteilt.
In einem Ausführungsbeispiel
entspricht ein Block einer 8 × 8
Pixelgruppe, welche die Luminanz oder Chrominanz für diese
Pixelgruppe näher
beschreibt. Blöcke
sind die Grunddateneinheit, mit welcher der Decodierer den codierten
Videostrom verarbeitet. Makroblöcke
und Blöcke weisen
keine ihnen zugeordneten Startcodes auf; ihre Begrenzungen werden
während
der Decodierung implizit ermittelt.
-
Codierung
-
Wie
dies vorstehend im Text beschrieben ist, handelt es sich bei dem
Block um die Grundeinheit der Datenverarbeitung. Wie dies in der
Abbildung aus 2 veranschaulicht ist, führt der
Codierer in einem Ausführungsbeispiel
für jeden
Datenblock in der Videosequenz für
gewöhnlich
die folgenden Schritte aus, um einen codierten Block zu erzeugen:
Bewegungsvorhersage (Motion Estimation), diskrete Kosinustransformation
(DCT), Quantisierung und Lauflängen
und Huffman-Codierung.
-
Auf
der ersten Stufe der Bewegungsvorhersage versucht der Codierer temporäre Redundanzen unter
den Bildern vorteilhaft zu nutzen. Die nächsten vier Stufen des Codierers
nutzen die räumliche
Korrelation bei der Kompression bzw. Komprimierung der Videosequenz.
Das Ergebnis der Ausführung
dieser fünf
Codierungsstufen an allen Blöcken
in einer Videosequenz ist ein MPEG-codierter Videostrom. Ein Strom
kann einmal codiert werden und danach nach Bedarf über ein Übertragungsmedium übermittelt
und/oder gespeichert werden. Eine Decodierung ist jedoch für gewöhnlich jedes
Mal erforderlich, wenn der Strom betrachtet wird.
-
Decodierung
-
Das
Decodierungsverfahren für
einen MPEG-codierten Strom führt
für gewöhnlich die
fünf Codierungsstufen
in umgekehrter Reihenfolge aus. Zuerst werden die Huffman- und Lauflängen-Decodierung eingesetzt,
um den quantisierten Block zu erzeugen. Die umgekehrte Quantisierung
wird ausgeführt,
um das Frequenzspektrum des Blocks zu erhalten. Daraus wird die
umgekehrte diskrete Kosinustransformation vorgenommen. Sofern erforderlich, wird
danach die Bewegtbildkompensation eingesetzt, um den fertigen Daten-Makroblock
aus dem Prädiktionsfehler,
den Bewegungsvektoren und dem Referenzbild zu erzeugen.
-
Ein
signifikanter Unterschied zwischen den Codierungs- und Decodierungsverfahren
ist es, dass für
das erstgenannte Verfahren deutlich mehr Zeit für die Bewegungsvorhersage als
erforderlich aufgebracht wird, um nach dem ähnlichsten Makroblock in dem
bzw. den Referenzbild(ern) zu suchen, während in dem letztgenannten
Verfahren die Bewegungsvektoren allgemein verfügbar sind, was die Bewegungskompensation
deutlich weniger kompliziert gestaltet als die Bewegungsvorhersage.
-
Decodierung
von Videodaten mit mehreren parallelen Prozessoren
-
Zur
Erhöhung
der Geschwindigkeit des Decodierens von MPEG-Videodaten, um die Videodaten für mehrere
Anwendungen bereitzustellen, stellt ein Ausführungsbeispiel eine parallele
Decodierung der Videodaten unter mehreren Prozessoren in einem System
bereit, wobei ein Speicher gemeinsam genutzt wird. Im Besondern
wird in einem Ausführungsbeispiel
die Arbeitslast der Decodierung der Videodaten auf die Gruppe der
Prozessoren auf der Slice-Ebene verteilt. In alternativen Ausführungsbeispielen
kann die Arbeitslast der Decodierung der Videodaten auf die Gruppe
von Prozessoren auf anderer Ebene als der Slice-Ebene verteilt werden,
ohne dabei von der vorliegenden Erfindung abzuweichen.
-
Gemäß der Definition
durch den Standard handelt es sich bei einem Slice in MPEG im Besonderen
um eine Reihe einer willkürlichen
Anzahl von Makroblöcken
in einer Zeile des Bilds. Die Abbildung aus 3 veranschaulicht
eine allgemeine Slice-Struktur. Jeder Slice weist mindestens einen Makroblock
auf, und aufeinander folgende Slices überschneiden sich nicht. Slices
treten in dem Bitstrom in der Reihenfolge auf, in der sie aufgetreten sind,
beginnend oben links in dem Bild und mittels Rasterabtastung von
links nach rechts und von oben nach unten fortschreitend. Slices
müssen
jedoch nicht von Bild zu Bild die gleiche Struktur beibehalten; es
kann eine unterschiedliche Anzahl von Slices geben und/oder Slices
mit unterschiedlichen Größen.
-
Die
Abbildung aus 4 zeigt ein Flussdiagramm, das
die Schritte des parallelen Decodierens der Videodaten durch die
Mehrzahl von Prozessoren gemäß einem
Ausführungsbeispiel
beschreibt. In dem Schritt 402 führt ein erster Prozessor einen
ersten Prozess aus, tastet eine Videosequenz von einer Disk oder
einer anderen Quelle für
komprimiertes Video ab bzw. liest dies in einen Speicher ein.
-
In
dem Schritt 404 liest der erste Prozessor ferner die Videosequenz,
um Slice-Startcodes zu identifizieren, die den Anfang der Slices
in der Videosequenz identifizieren. In dem Schritt 406 liest
der erste Prozessor ferner die Makroblöcke in jedem Slice, um die
Arbeitslast vorherzusagen, die dem Decodieren eines entsprechenden
Slices zugeordnet ist.
-
In
dem Schritt 408 weist der erste Prozessor ein oder mehrere
zu decodierende Slices an jeden Prozessor in einer Gruppe von Prozessoren
in einem System zu. In einem Ausführungsbeispiel werden die Slices
den verschiedenen Prozessoren so zugeordnet, dass die Arbeitslast
auf die Prozessoren verteilt wird. Wenn zum Beispiel ein erstes
Slice viele Makroblöcke
aufweist, benötigt
es voraussichtlich länger
für die
Decodierung. Einem zweiten Prozessor würden somit weniger Slices für die Decodierung
zugeordnet werden, da mindestens ein Slice länger für die Decodierung benötigt. Folgende
benachbarte Slices können
deutlich weniger Makroblöcke
aufweisen. Somit können
einem dritten Prozessor mehr Slices für die Decodierung zugeordnet
werden, wobei jedes Slice weniger Makroblöcke aufweist. Letztlich empfängt in einem
Ausführungsbeispiel
jeder Prozessor eine vergleichbare Arbeitslast der zu decodierenden
Slices.
-
In
dem Schritt 410 schreibt der erste Prozessor in einen gemeinsam
genutzten Speicher, mit den ersten und letzten zugeordneten Slices
als lokale Variablen für
jeden der Prozessoren, die für
die Decodierung der Slices bereitgestellt sind. Wenn der zweite
Prozessor zum Beispiel die Slices 1 bis 3 decodiert, decodiert ein
dritter Prozessor die Slices 4 bis 8, und ein vierter Prozessor
decodiert die Slices 9 bis 1, wobei die Anzahl der Slices als lokale
Variablen für jeden
der entsprechenden Prozessoren in den Speicher geschrieben wird.
Ein Vorteil der Zuordnung der Slices durch Identifikation der Slices
als lokale Variablen für
die entsprechenden Prozessoren im Gegensatz zu der Bereitstellung
der Slices in einer gemeinsam zugreifbaren Aufgaben-/Slice-Warteschlange
ist es, dass Konflikte zwischen Prozessoren beim Zugriff auf die
Warteschlange zum Identifizieren der zu decodierenden Slices vermieden
werden.
-
Wenn
zum Beispiel eine Slice-Warteschlange verwendet wird und der Prozessor
das Decodieren eines Slices abgeschlossen hat, so würde er zu der
Warteschlange zurückkehren,
um das nächste zu decodierende
Slice zu bestimmen. Darüber
hinaus würde
der Prozessor auch einen Zeiger heraufsetzen, der das nächste zu
decodierende Slice identifiziert, so dass bei dem nächsten Zugriff
eines Prozessors auf die Warteschlange, dieser das folgende zu decodierende
Slice empfängt.
Ferner würde
verhältnismäßig häufig auf
die Warteschlange zugegriffen. Folglich würden auch häufig Konflikte zwischen den auf
die Warteschlange zugreifenden Prozessoren auftreten. Durch die
Zuordnung bzw. Zuweisung der zu decodierenden Slices als lokale
Variablen für
jeden der entsprechenden Prozessoren können Konflikte zwischen den
Prozessoren beim Zugriff auf den Speicher jedoch deutlich reduziert
werden.
-
In
dem Schritt 412 lesen die entsprechenden Prozessoren ihre
entsprechenden lokalen Variablen, um zu bestimmen, welche Slices
decodiert werden sollen, und wobei sie danach die Slices aus dem Speicher
lesen und die Slices gemäß den vorstehend beschriebenen
Decodierungsabläufen
decodieren. In einem Ausführungsbeispiel
weist der Prozessor, der die zu decodierenden Slices zuweist, sich
selbst auch eines oder mehrere zu decodierende Slices zu, wobei
der Prozessor danach gemeinsam mit den anderen Prozessoren mit der
Decodierung fortfährt.
In einem Ausführungsbeispiel
führen
die entsprechenden Prozessoren die Schritte des Decodierens der Slices
aus, indem im Speicher gespeicherte Softwareroutinen ausgeführt werden,
die zur Ausführung der
vorstehend beschriebenen Decodierungsschritte vorgesehen sind (z.B.
Huffman-Decodierung, Lauflängen-Decodierung,
etc.).
-
Danach
fährt der
erste Prozessor damit fort, die Videodaten abzutasten/zu lesen und
zusammenhängende
Slices den Prozessoren zur Decodierung zuzuordnen, und zwar für die gewünschte zu
decodierende Videogröße. Ferner
kann das Verfahren zum Decodieren der Videodaten durch Verteilen
der Arbeitslast auf mehrere Prozessoren, wie dies vorstehend im
Text beschrieben worden ist, in Echtzeit ausgeführt werden.
-
Die
Abbildung aus 5 veranschaulicht ein System
gemäß einem
Ausführungsbeispiel,
das mehrere Slices parallel durch mehrere Prozessoren decodieren
kann. Wie dies dargestellt ist, weist das System mehrere Prozessoren
auf, die einen Speicher gemeinsam nutzen (z.B. eine symmetrische Mehrprozessorenarchitektur).
In einem alternativen Ausführungsbeispiel
können
mehrere Prozessoren auf separate Speicher zugreifen an Stelle den
gleichen Speicher gemeinsam zu nutzen, ohne dabei vom Umfang der
vorliegenden Erfindung abzuweichen.
-
Wie
dies in dem Speicher des Systems aus 5 dargestellt
ist, kann die Logikeinheit zum Ausführen des Verfahrens des Decodierens
der Videodaten unter Verwendung mehrerer paralleler Prozessoren
gemäß der vorstehenden
Beschreibung als eine Reihe von Computerbefehlen bereitgestellt
werden, die von einem oder mehreren Prozessoren ausgeführt werden.
Darüber
hinaus kann die Logik zur Ausführung
der Schritte des Decodierens der Videodaten auch als eine Reihe
von Computerbefehlen (z.B. MPEG-Decodierer) in einem Speicher bereitgestellt bzw.
gespeichert werden. Die Befehle zum Ausführen der Verfahren gemäß der vorstehenden
Beschreibung können
alternativ auf andersartigen computermaschinenlesbaren Medien gespeichert
werde, zu denen etwa magnetische und optische Plattenspeicher zählen. Das
Verfahren gemäß der vorliegenden
Erfindung kann zum Beispiel auf computer-/maschinenlesbaren Medien
gespeichert werden, wie etwa magnetischen oder optischen Plattenspeichern,
auf die über
ein Plattenlaufwerk (oder ein Laufwerk für ein computerlesbares Medium),
wie etwa das in der Abbildung aus 5 dargestellte Laufwerk,
zugegriffen werden kann.
-
Alternativ
kann die Logik zur Ausführung
der vorstehend beschriebenen Verfahren, einschließlich des
Verfahrens zum Decodieren der Videodaten über mehrere parallele Prozessoren
in zusätzlichen
computer- und/oder maschinenlesbaren Medien implementiert werden,
wie etwa diskreten Hardware-Komponenten, wie etwa großintegrierten
bzw. LSI-Schaltkreisen, anwendungsspezifischen Schaltkreisen (ASICs),
Firmware wie etwa elektrisch löschbaren, programmierbaren
Nur-Lesespeichern (EEPROMs) und elektrischen, optischen, akustischen
oder anders verteilten Signalen (z.B. Trägerwellen, Infrarotsignale,
digitale Signale, etc.).