-
Technisches Gebiet
-
Der hierin offenbarte Gegenstand betrifft im Allgemeinen Techniken zum Speichern und Abrufen von Pixeldaten.
-
Stand der Technik
-
Einige Videocodierer und -decodierer, die in SoC-(systems on chip)-Geräten integriert sind, schreiben Videodaten in einen Speicher, und fragen Videodaten vom Speicher zur Bewegungsvektorgeneration und Bewegungskompensierung ab. Bewegungsvektorgeneration und Bewegungskompensierung sind bei der Videocodierung und -decodierung wohlbekannte Techniken. Das Schreiben in und Lesen aus externem Speicher kann wesentliche Mengen an Leistung verbrauchen. Da Videoframegröße bei Benutzerelektronikgeräten ansteigt, ist es wünschenswert, die Anzahl an Leseoperationen aus Speicher und Schreiboperationen in Speicher zu verringern. Verringern der Anzahl an Lese- und Schreibzugriffen von Speicher kann Energieverbrauch verringern und potentiell Speicher zur Verwendung von Geräten neben Videocodierern und -decodierern freigeben.
-
WO 01/26 056 A1 offenbart ein Verfahren zum Speichern eines Datenblocks, der aus N Zeilen und M Spalten besteht, mit dem Schritt des Transponierens des Datenblocks um 90 °, um dadurch einen transponierten Datenblock zu erzeugen, der aus M Zeilen und N Spalten besteht, und der Schritt des Speicherns des transponierten Datenblocks. Der transponierte Datenblock wird vorzugsweise unter Verwendung eines oder mehrerer Abrufbefehle abgerufen, wobei die Anzahl der Abrufbefehle zum Abrufen des transponierten Datenblocks geringer ist als die Anzahl Abrufbefehle, die zum Abrufen der gleichen Daten erforderlich sind, wenn sie in ihrer ursprünglichen Form gespeichert werden , wodurch die Speicherbandbreite verringert wird. In einer gegenwärtig in Betracht gezogenen Implementierung ist der Datenblock ein Referenzmakroblock von decodierten MPEG-Videodaten, der bei Bewegungskompensationsoperationen verwendet wird, und jeder der Abrufbefehle ist ein AxB-Abrufbefehl, wobei A die Anzahl von Spalten von Daten und B darstellt stellt die Anzahl von Zeilen von Daten dar, die als Antwort darauf geholt werden sollen, und wobei ferner A> B ist.
-
US 6 272 180 B1 offenbart ein Verfahren und Vorrichtungen zum Komprimieren und Dekomprimieren von Referenzframes in einem Videodecodierer stellen einen Ansatz mit geringer Komplexität dar, um Referenzrahmenspeicher zu sparen. Gleichzeitig bietet dieser Ansatz eine PSNR- und Drift-Reduktions-Performance, die vergleichbar ist mit Konkurrenzverfahren mit relativ hoher Komplexität, wodurch typische Kompressionsraten von 2: 1 bis 8: 1 mit guter Leistung verwendet werden können. In einer bevorzugten Ausführungsform sind Bezugsrahmen blockiert, und jeder Block ist Haar-Wavelet-transformiert. Die Teilbänder der Wavelet-Transformation mit ähnlichen erwarteten Run-Length-Statistiken auf Bit-Ebene werden zusammen gruppiert, und jede Gruppe wird unter Verwendung von Golomb-Rice-Codes mit einem Parameter-Lookup-Adaptionsverfahren codiert eingebettet. Der eingebettete Code wird in einem komprimierten Bildspeicher gespeichert, der blockweise indiziert wird, um später retrahiert und dekomprimiert zu werden, wenn der Referenzblock vom Videodecoder benötigt wird.
-
Die vorliegende Erfindung bezieht sich auf ein Verfahren gemäß Anspruch 1, eine Vorrichtung gemäß Anspruch 7 und ein System gemäß Anspruch 13.
-
Figurenliste
-
Erfindungsgemäße Ausführungsformen werden exemplarisch und in keiner Weise einschränkend in den Zeichnungen veranschaulicht, bei denen gleiche Bezugsnummern zum Verweis auf ähnliche Elemente verwendet werden.
- 1 stellt ein Beispiel eines Videodecodierungssystems dar.
- 2A zeigt mehrere Beispiele, in denen Pixel in Bursts entlang Reihen von Speicherorten aus Speicher gelesen werden.
- 2B stellt eine Art und Weise dar, in der komprimierte Daten in Speicher gespeichert werden und von dort abgerufen werden, wenn komprimierte Daten so gespeichert werden, dass Spalten- und Reihenadressen reversiert sind.
- 3 stellt ein Beispiel eines Videocodierungssystems gemäß einer Ausführungsform dar.
- 4A stellt eine Art und Weise zum herkömmlichen Schreiben und Lesen von Makroblöcken dar.
- 4B stellt eine Art und Weise zum unrollierten Schreiben und Lesen von Makroblöcken dar.
- 5 stellt einen Beispielprozess dar, der von einem Videodecodierungssystem verwendet wird, um Makroblöcke zu speichern und abzurufen.
- 6 stellt einen Beispielprozess dar, der von einem Videocodierungssystem verwendet wird.
- 7 stellt ein System gemäß einer Ausführungsform dar.
-
Ausführliche Beschreibung
-
Verweise in dieser Beschreibung auf „eine Ausführungsform“ bedeuten, dass ein bestimmtes Merkmal, eine Struktur oder Charakteristikum, das in Verbindung mit der Ausführungsform beschrieben wird, zumindest in einer Ausführungsform der vorliegenden Erfindung enthalten ist. Somit beziehen sich die Verwendungen des Ausdrucks „bei einer Ausführungsform“ an verschiedenen Stellen in dieser Beschreibung nicht notwendigerweise immer auf die gleiche Ausführungsform. Darüber hinaus können die bestimmten Merkmale, Strukturen oder Charakteristika in einer oder mehr Ausführungsformen kombiniert werden.
-
Verschiedene Ausführungsformen verringern potentiell die Anzahl an Schreib- und Leseoperationen, die verwendet werden, um Referenzbilder zu schreiben bzw. zu lesen. Einige Ausführungsformen versuchen, die Referenzbilder verlustfrei zu komprimieren, und komprimierte Referenzbilder in Speicher zu speichern, damit sie entweder von einem Videocodierer oder einem Videodecodierer verwendet werden können. Für Bilder, die angefragt werden, von einem Videodecodierer gespeichert zu werden, wird ein umgedrehtes Adressschema verwendet, wobei Spaltenadressen zu Reihenadressen gemacht werden, und umgekehrt. Die komprimierten Bilder werden in Speicher gemäß dem umgedrehten Speicheradressschema gespeichert.
-
Um das Referenzbild, das in der umgedrehten Konfiguration gespeichert ist, von Speicher abzurufen, können eine oder mehr Reihen von Referenzbilddaten gelesen und dekomprimiert werden. Dekomprimierte Referenzbilddaten können in Speicher gespeichert werden. Wenn komprimierte Referenzbilddaten in Spalten gespeichert werden, aber in Reihen gelesen werden, können Teile von mehreren Reihen von Referenzbildern abgerufen werden. Teile von mehreren Reihen von Referenzbildern können in einem Speicher gespeichert werden, und für den Videodecodierer erneut zusammengesetzt werden. In einigen Fällen, wenn ein bestimmtes Pixel von einem Referenzbild von dem Videodecodierer angefragt wird, finden Lesezugriffe von Teilen von mehreren Reihen von Referenzbildern statt, bis das/die angefragte/n Pixel identifiziert ist/sind. Daten mit einer oder mehr Burstgrößen können abgerufen werden, um ein angefragtes Pixel abzurufen. Wenn zusätzlichen Datenpixel gelesen worden sind, können die zusätzlichen Datenpixel in Speicher für potentiell späteren Gebrauch gespeichert werden.
-
Für Bilder, die angefragt werden, dass sie von einem Videocodierer gespeichert werden, werden komprimierte Daten unrolliert gespeichert, wobei die komprimierten Daten an durchgängigen adressierbaren Speicherorten gespeichert werden. In einigen Fällen fragen Videocodierer ganze Makroblöcke von Daten an. Dementsprechend, wenn ein Videocodierer Abrufen eines Referenzmakroblocks anfragt, werden ganze komprimierte Makroblöcke von Daten angefragt, dass sie von durchgängigen Speicherorten in einem oder mehr Lesebursts abgerufen werden.
-
1 zeigt ein Blockdiagramm eines Systems, in dem ein Videodecodierungssystem Makroblöcke in Speicher schreibt und Makroblöcke von Speicher abruft. Videodecodierer 102 soll Videodecodierung bei empfangenen Frames ausführen. Videodecodierer 102 kann jeden Videodecodierungsstandard anwenden, um Makroblöcke zu decodieren, wie u. a. MPEG-2 (ISO/IEC 13818-1 (2000)), MPEG-4, Teil 10 (ISO/IEC 14496-10 (2009)), sowie neu entstehende Videodecodierungsstandards, wie z. B. ITU-T H.265. Decodierte Makroblöcke können als eine Referenz beim Decodieren eines anderen Makroblocks verwendet werden.
-
Golomb-Codierer 104 soll Makroblöcke von Videodecodierer 102 empfangen. Golomb-Codierer 104 soll Golomb-Komprimierung von Makroblöcken ausführen. Golomb-Codierung wird beschrieben in Golomb, S.W., „Run-length Encodings,“ IEEE Transactions on Information Theory, IT (1966). Golomb-Codierung nähert sich den
Komprimierungsleistungsfähigkeiten von Huffman-Codes an, in dem Maß, wie die Framegröße zunimmt. Komprimieren von decodierten Bildern vor dem Speichern in Speicher kann potentiell die Anzahl an Schreiboperationen von decodierten Bildern in Speicher verringern. In einigen Fällen können 4-Symbol-Golomb-Codierungen und -Decodierungen pro Taktzyklus stattfinden. Im Gegensatz dazu können andere verlustfreie Komprimierungsschemata Komprimierung eines Symbols pro multiplen Taktzyklus erzielen.
-
Techniken zur Ausführung von Golomb-Codierung sind beschrieben in U.S.-Patentanmeldung
US 2011 / 0 317 759 A1 mit dem Titel „System, Verfahren und Computerprogrammartikel für Parameterabschätzung für verlustfreie Videokomprimierung“, Erfinder Thomas und Coulter, eingereicht am 25. Juni 2010 (Aktenzeichen des Anwalts P34530). In einigen Fällen kann eine starke Korrelation zwischen benachbarten Frames auftreten. Bei verschiedenen Ausführungsformen, bei Golomb-Codierung, wird ein Histogramm der Symbole des vorherigen Frames generiert, um die Anzahl an Bits in dem derzeitigen Frame nach verlustfreier Komprimierung vorherzusagen, wobei ein spezifischer Codierungsparameter angenommen wird. Iterieren durch alle der möglichen Codierungsparameter auf dem vorherigen Framehistrogramm kann einen optimalen Codierungsparameter ergeben, mit dem der derzeitige Frame komprimiert werden kann. Verwenden des vorherigen Frames als einen Prädiktor kann in hoher Komprimierungseffizienz resultieren. Ein Beispielprozess eines Golomb-Rice-Komprimierungsschemas ist wie folgt:
- 1. Generieren eines Histogramms der vorherigen Framesymbole, basierend auf einem gewählten Codierungsparameter, d. h. M=0 für Golomb. Ein Symbol ist der Fehlerwert Pixel(n) - Pixel(n-1).
- 2. Sortieren des Histogramms in absteigender Reihenfolge.
- 3. Zuteilen eines Golomb-Codes zu jeder Bin. Eine Bin in einem Histogramm ist jedes getrennte Symbol oder Symbolbereich, für den eine Zählung aufrechterhalten bleibt. Beispielsweise kann bei Pixeln, die Werte von 0 - 255 aufweisen, 0 eine erste Bin sein, 1 kann die nächste Bin sein, usw. Bei einem anderen Beispiel kann es mehrere Bins geben, wobei jede Bin einen Bereich von Pixelwerten abdeckt. Jede dieser Bins weist eine zugeteilte Zählung der Anzahl an Zeiten auf, wie oft die Werte innerhalb des Bereichs einer jeden Bin aufgetreten sind.
- 4. Multiplizieren der Anzahl an Einträgen in einer Bin mit dem jeweiligen zugeteilten Golomb-Code für jede Bin.
- 5. Die Summe dieser Produkte gibt eine Abschätzung der Anzahl an Bits, die erforderlich sind, um den derzeitigen Frame für ein spezifisches Codierungsparameter zu codieren.
- 6. Wiederholen von Items 1-5 für jeden Codierungsparameter und Auswählen des Codierungsparameters, der die geringste Anzahl an Gesamtbits ergibt. Beispielsweise kann es bei einem 8 Bit Pixelbeispiel unter Verwendung von Golomb-Codierung 8 Codierungsparameter geben, aus denen ausgewählt werden kann, d. h. M=0 bis M=7.
-
Golomb-Codierer 104 komprimiert jede Reihe eines Makroblocks und fragt das Schreiben der komprimierten Reihen in Speicher in einer umgedrehten Formation an. In einigen Fällen fragt Golomb-Codierer 104 an, dass die ganz links befindliche komprimierte Spalte eines jeden umgedrehten Makroblocks bei einer bekannten Adresse gespeichert wird, und sodann im Anschluss die verbliebenen komprimierten Spalten gespeichert werden. Im Anschluss daran ist Leseblock 110 in der Lage, willkürlich auf den Anfang eines jeden Makroblocks zuzugreifen, indem er willkürlich auf die ganz links befindliche komprimierte Spalte zugreift. Leseblock 110 liest den Rest eines jeden komprimierten Makroblocks nach der ersten komprimierten Spalte. In einigen Fällen fragt Golomb-Codierer 104 an, dass eine ganz links befindliche komprimierte Spalte eines jeden umgedrehten Makroblocks bei jeder 128. Spalte von Speicher gespeichert werden soll. Dadurch wird ermöglicht, dass willkürlich auf den Anfang eines jeden achten komprimierten Makroblocks zugegriffen werden kann. Andere Arten des Speicherns von Makroblöcken sind zulässig, vorausgesetzt, dass auf den Anfang einiger Makroblöcke willkürlich zugegriffen werden kann.
-
Golomb-Codierer 104 soll verlustfreie komprimierte Bilder an Schreibmusterblock 106 bereitstellen. Schreibmusterblock 106 soll Golombkomprimierte Makroblöcke in Speicher 108 auf eine Art und Weise schreiben, die unter Bezugnahme auf 2B beschrieben ist. Bei einigen Ausführungsformen soll Schreibmusterblock 106 komprimierte Bilder in Speicher 108 schreiben, indem er Reihen von Pixeln als Spalten von Pixeln anstatt als Reihen schreibt. Mit anderen Worten können Reihen- und Spaltenspeicheradressen reversiert werden, sodass Reihenadressen als Spaltenadressen verwendet werden, und umgekehrt. Speicher 108 kann ein Speicher vom Typ DDR (double data rate) sein, obwohl andere Typen von externem Speicher mit einer Minimumleseburstgröße verwendet werden können. In einigen Fällen ist Speicher 108 innerhalb der gleichen integrierten Schaltung wie Videodecodierer 102 gebildet. In anderen Fällen ist Speicher 108 Teil einer getrennten integrierten Schaltung von Videodecodierer 102.
-
In einigen Fällen kann das Schreiben von komprimierten Bildern unter Verwendung des umgedrehten Adressschemas weniger Schreiboperationen als das Schreiben von komprimierten Bildern über Reihen verwenden. Für einige Speicher, wie z. B. DDR, finden Schreiboperationen in 32 Byte Erhöhungen statt. Das Schreiben von komprimierten Makroblöcken in umgedrehter Konfiguration kann Füllinhalt verringern, der in Speicher geschrieben wird.
-
Ein Beispiel von Komprimierung und Speicherung von decodierten Makroblöcken ist wie folgt. Bei einigen Implementierungen können acht (8) decodierte Makroblöcke unter Verwendung von Golomb-Codierung gepuffert und komprimiert werden. Infolge der Komprimierung sind sechszehn (16) Datenreihen verfügbar. Jede Datenreihe kann verdoppelt werden, sodass die Anzahl an Reihen zweiunddreißig (32) ausmacht. Beispielsweise kann jede Datenreihe erneut geschrieben werden, sodass jede Reihe zwei Datenreihen beinhaltet, und die Anzahl an Spalten wird verringert. Beispielsweise kann eine 128 Byte Leitung, die zu 64 Bytes komprimiert wurde, als 2 Reihen von 32 Bytes gesichert werden. Anschließend werden die Daten im Speicher gespeichert, indem Reihen- und Spaltenadressen reversiert werden.
-
Leseblock 110 soll komprimierte Makroblöcke aus Speicher 108 lesen. Videodecodierer 102 kann Leseblock 110 anfragen, einen bestimmten Makroblock oder bestimmtes Pixel von Speicher 108 auszulesen. Komprimierte Makroblöcke werden auf eine Art und Weise gespeichert, die unter Bezugnahme auf 2B beschrieben ist. Komprimierte Makroblöcke sind mit reversierten Reihen- und Spaltenadressen gespeichert, allerdings können Abrufe von Speicher über Reihen stattfinden. Bei einigen Ausführungsformen liest Leseblock 110 komprimierte Makroblöcke aus Speicher 108 aus, unter Verwendung von Lesebursts über Reihen, und stellt Teile einer jeden Spalte an Golomb-Decodierer 112 bereit. Leseblock 110 ist in der Lage, direkt auf jede Spaltenposition innerhalb einer Reihe zuzugreifen. Für jeden Leseburst nach dem ersten Leseburst ruft Leseblock 110 erneut die zuletzt direkt zugreifbare Spaltenposition für eine Reihe auf, und berechnet die Adresse dahingehend, dass sie zu dem zuletzt direkt zugreifbaren Ort geht und von dort aus startet. Auf ein Pixel, auf das zugegriffen werden soll, wird zugegriffen, indem auf zumindest eine Spalte von komprimierten Daten zugegriffen wird, die das Pixel beinhalten, auf das zugegriffen werden soll.
-
Das Schreiben von Makroblöcken in einer umgedrehten Konfiguration kann potentiell eine Anzahl an Leseoperationen verringern, wenn die Makroblöcke darauffolgend von Speicher abgerufen werden. Wenn komprimierte Datenspalten eine ähnliche Länge aufweisen, werden Lesebursts mit Füllern, d. h. nichtkomprimierten Daten, verringert. Abgerufene Teile von Makroblöcken werden in einem Cache gespeichert, und diese abgerufenen Teile können als Makroblöcke rekonstruiert oder für späteren Gebrauch gespeichert werden.
-
In Fällen, in denen ein oder mehr komprimierte Makroblöcke im Wesentlichen länger ist als die anderen komprimierten Makroblöcke, kann das Schema von 2A verwendet werden. In einigen Fällen erkennt Golomb-Codierer 104, dass ein komprimierter Makroblock mehr Lese- und Schreibineffizienz verursacht, als wenn er unkomprimiert gespeichert worden wäre, und in solch einem Fall kann Golomb-Codierer 104 anfragen, den Makroblock unkomprimiert in Speicher zu speichern.
-
Golomb-Decodierer 112 soll Golomb-Decodierung bei jeden abgerufenen komprimierten Daten von Speicher 108 ausführen. Golomb-Decodierung wird beschrieben in Golomb, S.W., „Run-length Encodings,“ IEEE Transactions on Information Theory, IT (1966). Golomb-Decodierer 112 soll decodierte Pixel an Speicher 114 bereitstellen. Geeignete Techniken zur Ausführung von Golomb-Decodierung sind beschrieben in U.S.-Patentanmeldung Seriennummer 12/823,637, mit dem Titel „System, Verfahren und Computerprogrammartikel für Parameterabschätzung für verlustfreie Videokomprimierung“, Erfinder Thomas und Coulter, eingereicht am 25. Juni 2010 (Aktenzeichen des Anwalts P34530).
-
Speicher 114 speichert Golomb-decodierte Teile von Makroblöcken. Bei einigen Ausführungsformen ist Speicher 114 als ein Cache implementiert, obwohl andere Typen von Speicher verwendet werden können, um Teile von Makroblöcken zu speichern. Videodecodierer 102 kann ein oder mehr Pixel in einem Makroblock von Speicher 108 anfragen. Rekonstruktionslogik 115 bestimmt, ob Speicher 114 den Makroblock oder Pixel speichert, der/das von Videodecodierer 102 angefragt wurde. Der/das angefragte Makroblock oder Pixel kann als ein Referenzmakroblock oder -pixel bei Videodecodierung verwendet werden. Rekonstruktionslogik 115 fragt Leseblock 110 an, eine nächste Reihe von Speicher 108 zu lesen, bis das angefragte Pixel abgerufen ist. In einigen Fällen ruft ein einzelner DDR-Burstlesezugriff 16 Reihen von Speicher 108 ab, angefangen bei der zuletzt direkt zugreifbaren Spalte oder dem zuletzt zugegriffenen Ort für diesen Satz an Reihen. Ein 32 Byte Leseburst kann sich in 32 Reihen übersetzen, die zu 16 Reihen gemacht werden können, indem jede Leitung verdoppelt wird.
-
Das Folgende ist ein Beispiel einer Art und Weise zum Abrufen von Pixeln von einem Speicher, wenn die Pixel von einem Decodierer verwendet werden. Daten sind in umgedrehtem Format gespeichert, wobei Spalten- und Reihenadressen reversiert sind. Sechszehn (16) Datenreihen werden abgefragt. Wenn die angefragten Pixel nicht in Speicher gespeichert sind, finden zusätzliche Reihenlesezugriffe statt, angefangen bei der zuletzt direkt zugreifbaren Spalte, oder angefangen nach dem vormals zugegriffenen Ort eines Satzes an abgerufenen Reihen. Die Lesedaten werden Golomb-dekomprimiert. Wenn die angefragte Anzahl an Pixelspalten in dem neuesten Abruf beinhaltet ist, sodass die angefragten Pixel in dem neuesten Abruf beinhaltet sind, dann werden keine zusätzlichen Lesezugriffe ausgeführt. Außerdem, wenn die angefragten Pixel in dem neuesten Abruf beinhaltet sind, dann wird die zuletzt zugegriffene Adresse für jede Reihe gespeichert, sodass darauffolgende Abrufe keine vormals gelesenen Daten lesen.
-
2A zeigt mehrere Beispiele, in denen Pixel in Bursts entlang Reihen von Speicherorten aus Speicher gelesen werden. Bei diesem Beispiel werden Blöcke entlang von Reihen gespeichert. Feste Streifen stellen Blöcke dar, die als komprimierte Daten gespeichert sind. Jeder Makroblock ist C Pixel mal B Pixel. Eine Minimumgröße eines jeden Leseburst ist als ein Rechteck gezeigt. In einigen Fällen ist der Minimumleseburst 32 Byte. Wenn mehr als ein Leseburst verwendet wird, um komprimierte Daten eines Blocks festzuhalten, sind einige der Daten, die in dem zweiten Leseburst gelesen werden, nicht Teil der komprimierten Daten. Dementsprechend können Daten, die nicht Teil der komprimierten Daten sind, als verschwendete Bandbreite erachtet werden.
-
2B stellt eine Art und Weise dar, in der komprimierte Daten in Speicher gespeichert werden und von dort abgerufen werden, wenn komprimierte Daten so gespeichert werden, dass Spalten- und Reihenadressen reversiert sind. Eine feste Leitung stellt eine Leitung von komprimierten Pixeln in einem Makroblock dar. In einigen Fällen kann auf Anfänge einer jeden Spalte von komprimierten Daten zugegriffen werden, im Gegensatz zu der Mitte oder dem Ende der Spalte. Lesebursts finden statt über eine Reihe von Speicheradressen, mit zunehmenden Spaltenspeicheradressen. Da jeder komprimierte Makroblock in einer Spalte gespeichert wird, wird ein Teil von zumindest einer Spalte von gespeicherten komprimierten Daten in jedem Leseburst abgerufen. Teile einer jeden Spalte eines komprimierten Makroblocks können dekomprimiert, gespeichert und später erneut zusammengesetzt werden, in Form eines unkomprimierten Makroblocks.
-
2B stellt ebenfalls einen Vergleich zwischen abgerufenen Daten dar, die nicht Teil von komprimierten Daten sind, wenn Daten in Reihen gespeichert und abgerufen werden (2A), im Gegensatz zu Spalten ( 2B). Im Vergleich dazu werden komprimierte Daten unter Verwendung von weniger Lesebursts abgerufen, wenn Daten unter Verwendung von Techniken von 2B gespeichert und abgerufen werden, im Gegensatz zu den Techniken von 2A.
-
3 stellt ein Beispiel eines Videocodierungssystems gemäß einer Ausführungsform dar. Videocodierer 302 soll Videocodierung bei Blöcken eines Bildes ausführen. Jegliche Videocodierungsstandards können verwendet werden, wie u. a. MPEG-2 (ISO/IEC 13818-1 (2000)), MPEG-4, Teil 10 (ISO/IEC 14496-10 (2009)), sowie neu entstehende Videodecodierungsstandards, wie z. B. ITU-T H.265. Videocodierer 302 soll codierte Makroblöcke an Golomb-Codierer 304 bereitstellen. Golomb-Codierer 304 soll Golomb-Codierung bei codierten Makroblöcken ausführen. Golomb-Codierer 304 kann ähnliche Techniken wie Golomb-Codierer 104 verwenden, um Golomb-Komprimierung auszuführen. Golomb-Codierer 304 soll komprimierte YUV-Rohdaten ausgeben.
-
Schreibmusterblock 306 soll Golomb-codierte Makroblöcke in Speicher 308 auf eine Art und Weise schreiben, die unter Bezugnahme auf 4B beschrieben ist. Bei einigen Ausführungsformen soll Schreibmusterblock 306 komprimierte Daten in Speicher 308 an durchgängige adressierbare Speicherorte schreiben. In einigen Fällen ist Speicher 308 innerhalb der gleichen integrierten Schaltung wie Videocodierer 302 gebildet. In anderen Fällen ist Speicher 308 Teil einer getrennten integrierten Schaltung von Videocodierer 302.
-
Lesemusterblock 310 soll codierte Daten von Speicher 308 auslesen, indem er Lesezugriffe auf durchgängige Speicherorte anfragt, bis ein Makroblock gelesen wird, der von Videocodierer 302 angefragt wird. Golomb-Decodierer 312 soll Golomb-Decodierung bei den komprimierten YUV-Daten unter Verwendung ähnlicher Techniken anwenden, die unter Bezugnahme auf Golomb-Decodierer 112 beschrieben sind. Golomb-Decodierer 312 soll Makroblöcke an Videocodierer 302 bereitstellen.
-
4A stellt eine Art und Weise zum herkömmlichen Schreiben von Makroblöcken dar. Herkömmlicherweise werden Pixel eines Makroblocks Zig-Zag-artig in Speicher geschrieben und daraus gelesen. Für einen Makroblock, der C mal R Pixel bemessen ist, werden Pixel gelesen, beginnend bei einem Zugriffspunkt über eine Reihe des Makroblocks und sodann über eine Reihe des nächsten Makroblocks.
-
4B stellt eine Art und Weise zum unrollierten Schreiben von Makroblöcken dar. In diesem Beispiel werden C mal R Pixel eines Makroblocks in Speicher an durchgängigen adressierbaren Speicherorten gespeichert und von dort abgerufen, im Gegensatz zu in einer Makroblockstruktur von 4A. Mehrere Lesebursts können verwendet werden, um den komprimierten Makroblock zu lesen, der von Videocodierer 302 angefragt wurde. 4B stellt dar, dass komprimierte Makroblöcke sich unter Umständen nicht über Daten eines gesamten Leseburst erstrecken können. Dementsprechend können einige abgerufene Daten unter Umständen keine nützlichen Daten beinhalten. Lesemusterblock 310 ruft das oberste linke Pixel des komprimierten Makroblocks ab, und fährt sodann mit dem Lesen fort, bis der gesamte komprimierte Makroblock abgerufen wurde. Golomb-Codierer 104 kann Speichern des Anfangs eines jeden Makroblocks an Orten anfragen, auf die direkt von Lesemusterblock 310 zugegriffen werden kann.
-
Für eine umgedrehte Konfiguration, wenn irgendeine komprimierte Leitung wesentlich länger ist, als andere komprimierte Leitungen, dann gibt es potentiell einen überflüssigen Rest, wenn der Teil der komprimierten Leitung gelesen wird, da Daten, die in einem Leseburst gelesen werden, um das Endstück einer Leitung abzurufen, meist unnütze Daten beinhalten. Im Gegensatz dazu, bei der unrollierten Konfiguration, während dem Bereitstellen von willkürlichem Reihenzugriff, gibt es keine verschwendete Bandbreite in keinem Lesezugriff, außer potentiell in dem letzten Lesezugriff, wo Füllmaterial gelesen werden kann. Lesebursts von 32 Bytes durchgängiger Pixel fahren fort, bis Abruf eines gesamten gewünschten Makroblocks stattfindet. Für einen 16×16 unrollierten Makroblock, der nicht komprimiert ist, werden 16 Spalten und 2 Reihen in einem einzelnen Leseburst gelesen.
-
5 stellt einen Beispielprozess dar, der von einem Videodecodierungssystem verwendet wird, um Makroblöcke zu speichern und abzurufen.
-
Block 502 beinhaltet Golomb-komprimierende Makroblöcke.
-
Block 504 beinhaltet das Schreiben Golomb-komprimierter Makroblöcke in adressierbare Speicherorte unter Verwendung von Spaltenadressen als Reihenadressen, und umgekehrt. Beispielsweise können Techniken, die unter Bezugnahme auf 2B beschrieben werden, zum Speichern von Makroblöcken in Speicher verwendet werden.
-
Block 506 beinhaltet das Abrufen von Golomb-komprimierten Makroblöcken von Speicher und Golomb-Dekomprimieren der Makroblöcke. Auf Teile von Speicher kann unter Verwendung von Lesebursts über die gleiche Reihenspeicheradresse zugegriffen werden, und die mehrere Spalten umfassen. Da Makroblöcke in Spalten gespeichert werden, allerdings über Reihen abgerufen werden, können Teile von mehreren Makroblöcken in einem einzelnen Leseburst abgerufen werden. Die Teile können Golomb-decodiert und gespeichert werden, sodass Makroblöcke aus den Teilen erneut zusammengesetzt werden können. Anschließend ist ein Pixel oder Makroblock für den Videodecodierer verfügbar.
-
6 stellt einen Beispielprozess dar, der von einem Videocodierungssystem verwendet wird.
-
Block 602 beinhaltet das Anwenden von Golomb-Komprimierung bei Makroblöcken, die gemäß einem Videostandard codiert worden sind.
-
Block 604 beinhaltet das Speichern von Golomb-komprimierten Makroblöcken in Speicher an konsekutiven Speicherorten. Beispielsweise werden Makroblöcke in Speicher an durchgängigen adressierbaren Speicherorten gespeichert.
-
Block 606 beinhaltet das Abrufen von gespeicherten Golomb-komprimierten Makroblöcken von Speicher von konsekutiven adressierbaren Speicherorten. Ein oder mehr Lesebursts können stattfinden, um Golombkomprimierte Makroblöcke von Speicher abzurufen.
-
7 stellt ein System gemäß einer Ausführungsform dar. System 700 kann Host-System 702 und Display 722 beinhalten. Computersystem 700 kann in einem Handheld-PC, Mobiltelefon, einer Set-Top-Box oder jedem EDV-Gerät implementiert sein. Host-System 702 kann Chipsatz 705, Prozessor 710, Host-Speicher 712, Speicher 714, Grafik-Subsystem 715 und Funkgerät 720 beinhalten. Chipsatz 705 kann Interkommunikation zwischen Prozessor 710, Host-Speicher 712, Speicher 714, Grafik-Subsystem 715 und Funkgerät 720 bereitstellen. Beispielsweise kann Chipsatz 705 einen Speicheradapter (nicht dargestellt) beinhalten, der imstande ist, Interkommunikation mit Speicher 714 bereitzustellen. Beispielsweise kann der Speicheradapter imstande sein, mit Speicher 714 gemäß irgendeinem der folgenden Protokolle zu kommunizieren: Small Computer Systems Interface (SCSI), Fibre Channel (FC) und/oder Serial Advanced Technology Attachment (S-ATA).
-
Bei verschiedenen Ausführungsformen findet das Speichern und Abrufen von decodiertem oder codiertem Video in/von Speicher gemäß hierin beschriebener Techniken statt.
-
Prozessor 710 kann als CISC-(Complex Instruction Set Computer)- oder RISC-(Reduced Instruction Set Computer)-Prozessor, Mehrkernprozessor oder jeder andere Mikroprozessor oder Hauptprozessor implementiert sein.
-
Host-Speicher 712 kann als ein flüchtiges Speichergerät implementiert sein, wie z. B., aber nicht beschränkt auf, einen Direktzugriffsspeicher (Random Access Memory, RAM), dynamischen Direktzugriffsspeicher (Dynamic Random Access Memory, DRAM) oder statischen RAM (Static RAM, SRAM). Speicher 714 kann als ein Permanentspeichergerät implementiert sein, u. a. ein magnetisches Diskettenlaufwerk, optisches Diskettenlaufwerk, Bandlaufwerk, ein internes Speichergerät, ein angeschlossenes Speichergerät, Flash-Memory, batteriegepufferter SDRAM (synchroner DRAM, synchronous DRAM), und/oder ein Speichergerät, auf das über ein Netzwerk zugegriffen werden kann.
-
Grafik-Subsystem 715 kann eine Verarbeitung von Bildern, wie z. B. Standbildern oder Videos, zur Anzeige durchführen. Eine analoge oder digitale Schnittstelle kann verwendet werden, um Grafik-Subsystem 715 und Display 722 kommunikativ zu koppeln. Beispielsweise kann die Schnittstelle irgendeine einer High-Definition Multimediaschnittstelle, ein DisplayPort, eine drahtlose HDMI und/oder drahtlose HD konforme Techniken sein. Grafik-Subsystem 715 könnte in Prozessor 710 oder Chipsatz 705 integriert sein. Grafik-Subsystem 715 kann eine eigenständige Karte sein, die kommunikativ mit Chipsatz 705 gekoppelt ist.
-
Funkgerät 720 kann ein oder mehr Funkgeräte beinhalten, die imstande sind, Signale gemäß anwendbaren Drahtlosstandards zu übertragen und zu empfangen, wie z. B., aber nicht beschränkt auf, irgendeine Version von IEEE 802.11 und IEEE 802.16.
-
Obwohl nicht dargestellt, kann System 700 Zugriff auf Eingabegeräte beinhalten, wie z. B. ein Sensorbildschirm, Maus und Kamera.
-
Die hierin beschriebenen Grafik- und/oder Videoverarbeitungs-Techniken können in verschiedenen Hardware-Architekturen implementiert werden. Beispielsweise kann Grafik- und/oder Videofunktionalität innerhalb eines Chipsatzes integriert sein. Alternativ kann ein separater Grafik- und/oder Videoprozessor verwendet werden. Als noch eine weitere Ausführungsform können die Grafik- und/oder Videofunktionen durch einen Universalprozessor, einschließlich ein Mehrkernprozessor, implementiert werden. Bei einer weiteren Ausführungsform können die Funktionen in einem Unterhaltungselektronikgerät implementiert sein.
-
Ausführungsformen der vorliegenden Erfindung können als irgendeine Form oder eine Kombination der Folgenden implementiert sein: ein oder mehr Mikrochips oder integrierte Schaltungen, die mittels eines Motherboards verbunden sind, fest verdrahtete Logik, von einem Speichergerät gespeicherte und von einem Mikroprozessor ausgeführte Software, Firmware, ein anwendungsspezifischer integrierter Schaltkreis (application specific integrated circuit, ASIC) und/oder ein Field Programmable Gate Array (FPGA). Der Begriff „Logik“ kann beispielsweise Software oder Hardware und/oder Kombinationen von Software und Hardware beinhalten.
-
Ausführungsformen der vorliegenden Erfindung können beispielsweise als ein Computerprogramm-Produkt bereitgestellt sein, das ein oder mehr maschinenlesbare Medien mit darauf gespeicherten maschinenausführbaren Befehlen beinhalten kann, die, wenn sie von einer oder mehr Maschinen, wie z. B. einem Computer, einem Netzwerk von Computern oder anderen elektronischen Geräten ausgeführt werden, dazu führen können, dass die eine oder die mehreren Maschinen Operationen in Übereinstimmung mit Ausführungsformen der vorliegenden Erfindung ausführen. Ein maschinenlesbares Medium kann beinhalten, ist aber nicht beschränkt auf, Disketten, optische Disks, CD-ROMs (Compact Disc-Read Only Memories), magnetooptische Disks, ROMs (Read Only Memories), RAMs (Random Access Memories), EPROMs (Erasable Programmable Read Only Memories), EEPROMs (Electrically Erasable Programmable Read Only Memories), magnetische oder optische Karten, Flash-Memory oder andere Art von Medien / maschinenlesbares Medium, das zum Speichern maschinenausführbarer Befehle geeignet ist.
-
Die Zeichnungen und die vorstehende Beschreibung gaben Beispiele der vorliegenden Erfindung. Obwohl sie als eine Anzahl ganz verschiedener funktionaler Objekte dargestellt sind, ist es für Fachleute selbstverständlich, dass ein oder mehr solcher Elemente sehr wohl zu einzelnen funktionalen Elementen kombiniert werden können. Alternativ können bestimmte Elemente in mehrere funktionale Elemente geteilt werden. Elemente aus einer Ausführungsform können einer weiteren Ausführungsform hinzugefügt werden. Beispielsweise können hierin beschriebene Reihenfolgen von Prozessen verändert werden und sind nicht auf die hierin beschriebene Art und Weise beschränkt. Außerdem müssen die Handlungen eines jeden Ablaufdiagramms weder in der gezeigten Reihenfolge implementiert sein, noch müssen alle Vorgänge unbedingt ausgeführt werden. Ebenfalls können diejenigen Vorgänge, die nicht von anderen Vorgängen abhängen, parallel mit den anderen Vorgängen ausgeführt werden. Der Umfang der vorliegenden Erfindung ist jedoch keineswegs durch diese spezifischen Beispiele beschränkt. Zahlreiche Variationen, entweder ausdrücklich in der Beschreibung gegeben oder nicht, wie z. B. Unterschiede in Struktur, Abmessung und Verwendung von Material, sind möglich. Der erfindungsgemäße Umfang ist zumindest so breit, wie von den folgenden Ansprüchen gegeben.