-
HINTERGRUND
-
Digitale Videoströme stellen typischerweise ein Video unter Verwendung einer Folge von Einzelbildern oder Standbildern dar. Jedes Einzelbild kann eine Anzahl von Blöcken beinhalten, die wiederum Informationen beinhalten können, die den Wert der Farbe, der Helligkeit oder anderer Attribute für Pixel beschreiben. Die Datenmenge in einem typischen Videostrom ist groß, und die Übertragung und Speicherung von Videos können signifikante Computer- oder Kommunikationsressourcen verwenden. Verschiedene Ansätze wurden vorgeschlagen, um die Datenmenge in Videoströmen zu verringern, einschließlich Komprimierung und andere Kodierungstechniken.
-
Bei einigen Videokompressionsverfahren kann ein Videoeinzelbild in Abschnitte unterteilt werden, die als Kacheln bezeichnet werden. Eine Kachel kann quadratisch oder rechteckig sein und beinhaltet mehrere Pixelblöcke. Durch Unterteilen eines Einzelbildes in Kacheln können die Kacheln parallel codiert und/oder decodiert werden. Kacheln ermöglichen auch die Dekodierung nur eines Teils des Bildes, indem nur bestimmte Kacheln decodiert werden, während andere Kacheln nicht decodiert werden. Bei aktuellen Videocodierer-Decodiererimplementierungen ist die Anzahl von Kacheln pro Einzelbild klein, beispielsweise 4 bis 8 Kacheln.
-
Bei Videokomprimierungsverfahren, die eine Kachelcodierung implementieren, beinhaltet der Teil des Videobitstroms, der einer bestimmten Kachel entspricht, einen Kacheldaten-Header und die Kachelinhaltsdaten. Der Kacheldaten-Header speichert einen Kacheldatengrößen (TDS) Wert, der den Decoder darüber informiert, wo die Kachelinhaltsdaten für die Kachel beginnen und stoppen. So kann zum Beispiel der TDS-Wert die Anzahl von Bits beschreiben, die verwendet werden, um die Kachelinhaltsdaten zu codieren. Die Kachelinhaltsdaten sind die codierten Daten, die dem Bild innerhalb der Kachel entsprechen. Somit ermöglicht der TDS-Wert dem Decodierer, die Kachelinhaltsdaten zu lokalisieren und die Kachelinhaltsdaten zu decodieren, um die Kachel zu rekonstruieren.
-
MISRA, Kiran; SEGALL, Andrew: „Tiles for parallel decoding.“ In: Joint collaborative team on video coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11, 5th meeting, Geneva, 16-23 March, 2011 beschreibt eine Erweiterung des Kachel-Konzepts, das in JCTVC-E408 vorgeschlagen wird.
-
MISRA, Kiran et al.: „An overview of tiles in HEVC.“ In: IEEE Journal of selected topics in signal processing, Vol. 7, 2013, No. 6, S. 969-977 bezieht sich auf einen Überblick über Kacheln im High Efficiency Video Coding (HEVC)-Standard.
-
FULDSETH, Arild et al.: „Tiles for managing computational complexity of video encoding and decoding.“ In: 2012 Picture Coding Symposium - PCS 2012 - proceedings, May 7-9, 2012, S. 389-392 beschreibt ein Kachelkonzept und berichtet Ergebnisse aufgrund der Technik.
-
ZUSAMMENFASSUNG
-
Ein Aspekt der offenbarten Ausführungsformen ist ein Verfahren zum Codieren eines Videosignals gemäß Ansprüchen 1 bis 5. Ein weiterer Aspekt der offenbarten Ausführungsformen ist eine Vorrichtung zum Codieren eines Videosignals gemäß Ansprüchen 6 bis 10. Ein Verfahren gemäß Ansprüchen 11 bis 15 and eine Vorrichtung zum Dekodieren von kodierten Videoinhalten eines Bitstroms gemäß Anspruch 16 wird weiterhin offenbart.
-
Figurenliste
-
Die Beschreibung hierin bezieht sich auf die begleitenden Zeichnungen, in denen gleiche Bezugszeichen gleiche Teile in den verschiedenen Ansichten bezeichnen.
- 1 ist eine schematische Darstellung eines Videokodier- und Dekodiersystems.
- 2 ein Blockdiagramm eines Beispiels eines Computergeräts ist, das eine Sendestation oder eine Empfangsstation realisieren kann.
- 3 ist ein Diagramm eines zu kodierenden und anschließend zu dekodierenden Videostroms.
- 4 ein Blockdiagramm eines Videokompressionssystems gemäß einem Aspekt dieser Offenbarung.
- 5 ein Blockdiagramm eines Videodekompressionssystems gemäß einem Aspekt dieser Offenbarung.
- 6 ist eine Veranschaulichung, die einen Bitstrom mit Kodierung mit fester Länge des Kacheldatenraums zeigt.
- 7A ist eine Veranschaulichung, die einen Bitstrom mit adaptiver KachelDatenraumkodierung gemäß einem ersten Beispiel zeigt.
- 7B ist eine Veranschaulichung, die einen Bitstrom mit adaptiver KachelDatenraumkodierung gemäß einem zweiten Beispiel zeigt.
- 8 ist ein Blockdiagramm, das ein System für eine adaptive KachelDatenraumkodierung zeigt.
- 9 ist ein Flussdiagramm, das einen adaptiven Kachel-Datenraum-Kodierprozess gemäß einem ersten Beispiel zeigt.
- 10 ist ein Flussdiagramm, das einen adaptiven Kachel-Datenraum-Kodierprozess gemäß einem zweiten Beispiel zeigt.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Die Kachelkodierung führt für jede Kachel zusätzliche Bit-Kosten ein, die gleich der Anzahl der Bits ist, die für den Kachel-Datenkopf ausgegeben wurden. Obwohl diese Bitkosten in gegenwärtigen Implementierungen, die eine kleine Anzahl von Kacheln verwenden, unwesentlich sind, können die zusätzlichen Bitkosten signifikant sein, wenn die Anzahl der Kacheln erhöht wird. Zukünftige Kachelkodierungsanwendungen erhöhen die Verwendung der Kachelkodierung und führen zu einer starken Zunahme der Anzahl von Kacheln, die pro Einzelbild codiert sind. So können beispielsweise Anwendungen der virtuellen Realität stark davon profitieren, dass sie nur einen Teil eines Einzelbildes decodieren können, und Einzelbilder in Virtual-Reality-Anwendungen können mehr als eine Million Kacheln (z. B. ein Gitter von 1024 Kacheln bis 1024 Kacheln) beinhalten.
-
Bei aktuellen Implementierungen wird eine feste Anzahl von Bits für die Codierung des TDS-Werts in dem Kachel-Daten-Header vorgesehen. Eine feste Anzahl von Bits wird verwendet, da der Kachel-Header in dem Bitstrom vor den Kachelinhaltsdaten erscheint. Da die Kachelinhaltsdaten nicht zu dem Zeitpunkt codiert worden sind, zu dem Raum in dem Bitstrom für den Kachel-Daten-Header zugewiesen ist, ist die Größe der Kachelinhaltsdaten nicht bekannt. Nachdem die Kachelinhaltsdaten codiert und in den Bitstrom geschrieben worden sind, ist ihre Größe dann bekannt und kann in den Raum geschrieben werden, der zuvor für den TDS-Wert in dem Kachel-Daten-Header reserviert war.
-
Da die Anzahl der Bits, die für die Codierung des TDS-Werts in dem Kachel-Daten-Header reserviert sind, festgelegt ist, basiert die für den Kachel-Daten-Header gewählte Länge auf einer größten erwarteten Länge für den TDS-Wert, beispielsweise wenn die Kachelgröße groß ist und die Inhaltsdaten schlecht komprimiert sind, was zu einer großen Größe für die Kachelinhaltsdaten führt. Wenn die Kachelinhaltsdaten klein sind, kann das Ergebnis sein, dass die Anzahl von Bits, die zum Speichern des TDS-Werts in dem Kachel-Daten-Header reserviert sind, viel größer ist als die Anzahl von Bits, die tatsächlich zum Speichern des TDS-Werts verwendet wird.
-
Um die mit der Kachelcodierung verbundenen Overhead-Kosten zu senken und eine bessere Komprimierungsleistung zu erzielen, speichern die Verfahren und Systeme hierin effizient den TDS-Wert für jede Kachel. Dies kann durch adaptives Zuordnen der Anzahl von Bits, die zum Speichern des TDS-Werts für jede Kachel reserviert sind, durch Schätzen eines Raumbedarfs für die Kodierung der Kachel erfolgen. Die Größe des Raumes, der in dem Kachel-Daten-Header für den TDS-Wert reserviert ist, wird als ein erster Wert geschrieben, der hierin als ein erster Größenwert oder ein TDS_Bits-Wert bezeichnet werden kann. Der erste Größenwert beschreibt die Größe des Raumes, der in dem Kachel-Daten-Header für den TDS-Wert reserviert ist. Nachdem die codierten Kachelinhaltsdaten in den Bitstrom geschrieben worden sind, wird der TDS-Wert, der die Größe der codierten Kachelinhaltsdaten beschreibt, in den Bitstromraum geschrieben, der vorher in dem Kachel-Daten-Header für den TDS-Wert reserviert war. Der TDSWert kann hier auch als Headerwert oder als zweiter Größenwert bezeichnet werden. Somit können die hierin beschriebenen Verfahren und Systeme beispielsweise einen ersten Größenwert in einem ersten Wertraum eines Bitstroms, der einen geschätzten Platzbedarf beschreibt, schreiben, wobei ein Headerbereich des Bitstroms mit einer Größe, die dem Größenwert entspricht, das Schreiben des codierten Inhalts in den Bitstrom und das Schreiben eines zweiten Größenwertes, der eine Größe des codierten Inhalts in dem Header-Raum beschreibt.
-
1 ist eine schematische Darstellung eines Videocodierungs- und Decodierungssystems 100, in dem die hierin beschriebenen Systeme und Verfahren implementiert werden können. Eine Sendestation 112 kann zum Beispiel ein Computer mit einer internen Hardwarekonfiguration sein, wie sie in 2 beschrieben wurden. Jedoch sind auch andere geeignete Implementierungen der Sendestation 112 möglich. So kann beispielsweise die Verarbeitung der Sendestation 112 auf mehrere Geräte verteilt sein.
-
Ein Netzwerk 128 kann die Sendestation 112 und eine Empfangsstation 130 zum Kodieren und Dekodieren eines Videostroms verbinden. Insbesondere kann der Videostrom in der Sendestation 112 kodiert werden und der kodierte Videostrom kann in der Empfangsstation 130 dekodiert werden. Das Netzwerk 128 kann zum Beispiel das Internet sein. Das Netzwerk 128 kann auch ein lokales Netzwerk (LAN), ein Weitverkehrsnetz (WAN), ein virtuelles privates Netzwerk (VPN), ein Mobilfunknetz oder jedes andere beliebige Mittel zum Übertragen des Videostroms von der Sendestation 112 zu der in diesem Beispiel genannten Empfangsstation 130 sein.
-
Eine Empfangsstation 130 kann in einem Beispiel ein Computer mit einer internen Hardwarekonfiguration sein, wie sie in 2 beschrieben ist. Es sind jedoch auch andere geeignete Implementierungen der Empfangsstation 130 möglich. So kann beispielsweise die Verarbeitung der Empfangsstation 130 auf mehrere Geräte verteilt sein.
-
Es sind andere Implementierungen des Videocodierungs- und Decodierungssystem 100 möglich. So kann beispielsweise eine Implementierung das Netzwerk 128 weglassen. Bei einer anderen Implementierung kann ein Videostrom kodiert und dann zur Übertragung zu einem späteren Zeitpunkt an die Empfangsstation 130 oder an jedes andere Gerät mit einem Speicher gespeichert werden. Bei einer Implementierung empfängt die Empfangsstation 130 (z. B. über das Netzwerk 128 einen Computerbus und/oder einem Kommunikationspfad) den kodierten Videostrom und speichert den Videostrom für eine spätere Dekodierung. Bei einer exemplarischen Implementierung wird ein Echtzeit-Transportprotokoll (RTP) für die Übertragung des kodierten Videos über das Netzwerk 128 verwendet. Bei einer anderen Implementierung kann ein anderes Transportprotokoll als RTP verwendet werden, z. B. ein Hypertext Transfer Protocol(HTTP)-basiertes Video-Streaming-Protokoll.
-
Wie hierin weiter erläutert wird, sind die Sendestation 112 und die Empfangsstation 130 Beispiele von Vorrichtungen, die in das Videocodierungs- und Decodierungssystem 100 aufgenommen werden können. Weitere Vorrichtungen können beinhaltet sein, wie beispielsweise ein Server, der Übertragungen von der Sendestation 112 zur Empfangsstation 130 weiterleitet.
-
2 ein Blockdiagramm eines Beispiels einer Rechenvorrichtung 200, die eine Sendestation oder eine Empfangsstation realisieren kann. So kann beispielsweise das Computergerät 200 eine oder beide der Sendestationen 112 und der Empfangsstation 130 von 1 implementieren. Das Computergerät 200 kann in Form eines Computersystems mit mehreren Computergeräten oder in Form eines einzigen Computergeräts, beispielsweise einem Mobiltelefon, einem Tablet-Computer, einem Laptop-Computer, einem Notebook-Computer, einem Desktop-Computer und dergleichen beinhaltet sein.
-
Eine CPU 224 in der Rechenvorrichtung 200 kann eine zentrale Verarbeitungseinheit sein. Alternativ kann die CPU 224 jede andere Art von Gerät oder mehrere Geräte sein, die in der Lage sind, Informationen zu manipulieren oder zu verarbeiten, die jetzt bestehen oder in Zukunft entwickelt werden. Obwohl die offenbarten Implementierungen mit einem einzigen Prozessor, wie z. B. der CPU 224, ausgeführt werden können, können Vorteile bei der Geschwindigkeit und Effizienz unter Verwendung von mehr als einem Prozessor erreicht werden.
-
Ein Speicher 226 in der Rechenvorrichtung 200 kann in einer Implementierung eine Festwertspeichereinrichtung (ROM) oder eine Vorrichtung mit wahlfreiem Zugriff (RAM) sein. Jede andere geeignete Speichervorrichtung kann als Speicher 226 verwendet werden. Der Speicher 226 kann Code und Daten 227 beinhalten, auf die durch die CPU 224 unter Verwendung eines Busses 230 zugegriffen wird. Der Speicher 226 kann ferner ein Betriebssystem 232 und Anwendungsprogramme 234 beinhalten, wobei die Anwendungsprogramme 234 mindestens ein Programm beinhalten, das der CPU 224 ermöglicht, die hierin beschriebenen Verfahren durchzuführen. So können beispielsweise die Anwendungsprogramme 234 Anwendungen 1 bis N beinhalten, die ferner eine Anwendung beinhalten, die ein hier beschriebenes Verfahren ausführt. Das Computergerät 200 kann auch einen Sekundärspeicher 236 beinhalten, der beispielsweise eine Speicherkarte sein kann, die einer mobilen Rechenvorrichtung verwendet wird. Da die Videokommunikationskonferenzen eine beträchtliche Menge an Informationen beinhalten können, können sie ganz oder teilweise in dem Sekundärspeicher 236 gespeichert und in den Speicher 226 geladen werden, wie dies für die Verarbeitung erforderlich ist.
-
Das Computergerät 200 kann auch eine oder mehrere Ausgabegeräte beinhalten, wie beispielsweise eine Anzeige 228. Das Display 228 kann in einem Beispiel ein berührungsempfindliches Display sein, das eine Anzeige mit einem berührungsempfindlichen Element kombiniert, das betätigbar ist, um Berührungseingaben zu erfassen. Das Display 228 kann über den Bus 230 mit der CPU 224 gekoppelt sein. Andere Ausgabegeräte, die es einem Benutzer erlauben das Computergerät 200 zu programmieren oder anderweitig zu verwenden, können zusätzlich oder alternativ zum Display 228 vorgesehen sein. Wenn das Ausgabegerät ein Display ist oder beinhaltet, kann das Display auf verschiedene Arten implementiert werden, einschließlich durch eine Flüssigkristallanzeige (LCD), eine Kathodenstrahlröhren-(CRT) oder eine Leuchtdiodenanzeige (LED), wie beispielsweise eine organische LED (OLED) Anzeige.
-
Das Computergerät 200 kann auch in Verbindung mit einem Bildaufnahmegerät 238, beispielsweise einer Kamera, oder jedem anderen Bildaufnahmegerät 238, das gegenwärtig vorhanden ist oder nachfolgend entwickelt wird, welches ein Bild, beispielsweise das Bild eines Benutzer-Computergeräts 200, erfasst. Das Bildaufnahmegerät 238 kann so positioniert sein, dass es auf das Benutzer-Computergerät 200 gerichtet ist. In einem Beispiel können die Position und die optische Achse des Bildaufnahmegeräts 238 so konfiguriert sein, dass das Sichtfeld einen Bereich umfasst, der direkt an das Display 228 angrenzt und von dem das Display 228 sichtbar ist.
-
Das Computergerät 200 kann auch in Verbindung mit einem Audioaufnahmegerät 240, beispielsweise einem Mikrofon, oder jedem anderen Audioaufnahmegerät, das gegenwärtig vorhanden ist oder nachfolgend entwickelt wird, welches Töne nahe der Rechenvorrichtung 200 erfassen kann, beinhaltet sein. Das Audioaufnahmegerät 240 kann so positioniert sein, dass es auf den Benutzer, der das Computergerät 200 betreibt, gerichtet ist und so konfiguriert sein, dass es vom Benutzer erzeugte Töne, beispielsweise Sprach- oder andere Äußerungen, empfängt, während der Benutzer das Computergerät 200 bedient.
-
Obwohl in 2 die CPU 224 und den Speicher 226 des Computergeräts 200 wie in einer einzigen Einheit integriert dargestellt ist, können andere Konfigurationen verwendet werden. Die Operationen der CPU 224 können auf mehrere Maschinen (jede Maschine mit einem oder mehreren der Prozessoren) verteilt werden, die direkt oder über einen lokalen Bereich oder ein anderes Netzwerk gekoppelt werden können. Der Speicher 226 kann über mehrere Maschinen, wie beispielsweise einen netzwerkbasierten Speicher oder Speicher in mehreren Maschinen verteilt werden, die die Operationen des Computergeräts 200 ausführen. Obwohl hier als ein einzelner Bus dargestellt, kann der Bus 230 des Computergeräts 200 aus mehreren Bussen bestehen. Ferner kann der Sekundärspeicher 236 direkt mit den anderen Komponenten des Computergeräts 200 gekoppelt sein oder über ein Netzwerk zugänglich sein und kann eine einzelne integrierte Einheit, wie beispielsweise eine Speicherkarte oder mehrere Einheiten, wie mehrere Speicherkarten, umfassen. Das Computergerät 200 kann somit in einer Vielzahl von Konfigurationen implementiert werden.
-
3 ist ein Diagramm eines Beispiels eines zu kodierenden und anschließend zu dekodierenden Videos 350. Das Video 350 beinhaltet eine Videosequenz 352. Auf der nächsten Ebene beinhaltet die Videosequenz 352 eine Anzahl von benachbarten Einzelbildern 354. Während drei Einzelbilder als benachbarte Einzelbilder 354 dargestellt sind, kann die Videosequenz 352 eine beliebige Anzahl von benachbarten Einzelbildern 354 beinhalten. Die benachbarten Einzelbilder 354 können dann weiter in einzelne Einzelbilder, z. B. ein Einzelbild 356, unterteilt werden. Auf der nächsten Ebene kann das Einzelbild 356 in eine Reihe von Blöcken 358 unterteilt werden, die Daten beinhalten können, die zum Beispiel 16 x 16 Pixel im Einzelbild 356 entsprechen. Die Blöcke können auch in den Ebenen der Daten angeordnet sein. So kann beispielsweise ein entsprechender Block in jeder Ebene Luminanz- und Chrominanzdaten für die Pixel des Blocks beinhalten. Die Blöcke 58 können auch von jeder anderen geeigneten Größe sein, wie etwa 16 x 8 Pixelgruppen oder 8 x 16 Pixelgruppen und können je nach Anwendung weiter in kleinere Blöcke unterteilt werden. Wenn nicht anders angegeben, werden die hierin verwendeten Begriffe Block und Makroblock austauschbar verwendet.
-
4 ein Blockdiagramm eines Kodierers 470 gemäß einem Aspekt dieser Offenbarung. Der Kodierer 470 kann, wie vorstehend beschrieben, in der Sendestation 112 implementiert werden, wie beispielsweise durch Bereitstellen eines Computersoftwareprogramms, das zum Beispiel im Speicher 226 gespeichert ist. Das Computersoftwareprogramm kann Maschinenbefehle beinhalten, die, wenn sie durch einen Prozessor wie beispielsweise die CPU 224, ausgeführt werden, die Sendestation 112 veranlassen, Videodaten zu kodieren, auf die Weise wie in 4 beschrieben. Der Kodierer 470 kann auch als spezielle Hardware implementiert sein, die beispielsweise in der Sendestation 112 beinhaltet ist. Der Kodierer 470 weist die folgenden Schritte auf, um die verschiedenen Funktionen in einem Vorwärtspfad auszuführen (durch die durchgezogenen Verbindungslinien dargestellt), um einen kodierten oder komprimierten Bitstrom 488 unter Verwendung des Videos 350 als Eingabe zu erzeugen: eine Intra/Inter-Vorhersagestufe 472, eine Transformationsstufe 474, eine Quantisierungsstufe 476 und eine Entropiecodierungsstufe 478. Der Kodierer 470 kann auch einen Rekonstruktionspfad (durch gestrichelte Linien dargestellt) beinhalten, um eine Bildfolge für die Kodierung von zukünftigen Blöcken zu rekonstruieren. Wie in 4 dargestellt, weist der Kodierer 470 die folgenden Schritte auf, um die verschiedenen Funktionen im Rekonstruktionspfad auszuführen: eine Dequantisierungsstufe 480, eine inverse Transformationsstufe 482, eine Rekonstruktionsstufe 484 und eine Schleifenfilterstufe 486. Andere strukturelle Variationen des Kodierers 470 können verwendet werden, um das Video 350 zu kodieren.
-
Wenn das Video 350 zur Codierung präsentiert wird, kann jedes Einzelbild 356 innerhalb des Videos 350 in Einheiten der Blöcke 358 verarbeitet werden. In der Intra/Inter-Vorhersagestufe 472 kann jeder Block unter Verwendung entweder einer Intraframe-Vorhersage (Vorhersage unter Verwendung von Blöcken innerhalb eines einzelnen Einzelbildes) oder einer Interframe-Vorhersage Vorhersage unter Verwendung von Blöcken aus einem anderen Einzelbild) kodiert werden. In jedem Fall kann ein Vorhersageblock gebildet werden. Im Falle einer Intra-Vorhersage kann ein Vorhersageblock von Abtastwerten in der aktuellen Bildfolge, die zuvor kodiert und rekonstruiert wurden, gebildet werden. Im Falle einer Inter-Vorhersage kann ein Vorhersageblock von Abtastwerten in einem oder mehreren zuvor konstruierten Referenzeinzelbildern gebildet werden.
-
Als nächstes bezugnehmend auf 4, kann der Vorhersageblock vom aktuellen Block an der Intra/Inter-Vorhersagestufe 472 subtrahiert werden, um einen Restblock (auch Residuum genannt) zu erzeugen. Die Transformationsstufe 474 transformiert den Rest in die Transformationskoeffizienten, zum Beispiel in den Frequenzbereich. Beispiele für blockbasierte Transformationen sind die Karhunen-Loeve-Transformation (KLT), die diskrete Kosinustransformation (DCT) und die Singularwertzerlegungstransformation (SVD). In einem Beispiel transformiert das DCT den Block in den Frequenzbereich. Im Fall von DCT basieren die Transformationskoeffizientenwerten auf der räumlichen Frequenz, wobei der niedrigste Frequenzkoeffizient (DC) am oberen linken Rand der Matrix und dem höchsten Frequenzkoeffizienten am unteren rechten Rand der Matrix liegen.
-
Die Quantisierungseinheit 476 transformiert die Transformationskoeffizienten unter Verwendung eines Quantisiererwerts oder eines Quantisierungspegels in diskrete Quantenwerte, die als quantisierte Transformationskoeffizienten bezeichnet werden. Die quantisierten Transformationskoeffizienten werden dann durch die Entropiecodierungsstufe 478 entropiecodiert. Die entropiecodierten Koeffizienten werden zusammen mit anderen Informationen, die zum Dekodieren des Blocks verwendet werden, die zum Beispiel die Art der verwendeten Vorhersage, Bewegungsvektoren und Quantisiererwerte beinhalten können, an den komprimierten Bitstrom 488 ausgegeben. Der komprimierte Bitstrom 488 kann unter Verwendung verschiedener Techniken, wie beispielsweise der variablen Längenkodierung (VLC) oder der arithmetischen Kodierung, formatiert werden. Der komprimierte Bitstrom 488 kann auch als ein kodierter Videostrom bezeichnet werden, und die und die Begriffe werden hierin austauschbar verwendet.
-
Der Rekonstruktionspfad in 4 (dargestellt durch die punktierten Verbindungslinien) kann verwendet werden, um sicherzustellen, dass sowohl der Kodierer 470 als auch ein Dekodierer 500 (nachfolgend beschrieben) dieselben Referenzeinzelbilder verwenden, um den komprimierten Bitstrom 488 zu dekodieren. Der Rekonstruktionspfad führt Funktionen aus, die ähnlich zu Funktionen sind, die während des Dekodierungsprozesses stattfinden, die nachfolgend ausführlicher erläutert werden, einschließlich der Dequantisierung der quantisierten Transformationskoeffizienten in der Dequantisierungsstufe 480 und der inversen Transformation der dequantisierten Transformationskoeffizienten an der inversen Transformationsstufe 482, um einen derivativen Restblock (auch als Derivatrest bezeichnet) zu erzeugen. In der Rekonstruktionsstufe 484 kann der Vorhersageblock, der bei der Intra/Inter-Vorhersagestufe 472 vorhergesagt wurde, dem Derivatrest hinzugefügt werden, um einen rekonstruierten Block zu erzeugen. Die Schleifenfiltereinheit 486 kann auf den rekonstruierten Block angewendet werden, um Verzerrungen, wie zum Beispiel blockierende Artefakte, zu reduzieren.
-
Andere Variationen des Kodierers 470 können verwendet werden, um den komprimierten Bitstrom 488 zu kodieren. So kann beispielsweise ein nichttransformbasierter Kodierer 470 den Restblock direkt ohne die Transformationseinheit 474 quantisieren. Bei einer anderen Implementierung kann ein Kodierer 470 eine Quantisierungsstufe 476 und eine Dequantisierungsstufe 480 in einer einzigen Stufe kombinieren.
-
5 ein Blockdiagramm eines Dekodierers 500 gemäß einer Implementierung. Der Dekodierer 500 kann in der Empfangsstation 130 implementiert werden, indem beispielsweise ein in dem Speicher 226 gespeichertes Computersoftwareprogramm bereitgestellt wird. Das Computersoftwareprogramm kann Maschinenbefehle beinhalten, die, wenn sie durch einen Prozessor wie beispielsweise die CPU 224, ausgeführt werden, die Empfangsstation 130 veranlassen, Videodaten zu kodieren, auf die Weise wie in 5 beschrieben. Der Dekodierer 500 kann auch in Hardware implementiert sein, die beispielsweise in der Sendestation 112 oder der Empfangsstation 130 beinhaltet ist.
-
Der Dekodierer 500, ähnlich dem Rekonstruktionspfad des Kodierers 470, der vorstehend erläutert wurde, beinhaltet in einem Beispiel die folgenden Schritte, um verschiedene Funktionen auszuführen, um einen Ausgangsvideostrom 516 aus dem komprimierten Bitstrom 488 zu erzeugen: eine Entropiedekodierungsstufe 502, eine Dequantisierungsstufe 504, eine inverse Transformationsstufe 506, eine Intra/Inter-Vorhersagestufe 508, eine Rekonstruktionsstufe 510, die eine Schleifenfilterstufe 512 und/oder eine Deblockierung und eine Einzelbildpufferstufe 514 beinhalten können. Andere strukturelle Variationen des Dekodierers 500 können verwendet werden, um den komprimierten Bitstrom 488 zu dekodieren.
-
Wenn der komprimierte Bitstrom 488 zum Dekodieren dargestellt ist, können die Datenelemente innerhalb des komprimierten Bitstroms 488 durch die EntropieDekodierungsstufe 502 (unter Verwendung beispielsweise der arithmetischen Codierung) dekodiert werden, um einen Satz quantisierter Transformationskoeffizienten zu erzeugen. Die Dequantisierungsstufe 504 dequantisiert die quantisierten Transformationskoeffizienten und die inverse Transformationsstufe 506 invertiert die dequantisierten Transformationskoeffizienten, um einen derivaten Rest zu erzeugen, der mit dem identisch sein kann, der durch die inverse Transformationsstufe 482 in dem Kodierer 470 erzeugt wird. Unter Verwendung von Headerinformationen, die vom komprimierten Bitstrom 488, wie beispielsweise den Modus und Bewegungsvektoren dekodiert wurden, kann der Dekodierer 500 die Intra/Inter-Vorhersagestufe 508 verwenden, um denselben Vorhersageblock zu erzeugen, wie er in dem Kodierer 470 erzeugt wurde, z. B. an der Intra/Inter-Vorhersagestufe 472. An der Rekonstruktionseinheit 510 kann der Vorhersageblock zum Derivatrest hinzugefügt werden, um einen rekonstruierten Block zu erzeugen. Die Filterstufe 512 kann auf den rekonstruierten Block angewendet werden, um blockierende Artefakte zu reduzieren. Die Information kann dann in einem Einzelbildpuffer in der Einzelbildpufferstufe 514 für eine nachfolgende Verwendung bei der Decodierung oder Ausgabe gehalten werden. Eine Nachverarbeitungsstufe kann auf den rekonstruierten Block angewandt werden, um das Bild weiter zu verfeinern. Das Ergebnis des von dem Dekodierer 500 ausgeführten Prozesses wird als Ausgabevideostrom 516 ausgegeben. Der Ausgabevideostrom 516 kann auch als ein dekodierter Videostrom bezeichnet werden, und die Begriffe werden hierin austauschbar verwendet.
-
Andere Variationen des Dekodierers 500 können verwendet werden, um den komprimierten Bitstrom 488 zu dekodieren. So kann beispielsweise der Dekodierer 500 den Ausgangsvideostrom 516 ohne Nachverarbeitung erzeugen.
-
6 zeigt einen Teil eines Bitstroms 600 mit einer festen Länge der Kacheldatenraumkodierung. Ein komprimiertes Bild oder ein Videoeinzelbild besteht aus einer Reihe von Kacheln, und somit beinhaltet der Bitstrom 600 eine Vielzahl von Kacheln, wie beispielsweise eine aktuelle Kachel 602, eine vorherige Kachel 604 und eine nachfolgende Kachel 606. Jede der aktuellen Kacheln 602, der vorherigen Kachel 604 und der anschließenden Kachel 606 beinhaltet einen Kacheldaten-Header 610 und einen Inhaltsraum 620.
-
Um eine Kachel wie die aktuelle Kachel 602, die vorherige Kachel 604 oder die nachfolgende Kachel 606 zu dekodieren, befindet sich der Inhaltsraum 620 für die Kachel zunächst in dem Bitstrom 600. Aus diesem Grund ist der Kachel-Daten-Header 610 vor dem Inhaltsraum 620 im Bitstrom angeordnet. Der Kachel-Daten-Header 610 ist oder beinhaltet einen festen Längen-Headerraum es Bitstroms 600, der reserviert ist, bevor kodierte Kachelinhaltsdaten auf den Bitstrom in einem Inhaltsraum 620 des Bitstroms 600 geschrieben werden. Der Kachel-Daten-Header 610 ist eine feste Länge, da die tatsächliche Größe des Inhaltsraums 620 nur dann bekannt sein kann, nachdem die Kachelinhaltsdaten tatsächlich codiert und in den Inhaltsraum 620 geschrieben worden sind. Der Kachel-Daten-Header 610 wird dem Bitstrom 600 zugeordnet und reserviert, bevor die codierten Kachelinhaltsdaten in den Bitstrom geschrieben werden. Als Beispiel können in dem Bitstrom für den Kachel-Daten-Header vier Bytes reserviert sein. Nachdem die codierten Kachelinhaltsdaten in den Inhaltsraum 620 geschrieben worden sind, wird die Größe des Inhaltsraums 620 (z. B. die Länge des Inhaltsraums 620 in Bits) als der TDS-Wert verwendet, der in dem Kachel-Daten-Header 610 gespeichert ist.
-
7A zeigt einen Teil eines Bitstroms 700 mit adaptiver KachelDatenraumkodierung gemäß einem ersten Beispiel. Ein komprimiertes Bild oder Videobild besteht aus einer Reihe von Kacheln. Somit beinhaltet der Bitstrom 700 einen ersten Datenraum in Form eines Rahmenpegel-(oder Bildpegel-) Datenraums, wie beispielsweise eines Einzelbild-Headers 701 und einer Vielzahl von Kacheln, wie beispielsweise einer aktuellen Kachel 702, einer vorherigen Kachel 704 und einer nachfolgenden Kachel 706. Der Einzelbild-Header 701 kann Daten beinhalten, die für einige oder alle der Kacheln gelten. Jede der aktuellen Kacheln 702, der vorherigen Kachel 704 und die nachfolgende Kachel 706 beinhaltet einen Kachel-Daten-Header 710, der nur Daten beinhaltet, die nur für die jeweilige Kachel relevant sind, und einen Inhaltsraum 720. der die Bildinformation für die Kachel beinhaltet.
-
Um eine Kachel wie die aktuelle Kachel 702, die vorherige Kachel 704 oder die nachfolgende Kachel 706 zu dekodieren, befindet sich der Inhaltsraum 720 für die Kachel zunächst in dem Bitstrom 700. Aus diesem Grund sind der Einzelbild-Header 701 und der Kachel-Daten-Header 710 vor dem Inhaltsraum 720 im Bitstrom angeordnet.
-
Ein erster Wert, der als ein erster Größenwert oder ein TDS_Bits-Wert bezeichnet werden kann, wird unkomprimiert oder komprimiert unter Verwendung einer Entropiecodierung codiert und in den ersten Wertraum des Bitstroms geschrieben. In diesem Beispiel befindet sich der erste Wertraum innerhalb des raumbezogenen Datenraums, nämlich in dem Einzelbild-Header 701, der im Bitstrom vor den Kacheldaten angeordnet ist. In dem speziellen Fall, dass für jede Kachel in einem Bild oder einem Videobild ein fester erster Wert verwendet wird, kann der erste Wert nur einmal für das gesamte Bild oder das gesamte Einzelbild in den ersten Wertraum des Bitstroms geschrieben werden. Ein zweiter Wert, der als zweiter Größenwert oder als TDS-Wert bezeichnet werden kann, wird in einen zweiten Werteraum geschrieben. In diesem Beispiel ist der zweite Wertraum ganz oder teilweise der Kachel-Daten-Header 710.
-
Der erste Wert beschreibt die Anzahl der vom zweiten Werteraum verwendeten Bits. Wenn zum Beispiel der erste Wert gleich sechzehn ist (oder den Wert 16 darstellt, indem er ein Symbol ist, das sechzehn darstellt), bedeutet dies, dass der zweite Wertraum sechzehn Bits lang ist. Bei dieser Implementierung wird der erste Wert auf der Einzelbildebene gespeichert und gilt für alle Einzelbilder was bedeutet, dass die Anzahl der Bits, die für den zweiten Wertraum jeder Kachel auf der Kachel-Ebene verwendet werden, dieselbe ist.
-
Der zweite Wert, der in dem zweiten Wertebereich gespeichert ist, wie beispielsweise in dem Kachel-Daten-Header 710, beschreibt die Anzahl von Bits, die von dem Inhaltsraum 720 für die jeweilige Kachel verwendet wird. Wenn zum Beispiel der zweite Wert, der in dem Kachel-Daten-Header 710 gespeichert ist, gleich 65.535 ist (oder den Wert 65.535 darstellt, beispielsweise durch ein Symbol, das interpretiert werden kann, um 65.355 zu deuten), welche in einer Bitlänge von sechzehn Bits ausgedrückt werden kann, bedeutet dies, dass der Inhaltsraum 720 65535 Bits lang ist. Wie hier erläutert wird, kann die exakte erforderliche Länge des Kachel-Daten-Headers 710 zum Zeitpunkt des Zuordnen des Kachel-Daten-Headers 710 nicht bekannt sein. Stattdessen werden Bits in dem Bitstrom 700 auf Basis eines geschätzten Raumbedarfs zum Codieren der Kachel reserviert, und der zweite Wert wird in den Kachel-Daten-Header 710 geschrieben, nachdem die kodierten Kachelinhaltdaten in den Inhaltsraum 720 geschrieben worden sind.
-
Der erste Wert und der zweite Wert werden dazu verwendet, den Inhaltsraum 720 zu lokalisieren, wenn der Bitstrom decodiert wird. Beim Decodieren einer Kachel, wie der aktuellen Kachel 702, wird der erste Wert aus dem Bitstrom gelesen, bevor die aktuelle Kachel 702 decodiert wird. Der erste Wert informiert den Decodierer über die Länge des Kachel-Daten-Headers 710, der dem Decoder erlaubt, den zweiten Wert aus dem Kachel-Daten-Headers 710 zu lesen. Der zweite Wert informiert den Decodierer über die Länge des Inhaltsraums 720, der dem Decoder erlaubt, den codierten Inhalt aus dem Inhaltsraum 720 zu lesen.
-
7B zeigt einen Teil eines Bitstroms 750 mit adaptiver KachelDatenraumkodierung gemäß einem zweiten Beispiel. Der Bitstrom 700 weist mehrere Kacheln auf, wie beispielsweise eine aktuelle Kachel 752, eine vorherige Kachel 754, und eine nachfolgende Kachel 756. Jede der aktuellen Kacheln 752, der vorherigen Kachel 754 und die nachfolgende Kachel 756 beinhaltet einen Kachel-Daten-Header 760, der nur Daten beinhaltet, die nur für die jeweilige Kachel relevant sind, und einen Inhaltsraum 770, der die Bildinformation für die Kachel beinhaltet.
-
Um eine Kachel wie die aktuelle Kachel 752, die vorherige Kachel 754 oder die nachfolgende Kachel 756 zu dekodieren, befindet sich der Inhaltsraum 770 für die Kachel zunächst in dem Bitstrom 750. Aus diesem Grund ist der Kachel-Daten-Header 760 vor dem Inhaltsraum 770 im Bitstrom angeordnet.
-
In diesem Beispiel befinden sich sowohl der erste Wertraum als auch der zweite Wertraum in dem Kachel-Daten-Header 760, und der erste Wert, d. h. er erste Größenwert oder der TDS_Bits-Wert, wird separat für jede Kachel gespeichert und kann auf einer Kachel für Kachel-Basis ermittelt werden. Der erste Wert für jede Kachel wird unkomprimiert oder komprimiert unter Verwendung einer Entropiecodierung codiert und in den ersten Wertraum des Bitstroms geschrieben, wie beispielsweise in einen ersten Headerraum 762 der aktuellen Kachel 752. In diesem Beispiel befindet sich der erste Wertraum innerhalb des Kachelebenen-Datenraums. Der zweite Wert, d. h. der zweite Größenwert oder der TDS-Wert, wird in den zweiten Werteraum geschrieben, der in diesem Beispiel ein zweiter Headerraum 764 des Kachel-Daten-Header 760 ist.
-
8 ist ein Blockdiagramm, das ein System 800 für eine adaptive KachelDatenraumkodierung zeigt. In dem System 800 wird ein Eingangssignal 810 empfangen und als Eingang an einen Codierer 820 und einen Schätzer 830 geliefert. Das Eingangssignal 810 kann beispielsweise ein Videosignal oder ein Standbildsignal sein. Die Beschreibung hierin wird unter Bezugnahme auf ein Eingangssignal in Form eines Videosignals durchgeführt, sofern nicht anders angegeben.
-
Der Codierer 820 ist betreibbar, um Teile des Eingangssignals 810 zu komprimieren und eine komprimierte Version des Inhalts aus dem Eingangssignal 810 auszugeben, das in einen Bitstrom geschrieben werden kann, wie beispielsweise in den Bitstrom 700. Der Codierer 820 kann in der in Bezug auf den Codierer 470 beschriebenen Art und Weise implementiert werden.
-
Der Schätzer 830 ist betreibbar, um einen Raumbedarf zum Codieren eines Teils des Eingangssignals 810 abzuschätzen. Der Schätzer 830 kann zuvor gespeicherte Information, wie beispielsweise die Kodierungsstatistiken 840, verwenden, um die Raumanforderung zum Kodieren des Teils des Eingangssignals zu schätzen. Die Kodierungsstatistiken 840 können beispielsweise statistische Daten sein, die einen früheren Inhalt aus einem Videosignal, wie beispielsweise dem Eingangssignal, beschreiben. Die Informationen können dem Schätzer 830 über den Codierer 820 zur Verfügung gestellt werden, der als die Kodierungsstatistiken 840 hinzugefügt und gespeichert werden soll.
-
Bei Implementierungen, in denen der Anteil des Eingangssignals 810 eine Kachel eines Videosignals ist, kann der geschätzte Raumbedarf teilweise auf einer Kachelgröße des aktuellen Teils des Eingangssignals 810 (beispielsweise die Kachelgrößen im aktuellen Einzelbild oder der Kachelgröße der nächsten zu codierenden Kachel) basieren. Der geschätzte Raumbedarf nimmt mit zunehmender Kachelgröße zu.
-
Der geschätzte Raumbedarf kann teilweise basierend auf einer Komplexität des aktuellen Teils des Eingangssignals 810 geschätzt werden. Die Komplexität kann als Grundlage für den geschätzten Raumbedarf verwendet werden, da Bilder mit niedriger Komplexität dazu neigen, in einem viel größeren Ausmaß komprimiert zu werden als Bilder mit hoher Komplexität. Die Komplexität kann für einen Teil eines Bildes (z. B. einen Teil eines Videobildes), eines einzelnen Bildes (z. B. eines Videobildes) oder mehreren Bildern (z. B. eine Folge von Videobildern) analysiert werden. Ein einzelnes Maß an Videokomplexität oder zwei oder mehr Messungen der Videokomplexität können kombiniert werden. Die Maßnahmen der Videokomplexität kann beispielsweise durch eine numerische Bewertung ausgedrückt werden und (falls erforderlich) als durchschnittlicher oder gewichteter Durchschnitt kombiniert werden. Bei einigen Implementierungen werden Maßnahmen der Videokomplexität, wie numerische Bewertungen, als Grundlage für die Klassifizierung des Videos in eine Kategorie (z. B. niedrige, mittlere oder hohe Komplexität) durch Schwellwertbildung oder ähnliche Maßnahmen verwendet. Somit kann die Komplexität für einen Teil des Eingangssignals 810, wie beispielsweise ein Videobild, als eine ausgewählte Komplexitäts-Klassifikation aus einer Vielzahl von vorbestimmten KomplexitätsKlassifikationen ausgedrückt werden.
-
Zahlreiche bekannte Maßnahmen der Komplexität können verwendet werden. Als ein Beispiel kann der Bewegungsbetrag in einer Reihe von Videoeinzelbildern in Form von einem oder beiden der Teilbereiche der Videoeinzelbilder, in denen die Bewegung vorhanden ist, und die Geschwindigkeit der Bewegung (z. B. die Bewegungslänge der Vektoren) gemessen werden. Somit kann die Komplexität für das Eingangssignal 810, wie z. B. ein Videoeinzelbild, teilweise basierend auf einem Bewegungsbetrag in einer vorherigen Folge von Videoeinzelbildern aus dem Eingangssignal oder als ein Bewegungsbetrag in dem Videoeinzelbild relativ zu vorherigen Videoeinzelbildern in der Sequenz ermittelt werden. Als weiteres Beispiel kann die Menge an Details in einem Bild oder in einer Reihe von Bildern gemessen werden, wobei niedrigere Detailbilder weniger Komplexität und höhere Detailbilder mehr Komplexität entsprechen.
-
Die zur Bestimmung der Komplexität (z. B. Bewegung und/oder Detail) verwendeten Daten können aus den Kodierungsstatistiken 840 erhalten werden. Die Kodierungsstatistiken 840, die nach dem Codieren eines früheren Inhalts aus dem Eingangssignal 810 vorher gespeichert worden sein können. Somit können die Kodierungsstatistiken 840 statistische Daten beinhalten, die einen früheren Inhalt aus dem Eingangssignal 810 beschreiben, das vor dem Abschätzen eines Platzbedarfs zum Codieren der Kachel des Videoeinzelbildes gespeichert wurde.
-
Die Kodierungsstatistiken 840 können beispielsweise Daten beinhalten, die die Anzahl von Bits beschreiben, die zum Codieren von Abschnitten des Eingangssignals 810 für mehrere Komplexitätsniveaus erforderlich sind. Bei einer Implementierung sind die in den Kodierungsstatistiken gespeicherten Daten unabhängig von der Größe des Teils des zu codierenden Eingangssignals. Die Kodierungsstatistiken 840 in diesem Beispiel können Statistiken beinhalten, die basierend auf der Größe des Teils des zu codierenden Eingangssignals skaliert werden können, um die Anzahl von Bits zu ermitteln, die erforderlich sind, um das Eingangssignal zu codieren. So können zum Beispiel die Kodierungsstatistiken 840 die Anzahl von Bits ausdrücken, die erforderlich sind, um einen Teil eines Eingangssignals 810 mit mittlerer Komplexität auf einer Basis pro Pixel auszudrücken. Somit wird, wenn der Teil des Eingangssignals 810 eine Kachel von einem Videoeinzelbild ist, der Schätzer die Komplexität der Kachel die Größe der Kachel in Pixeln und die Anzahl von Bits, die zum Codieren der Kachel erforderlich sind ermitteln. basierend auf den Kodierungsstatistiken 840, die die Kodierung von vorherigen Kacheln derselben Komplexität beschreiben, die durch die Größe der Kachel in Pixeln skaliert ist. Bei einer alternativen Implementierung drücken die Kodierungsstatistiken 840 die Anzahl von Bits aus, die erforderlich ist, um einen Teil des Eingangssignals 810 einer bestimmten Größe (wie z. B. einer Kachelgröße) für einen gegebenen Komplexitätsgrad zu codieren.
-
Bei einer Implementierung, wenn der Codierer 820 einen Teil des Eingangssignals 810 wie eine Kachel kodiert, meldet er die Anzahl der Bits, die bei der Kodierung für den Schätzer 830 verwendet werden und dieser Wert wird in den Kodierungsstatistiken zur Verwendung bei der Schätzung der Anzahl von Bits gespeichert, die zum Codieren von weiteren Teilen gleicher Größe des Eingangssignals 810 erforderlich sind.
-
Die Ausgabe des Schätzers 830 ist der geschätzte Raumbedarf, der eine Schätzung der Anzahl von Bits ist, die erforderlich ist, um den Teil des Eingangssignals 810 zu codieren, der gerade codiert wird.
-
Das System 800 beinhaltet einen Bitstromschreiber 850. Der Bitstromschreiber 850 empfängt eine komprimierte Version des Inhalts aus dem Eingangssignal 810 von dem Bitstromschreiber 850. Der Bitstromschreiber 850 empfängt den geschätzten Raumbedarf vom Schätzer 830. Der Bitstromschreiber 850 verwendet die komprimierte Version des Inhalts und den geschätzten Raumbedarf zum Schreiben des Bitstroms 700. Der Bitstromschreiber 850 kann auch Informationen an den Schätzer 830 zurückgeben, um als Teil der Kodierungsstatistiken 840 gespeichert zu werden.
-
9 ist ein Flussdiagramm, das einen Prozess 900 zur adaptiven KachelDatenraumkodierung gemäß einem ersten Beispiel zeigt. Das Verfahren 900 wird mit Bezug auf den Bitstrom 700 erläutert, kann jedoch auf den Bitstrom 750 angewendet werden. Der Prozess 900 kann, wie in Bezug auf das System 800 beschrieben, implementiert sein, beispielsweise in Form eines Softwareprogramms, das durch Rechenvorrichtungen, wie beispielsweise die Sendestation 112 oder die Empfangsstation 130, ausgeführt wird. Das Softwareprogramm kann maschinenlesbare Anweisungen beinhalten, die in einem Speicher, wie beispielsweise dem Speicher 226 gespeichert sind, der, wenn er von einem Prozessor wie der CPU 224 ausgeführt wird, das Computergerät veranlasst, den Prozess 900 auszuführen. Der Prozess 900 kann auch unter Verwendung von Hardware implementiert werden. Wie vorstehend erläutert, können einige Computergeräte mehrere Speicher und mehrere Prozessoren aufweisen und die Schritte des Prozesses 900 können in diesen Fällen unter Verwendung verschiedener Prozessoren und Speicher verteilt werden. Die Verwendung der Begriffe „Prozessor“ und „Speicher“ in der Singularform umfassen Computergeräte, die nur einen Prozessor oder einen Speicher aufweisen sowie Vorrichtungen mit mehreren Prozessoren oder Speichern, die jeweils in der Ausführung einiger, aber nicht notwendigerweise aller genannten Schritte verwendet werden können.
-
Die Operation 910 beinhaltet das Erhalten der Kodierungsstatistiken 840, die die Kodierung eines vorherigen Inhalts aus dem Eingangssignal 810 beschreiben. Das Erhalten der Codierungsstatistiken 840 kann beispielsweise durch Messen der Codierungsstatistiken 840, Zugreifen auf gespeicherte Kopien der Codierungsstatistiken 840 oder Empfangen einer Übertragung, die die Codierungsstatistiken 840 beinhaltet, durchgeführt werden. Das Erhalten von Kodierungsstatistiken kann wie in Bezug auf den beschriebenen Schätzer 830 und die Kodierungsstatistik 840 durchgeführt werden.
-
Bei Operation 920 werden die Kodierungsstatistiken verwendet, um den geschätzten Raumbedarf zu ermitteln, wie in Bezug auf den Schätzer 830 beschrieben.
-
Bei 930 schreibt der Bitstromschreiber 850 den ersten Wert in den ersten Wertraum und definiert den zweiten Wertraum, wie beispielsweise den Kachel-Daten-Header 710. Der erste Wert (TDS_Bits) beschreibt die Größe des Headerraums und der erste Wert basiert auf dem geschätzten Raumbedarf. Der Bitstromschreiber 850 verwendet beispielsweise die geschätzte Raumanforderung um zu ermitteln, wie viele Bits benötigt werden, um die Länge des Inhaltsraums 720 in den zweiten Wertraum zu schreiben. Dies kann durch Multiplizieren des geschätzten Raumbedarfs mit einem Faktor k (beispielsweise 1,3) zur Berücksichtigung der Variabilität und Zählen der Anzahl von Bits, die erforderlich ist, um diesen Wert als Binärzahl auszudrücken, durchgeführt werden. Der resultierende Wert ist die Anzahl der Bits, die für den Header-Speicher reserviert werden, und dieser Wert wird im ersten Wertebereich des Bitstroms als der erste Wert (TDS_Bits) gespeichert. Der erste Wert kann als ein tatsächlicher Wert oder ein repräsentativer Wert gespeichert werden, wie beispielsweise ein Deltawert, der mit einem Referenzwert kombiniert werden kann, wie beispielsweise einem Mittelwert für ein Einzelbild oder eine Reihe von Einzelbildern. Nach dem Schreiben des ersten Wertes in den Bitstrom im ersten Werteraum können die Kacheln dann kodiert werden. Zu Beginn jeder Kachel schreitet der Bitstromschreiber um eine Anzahl von Bits vor, die gleich dem Wert des ersten Wertes (TDS_Bits) sind. um den zweiten Wertraum, wie beispielsweise den Kacheldaten-Header 710 im Bitstrom 700 zum Schreiben der Länge des Inhaltsraums 720 als zweiten Wert (der TDS-Wert) zu einem späteren Zeitpunkt zu reservieren.
-
Bei Operation 940 empfängt der Bitstromschreiber 850 den codierten Inhalt von dem Codierer 820 und schreibt den codierten Inhalt zum Inhaltsraum 720.
-
Bei Operation 950 wird eine Ermittlung durchgeführt, ob die Länge des zweiten Speicherraums, der zuvor für die Speicherung des zweiten Wertes reserviert war, ausreichend ist. Bei einer Implementierung wird die Anzahl von Bits, die zum Schreiben des kodierten Inhalts in den Inhaltsraum 720 verwendet wird (d. h. die Länge des Inhaltsraums 720), in einer Form ausgedrückt, die zur Speicherung als der zweite Wert geeignet ist (z. B. ein Delta-Wert, der als Binärzahl ausgedrückt wird). Dieser Wert wird mit der Anzahl der Bits verglichen, die für den zweiten Werteraum reserviert waren. Wenn die Anzahl der Bits, die für den zweiten Wertraum reserviert sind, nicht ausreicht, um die Länge des Inhaltsraums 720 zu speichern, kehrt der Prozess zur Operation 930 zurück, wobei die tatsächliche Länge des kodierten Inhalts anstelle des geschätzten Raumbedarfs verwendet wird. Wenn also ein Raumbedarf für den zweiten Wert zum Schreiben des zweiten Wertes größer als die Größe des zweiten Wertraums, wird der zweite Wertraum neu definiert, sodass er eine korrigierte Größe auf der Grundlage des Raumbedarfs aufweist, der erste Wert wird umgeschrieben, um die korrigierte Größe zu beschreiben, und der codierte Inhalt wird in den Bitstrom umgeschrieben.
-
Wenn bei der Operation 950 die Anzahl der Bits, die für den zweiten Werteraum reserviert sind, ausreicht, um den zweiten Wert zu beschränken, der die Länge des Inhaltsraums 720 beschreibt, geht der Prozess zu Operation 960 über. Bei Operation 960 wechselt der Bitstromschreiber 850 die Position, um zum Ausgangspunkt des zweiten Wertraums zurückzukehren, und schreibt den zweiten Wert, der die Länge des Inhaltsraums 720 in dem zweiten Wertraum beschreibt, um zu ermöglichen, dass der Inhaltsraum 720 lokalisiert wird und auf den Bitstrom 700 zugegriffen wird. Der zweite Wert kann als ein tatsächlicher Wert oder ein repräsentativer Wert gespeichert werden, wie beispielsweise ein Deltawert, der mit einem Referenzwert kombiniert werden kann, wie beispielsweise einem Mittelwert für ein Einzelbild oder eine Reihe von Einzelbildern. Bei einigen Implementierungen ist der zweite Wert unkomprimiert. Bei anderen Implementierungen wird der zweite Wert komprimiert, beispielsweise durch Entropiecodierung. Der Prozess endet dann mit Bezug auf den aktuellen Teil des Eingangssignals 810 und kann für andere Teile des Eingangssignals 810 wiederholt werden.
-
10 ist ein Flussdiagramm, das einen Prozess 1000 zur adaptiven KachelDatenraumkodierung gemäß einem zweiten Beispiel zeigt. Das Verfahren 900 wird mit Bezug auf den Bitstrom 700 erläutert, kann jedoch auf den Bitstrom 750 angewendet werden.
-
Während das Verfahren 900 für Echtzeitanwendungen gut geeignet ist, kann das Verfahren 1000 bessere Ergebnisse für Nicht-Echtzeitanwendungen erzeugen. Anstatt einen geschätzten Raumbedarf wie im Prozess 900 zu verwenden, führt der Prozess 1000 zwei Codieroperationen aus, um zuerst die Länge des codierten Inhalts zu bestimmen und anschließend den Kachel-Header und den codierten Inhalt an den Kachel-Daten-Header 710 und den Inhaltsraum zu schreiben 720.
-
Der Prozess 1000 kann, wie in Bezug auf das System 800 beschrieben, implementiert sein, beispielsweise in Form eines Softwareprogramms, das durch Rechenvorrichtungen, wie beispielsweise die Sendestation 112 oder die Empfangsstation 130, ausgeführt wird. Das Softwareprogramm kann maschinenlesbare Anweisungen beinhalten, die in einem Speicher, wie beispielsweise dem Speicher 226 gespeichert sind, der, wenn er von einem Prozessor wie der CPU 224 ausgeführt wird, das Computergerät veranlasst, den Prozess 1000 auszuführen. Der Prozess 1000 kann auch unter Verwendung von Hardware implementiert werden. Wie vorstehend erläutert, können einige Computergeräte mehrere Speicher und mehrere Prozessoren aufweisen und die Schritte des Prozesses 1000 können in diesen Fällen unter Verwendung verschiedener Prozessoren und Speicher verteilt werden. Die Verwendung der Begriffe „Prozessor“ und „Speicher“ in der Singularform umfassen Computergeräte, die nur einen Prozessor oder einen Speicher aufweisen sowie Vorrichtungen mit mehreren Prozessoren oder Speichern, die jeweils in der Ausführung einiger, aber nicht notwendigerweise aller genannten Schritte verwendet werden können.
-
Bei Operation 1010 wird eine erste Codieroperation ausgeführt, wie in Bezug auf den Codierer 820 beschrieben, um einen codierten Inhalt von einem Abschnitt des Eingangssignals 810 zu definieren. Bei Operation 1020 wird die Länge des codierten Inhalts gespeichert.
-
Bei Operation 1030 ist der Kachel-Daten-Header 710 definiert. Dies beinhaltet beispielsweise die Ermittlung der Anzahl von Bits, die erforderlich sind, um die Länge des codierten Inhalts zu codieren und diesen Wert als einen ersten Wert in den Bitstrom zu schreiben. Die Länge des codierten Inhalts wird dann als der zweite Wert in den Kachel-Daten-Header 710 geschrieben. Bei dieser Implementierung stellt der erste Wert die tatsächliche Länge des Kachel-Daten-Header 710, der erforderlich ist, dar, um den zweiten Wert zu speichern, und ist keine Schätzung. Dementsprechend gibt es keine unnötigen Bits, die dem Kachel-Daten-Header 710 zugeordnet sind, wie dies auftreten kann, wenn ein geschätzter Wert verwendet wird.
-
Bei Operation 1040 wird ein zweiter Codiervorgang durchgeführt, wie in Bezug auf den Codierer 820 beschrieben, und der resultierende codierte Inhalt wird in den Bitstrom 700 geschrieben, wie in Bezug auf den Bitstromschreiber 850 beschrieben.
-
Die vorstehend beschriebenen Aspekte der Kodierung und Dekodierung veranschaulichen einige Beispiele von Kodier- und Dekodierungstechniken. Es versteht sich jedoch, dass die Kodierung und Dekodierung, wie diese in den Ansprüchen verwendet werden, Komprimierung, Dekomprimierung, Transformation oder jede andere Verarbeitung oder Änderung von Daten bedeuten kann.
-
Das Wort „Beispiel“ oder „Aspekt“ wie hierin verwendet, dient als ein Beispiel, eine Instanz oder eine Veranschaulichung. Jeder Aspekt oder Design hierin als „Beispiel“ oder „Aspekt“ beschrieben, ist nicht notwendigerweise als bevorzugt oder vorteilhaft gegenüber anderen Aspekten oder Designs auszulegen. Vielmehr soll die Verwendung des Wortes „Beispiel“ oder „Aspekt“ Konzepte konkret darstellen. Wie in dieser Anmeldung verwendet, ist der Begriff „oder“ eher als ein integratives „oder“ als ein exklusives „oder“ zu verstehen. Das heißt, sofern nicht anders angegeben oder klar aus dem Kontext hervorgeht, „beinhaltet X A oder B“ und ist als eine der natürlichen inklusiven Permutationen zu verstehen. Das heißt, wenn X A beinhaltet; beinhaltet X B; oder wenn X sowohl A als auch B beinhaltet, beinhaltet „X A oder B“ unter Bezug auf ein beliebiges vorstehendes Beispiel. Zusätzlich sollten die in dieser Anmeldung und den anhängenden Ansprüchen verwendeten Artikel „ein“ und „eine“ im Allgemeinen als „ein“ oder „eine“ verstanden werden, sofern nichts Anderes angegeben oder klar aus dem Zusammenhang zu einer singulären Form abgeleitet werden kann. Darüber hinaus soll die Verwendung des Begriffs „eine Implementierung“ oder „eine Implementierung“ nicht bestimmungsgemäß als dieselbe Ausführungsform oder Implementierung angesehen werden, es sei denn, dies ist ausdrücklich so beschrieben.
-
Implementationen der Sendestation 112 und/oder der Empfangsstation 130 (und die Algorithmen, Verfahren, Anweisungen usw. die darauf gespeichert sind und/oder hierdurch ausgeführt werden, einschließlich derer durch den Kodierer 470 und den Dekodierer 500) können in Hardware, Software oder einer beliebigen Kombination davon realisiert werden. Die Hardware kann beispielsweise Computer, Intellectual Property (IP) Kerne, anwendungsspezifische integrierte Schaltkreise (ASICs), programmierbare Logikarrays, optische Prozessoren, programmierbare Logiksteuerungen, Mikrocodes, Mikrocontroller, Server, Mikroprozessoren und digitale Signalprozessoren oder jede andere geeignete Schaltung beinhalten. In den Ansprüchen sollte der Begriff „Prozessor“ als jede der vorgenannten Hardware entweder einzeln oder in Kombination verstanden werden. Die Begriffe „Signal“ und „Daten“ werden austauschbar verwendet. Ferner müssen Teile der Sendestation 112 und der Empfangsstation 130 nicht notwendigerweise in der gleichen Weise implementiert werden.
-
Ferner können in einem Aspekt die Sendestation 112 oder die Empfangsstation 130 unter Verwendung eines Allzweckcomputers oder eines Allzweck-Prozessors mit einem Computerprogramm implementiert werden, das, wenn es ausgeführt wird, jedes der hierin beschriebenen Verfahren, Algorithmen und/oder Anweisungen ausführt. Zusätzlich oder alternativ kann beispielsweise ein spezieller Computer/Prozessor verwendet werden, der spezialisierte Hardware zur Durchführung eines der hierin beschriebenen Verfahren, Algorithmen oder Anweisungen beinhalten kann.
-
Die Sendestation 112 und die Empfangsstation 130 können beispielsweise auf Computer beliebigen Typs implementiert sein. So kann beispielsweise die Sendestation 112 ein Personalcomputer sein, der eine Videoerfassungsvorrichtung zum Erhalten des zu codierenden Rohvideos beinhaltet und die Empfangsstation 130 kann Personalcomputer sein, der eine Videoanzeigevorrichtung zum Anzeigen von decodiertem Video aufweist. Alternativ kann die Sendestation 112 auf einem Server als eine Sendestation implementiert sein, und die Empfangsstation 130 kann auf einem vom Server getrennten Gerät, wie beispielsweise einem Handkommunikationsgerät implementiert sein. In diesem Fall kann die Sendestation 112 Inhalte unter Verwendung eine Kodierers 470 in ein kodiertes Videosignal kodieren und das kodierte Videosignal an das Kommunikationsgerät übertragen. Im Gegenzug kann die Kommunikationsvorrichtung dann das kodierte Videosignal unter Verwendung des Dekodierers 500 dekodieren. Alternativ kann die Kommunikationsvorrichtung einen lokal auf der Kommunikationsvorrichtung gespeicherten Inhalt dekodieren, beispielsweise einen Inhalt, der nicht von der Sendestation 112 übertragen wurde. Andere geeignete Implementierungsschemata für die Sendestation 112 und die Empfangsstation 130 sind verfügbar. Als ein Beispiel kann die Empfangsstation 130 ein im Allgemeinen stationärer Personalcomputer und nicht eine tragbare Kommunikationsvorrichtung sein. Als ein weiteres Beispiel kann eine Vorrichtung, die den Codierer 470 beinhaltet, auch den Decodierer 500 beinhalten.
-
Ferner können alle oder ein Teil der Implementierungen der vorliegenden Erfindung die Form eines Computerprogrammprodukts annehmen, das zum Beispiel von einem greifbaren computerverwendbaren oder computerlesbaren Medium zugänglich ist. Ein computerverwendbares oder computerlesbares Medium kann jedes Gerät sein, das zum Beispiel das Programm zur Verwendung durch oder in Verbindung mit einem beliebigen Prozessor fassbar beinhalten, speichern, kommunizieren oder transportieren kann. Das Medium kann beispielsweise ein elektronisches, magnetisches, optisches, elektromagnetisches oder eine Halbleitervorrichtung sein. Es sind auch andere geeignete Medien verfügbar.
-
Die vorstehend beschriebenen Ausführungsformen, Implementierungen und Aspekte wurden beschrieben, um ein leichtes Verständnis der vorliegenden Erfindung zu ermöglichen und die vorliegende Erfindung nicht zu beschränken. Im Gegenteil soll die Erfindung verschiedene Modifikationen und äquivalente Anordnungen beinhalten, die in den Schutzumfang der beigefügten Ansprüche fallen, wobei dem Umfang die breiteste Auslegung zugestanden werden soll, um alle Modifikationen und äquivalenten Strukturen, die nach dem Gesetz zulässig sind, zu umfassen.
-
Weitere Ausführungsformen sind in den folgenden Klauseln aufgeführt:
- 1. Verfahren zum Codieren eines Videosignals in einen Bitstrom, das Videoeinzelbilder umfasst, wobei das Verfahren Folgendes umfasst: das Schätzen eines Raumbedarfs zum Codieren einer Kachel eines Videoeinzelbildes der Videoeinzelbilder; das Schreiben eines ersten Wertes in einen ersten Wertraum des Bitstroms, wobei der erste Wert eine Größe eines zweiten Wertraums beschreibt; das Definieren des zweiten Wertraumes in dem Bitstrom, wobei die Größe des zweiten Werteraums auf einem geschätzten Raumbedarf basiert das Schreiben eines codierten Inhalts in einen Inhaltsraum des Bitstroms: das Ermitteln einer Größe des Inhaltsraumes, der dem Schreiben von codiertem Inhalt in den Inhaltsraum folgt; und das Schreiben eines zweiten Wertes in den zweiten Wertraum des Bitstroms, wobei der zweite Wert eine Größe des Inhaltsraumes beschreibt.
- 2. Verfahren nach Klausel 1, wobei der Raumbedarf basierend auf einem Teil auf einer Kachelgröße für die Kachel des Videoeinzelbildes geschätzt wird.
- 3. Verfahren nach Klausel 1, wobei der Raumbedarf teilweise basierend auf einer Komplexität für das Videoeinzelbild geschätzt wird.
- 4. Verfahren nach Klausel 3, des Weiteren umfassend: das Ermitteln der Komplexität für das Videoeinzelbild.
- 5. Verfahren nach Klausel 4, wobei die Komplexität für das Videoeinzelbild basierend auf einem Teil der Bewegung in dem Videoeinzelbild ermittelt wird.
- 6. Verfahren nach Klausel 4, wobei die Komplexität für das Videoeinzelbild einer ausgewählten Komplexitätsklassifikation aus einer Vielzahl von vorbestimmten Komplexitätsklassifikationen entspricht.
- 7. Verfahren nach einem der Klauseln 1-6, des Weiteren umfassend: das Speichern von statistischen Daten vor dem Abschätzen des Raumbedarfs zum Codieren der Kachel des Videoeinzelbildes, die einen vorherigen Inhalt aus dem Videosignal beschreiben.
- 8, Verfahren nach einem der Klauseln 1-7, des Weiteren umfassend: das Ermitteln, ob ein Raumbedarf zum Schreiben des zweiten Wertes größer als die Größe des zweiten Wertraums ist, bevor der zweite Wert in den zweiten Wertraum des Bitstroms geschrieben wird, wobei, wenn der Raumbedarf zum Schreiben des zweiten Wertes größer als die Größe des zweiten Wertraums ist, der zweite Wertraum so neu definiert wird, dass der zweite Wertraum eine korrigierte Größe auf der Grundlage des Raumbedarfs aufweist, wird der erste Wert umgeschrieben, um die korrigierte Größe zu beschreiben, und der kodierte Inhalt wird in den Bitstrom umgeschrieben.
- 9. Verfahren nach einem der Klauseln 1-8, wobei der erste Wertraum innerhalb eines Einzelbildebenen-Datenraums liegt und im Bitstrom vor dem zweiten Werteraum angeordnet ist.
- 10. Verfahren nach Klausel 9, wobei der zweite Wertraum ein Kachelebenen-Datenraum ist.
- 11. Vorrichtung zum Codieren eines Videosignals mit Videoeinzelbildern in einen Bitstrom, wobei die Vorrichtung umfasst: einen Speicher; und einen Prozessor, der konfiguriert ist, um Anweisungen auszuführen, die in dem Speicher gespeichert sind zum: das Schätzen eines Raumbedarfs zum Codieren einer Kachel eines Videoeinzelbildes der Videoeinzelbilder; das Schreiben eines ersten Wertes in einen ersten Wertraum des Bitstroms, wobei der erste Wert eine Größe eines zweiten Wertraums beschreibt; das Definieren des zweiten Wertraumes in dem Bitstrom, wobei die Größe des zweiten Werteraums auf einem geschätzten Raumbedarf basiert das Schreiben eines codierten Inhalts in einen Inhaltsraum des Bitstroms; das Ermitteln einer Größe des Inhaltsraumes, der dem Schreiben von codiertem Inhalt in den Inhaltsraum folgt; und das Schreiben eines zweiten Wertes in den zweiten Wertraum des Bitstroms, wobei der zweite Wert eine Größe des Inhaltsraumes beschreibt.
- 12. Vorrichtung nach Klausel 11, wobei der Raumbedarf basierend auf einem Teil auf einer Kachelgröße für die Kachel des Videoeinzelbildes geschätzt wird.
- 13. Vorrichtung nach Klausel 12, wobei der Raumbedarf teilweise basierend auf einer Komplexität für das Videoeinzelbild geschätzt wird.
- 14. Vorrichtung nach Klausel 13, wobei der Prozessor ferner konfiguriert ist, Anweisungen auszuführen, die in dem Speicher gespeichert sind, zum: Ermitteln der Komplexität für das Videoeinzelbild.
- 15. Vorrichtung nach Klausel 14, wobei die Komplexität für das Videoeinzelbild basierend auf einem Teil der Bewegung in dem Videoeinzelbild ermittelt wird.
- 16. Vorrichtung nach Klausel 14, wobei die Komplexität für das Videoeinzelbild einer ausgewählten Komplexitätsklassifikation aus einer Vielzahl von vorbestimmten Komplexitätsklassifikationen entspricht.
- 17. Vorrichtung nach einem der Klauseln 11-16, wobei der Prozessor ferner konfiguriert ist, Anweisungen auszuführen, die in dem Speicher gespeichert sind, zum:
- Speichern von statistischen Daten vor dem Abschätzen des Raumbedarfs zum Codieren der Kachel des Videoeinzelbildes, die einen vorherigen Inhalt aus dem Videosignal beschreiben.
- 18. Vorrichtung nach einem der Klauseln 11-17, wobei der Prozessor ferner konfiguriert ist, Anweisungen auszuführen, die in dem Speicher gespeichert sind, zum:
- Ermitteln, ob ein Raumbedarf zum Schreiben des zweiten Wertes größer als die Größe des zweiten Wertraums ist, bevor der zweite Wert in den zweiten Wertraum des Bitstroms geschrieben wird, wobei, wenn der Raumbedarf zum Schreiben des zweiten Wertes größer als die Größe des zweiten Wertraums ist, der zweite Wertraum so neu definiert wird, dass der zweite Wertraum eine korrigierte Größe auf der Grundlage des Raumbedarfs aufweist, wird der erste Wert umgeschrieben, um die korrigierte Größe zu beschreiben, und der kodierte Inhalt wird in den Bitstrom umgeschrieben.
- 19. Verfahren nach einem der Klauseln 11-18, wobei der erste Wertraum innerhalb des Einzelbildebenen-Datenraums liegt und im Bitstrom vor dem zweiten Werteraum angeordnet ist.
- 20. Vorrichtung nach Klausel 19, wobei der zweite Wertraum im Bitstrom nach dem ersten Werteraum angeordnet ist.
- 21. Verfahren zum Codieren eines Bildes, wobei das Verfahren Folgendes umfasst:
- das Schreiben eines ersten Größenwertes in einen ersten Wertraum eines Bitstroms,
- der einen geschätzten Platzbedarf beschreibt; das Reservieren eines zweiten Wertraums des Bitstroms mit einer Größe, die dem ersten Größenwert entspricht; das Schreiben des codierten Inhalts in den Bitstrom; und das Schreiben eines zweiten Größenwertes, der eine Größe des codierten Inhalts in dem zweiten Wertraum beschreibt.