-
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 enthalten können, die den Wert von Farbe, Helligkeit oder anderen Attributen für Pixel beschreiben. Die Datenmenge in einem typischen Videostrom ist groß, und die Übertragung und Speicherung von Videos können signifikante Rechen- oder Kommunikationsressourcen verwenden. Aufgrund der großen Datenmenge, die an Videodaten beteiligt ist, wird eine Hochleistungskomprimierung für die Übertragung und Speicherung benötigt. Bei blockbasierten Codecs sind dies Vorhersagetechniken, einschließlich der Vorhersage unter Verwendung von Bewegungsvektoren.
-
ZUSAMMENFASSUNG
-
Diese Offenbarung bezieht sich allgemein auf das Kodieren und Dekodieren visueller Daten, wie beispielsweise Videostromdaten, unter Verwendung eines Computergerätes, wobei der Videostrom eine Folge von Einzelbildern aufweist, wobei jedes Einzelbild Blöcke aufweist und jeder Block Pixel aufweist. Diese Offenbarung beinhaltet das Speichern einer Referenzeinzelbildkennung mit einem Referenzpufferindex für jedes einer Vielzahl von Referenzeinzelbildern nach dem Kodieren eines ersten Einzelbildes der Folge von Einzelbildern, Aktualisieren der Vielzahl von Referenzeinzelbildern durch Aktualisieren eines Referenzeinzelbildes, mit einer Referenzeinzelbildkennung nach dem Speichern, die mehrere Kandidatenbewegungsvektoren für einen aktuellen Block eines zweiten Einzelbildes nach dem Aktualisieren bestimmt, wobei die Mehrfachkandidatenbewegungsvektoren einen ersten Bewegungsvektor beinhalten, der verwendet wird, um einen kollokierten Block innerhalb des ersten Einzelbildes vorherzusagen, Durchführen einer Bewegungssuche für den aktuellen Block innerhalb eines Referenzeinzelbildes der Vielzahl von Referenzeinzelbildern nach dem Aktualisieren, um einen zweiten Bewegungsvektor zu erzeugen und den Referenzpufferindex, der mit der Referenzeinzelbildkennung des Referenzeinzelbildes gespeichert ist, der der ersten Bewegung zu einem Referenzpufferindex des bei der Ausführung verwendeten Referenzeinzelbildes unter der Bedingung zugeordnet ist, dass der Referenzpufferindex des bei der Durchführung verwendeten Referenzeinzelbildes mit dem Referenzpufferindex, der mit der Referenzeinzelbildkennung des mit der ersten Bewegung assoziierten Referenzeinzelbildes gespeichert ist, Vorschieben des ersten Bewegungsvektors vor die verbleibenden der Mehrfachkandidatenbewegungsvektoren zum Kodieren des aktuellen Blocks.
-
Ein Aspekt der Offenbarung hierin beinhaltet das Kodieren und Dekodieren von visuellen Daten, wobei das zweite Einzelbild dem ersten Einzelbild in der Folge nachfolgt, eines der Vielzahl von Referenzeinzelbildern ein letztes Einzelbild in der Sequenz umfasst, bevor ein aktuelles Bild kodiert wird und das eine letzte Einzelbildkennung als Referenzeinzelbildkennung aufweist und das Aktualisieren der Vielzahl von Referenzeinzelbildern das Aktualisieren eines Referenzpufferindex, der der letzten Einzelbildkennung zugeordnet ist, zu einem Referenzpufferindex des ersten Referenzeinzelbildes. Die Vielzahl von Referenzeinzelbilder umfasst ein goldenes Einzelbild und ein alternatives Referenzeinzelbild und das Aktualisieren der Vielzahl von Referenzeinzelbildern umfasst das Aktualisieren nur des Referenzpufferindex, der der letzten Einzelbildkennung zugeordnet ist. Die Vielzahl von Referenzeinzelbildern umfasst ein goldenes Einzelbild mit einer goldenen Einzelbildkennung als Referenzeinzelbildkennung und einem alternativen Referenzeinzelbild mit einer alternativen Referenzeinzelbildkennung als Referenzeinzelbildkennung; und mindestens eines von: Aktualisieren der Vielzahl von Referenzeinzelbildern umfasst das Aktualisieren eines Referenzpufferindex, der der alternativen Referenzeinzelbildkennung zugeordnet ist, zu einem Referenzpufferindex eines neuen alternativen Referenzeinzelbildes; oder das Aktualisieren der Vielzahl von Referenzeinzelbildern umfasst das Aktualisieren eines Referenzpufferindex, der der goldenen Einzelbildkennung zugeordnet ist, zu einem Referenzpufferindex eines neuen goldenen Einzelbildes.
-
Ein Aspekt der vorliegenden Offenbarung umfasst das Kodieren und Dekodieren von Bilddaten, wobei das Aktualisieren der Vielzahl von Referenzeinzelbildern das Aktualisieren mindestens zweier Referenzeinzelbilder umfasst, die den jeweiligen Referenzeinzelbildkennungen nach dem Speichern zugeordnet sind, wobei die Vielzahl der Kandidatenbewegungsvektoren verwendet werden, einschließlich eines dritten Bewegungsvektors, der verwendet wird, um den kollokierten Block innerhalb des ersten Einzelbildes vorherzusagen, Durchführen einer zweiten Bewegungssuche für den zweiten Block innerhalb eines unterschiedlichen Referenzeinzelbildes der Vielzahl von Referenzeinzelbildern nach dem Aktualisieren, um einen vierten Bewegungsvektor zu erzeugen, umfassend den Referenzpufferindex mit der Referenzeinzelbildkennung des Referenzeinzelbildes mit dem dritten Bewegungsvektor auf einen Referenzpufferindex des Referenzeinzelbildes bei der Durchführung der zweiten Bewegungssuche verwendet zugeordnet gespeichert ist, das Vorschieben des ersten Bewegungsvektors vor die verbleibenden der Mehrfachkandidatenbewegungsvektoren zum Kodieren des aktuellen Blocks das Vorrücken des ersten Bewegungsvektors vor den verbleibenden der Mehrfachkandidatenbewegungsvektoren zum Kodieren des dritten Bewegungsvektors, und bei einer Bedingung, dass der Referenzpufferindex des bei der Durchführung der zweiten Bewegungssuche verwendeten Referenzeinzelbildes mit dem Referenzpufferindex, der mit der Referenzeinzelbildkennung des dem dritten Bewegungsvektor zugeordneten Referenzeinzelbildes gespeichert ist, übereinstimmt, Vorschieben des zweiten Bewegungsvektors vor den verbleibenden der Mehrfachkandidatenbewegungsvektoren zum Kodieren des vierten Bewegungsvektors.
-
Ein Aspekt einer hierin beschriebenen Vorrichtung beinhaltet einen Prozessor und einen nichtflüchtigen Speicher, der Anweisungen speichert, die bewirken, dass der Prozessor ein Verfahren ausführt, welches das Speichern einer Referenzeinzelbildkennung mit einem Referenzpufferindex für jedes einer Vielzahl von Referenzeinzelbildern nach dem Kodieren eines ersten Einzelbildes der Folge von Einzelbildern beinhaltet, Aktualisieren der Vielzahl von Referenzeinzelbildern durch Aktualisieren eines Referenzeinzelbildes, das einer Referenzeinzelbildkennung nach dem Speichern zugeordnet ist, Bestimmen mehrerer Kandidatenbewegungsvektoren für einen aktuellen Block eines zweiten Einzelbildes nach dem Aktualisieren, wobei die Mehrfachkandidatenbewegungsvektoren einen ersten Bewegungsvektor beinhalten, der verwendet wird, um einen aktuellen Block innerhalb des ersten Einzelbildes vorherzusagen, Durchführen einer Bewegungssuche für den aktuellen Block innerhalb eines Referenzeinzelbildes der Vielzahl von Referenzeinzelbildern nach dem Aktualisieren, um einen zweiten Bewegungsvektor zu erzeugen und den Referenzpufferindex, der mit der Referenzeinzelbildkennung des Referenzeinzelbildes gespeichert ist, der der ersten Bewegung zu einem Referenzpufferindex des bei der Ausführung verwendeten Referenzeinzelbildes unter der Bedingung zugeordnet ist, dass der Referenzpufferindex des bei der Durchführung verwendeten Referenzeinzelbildes mit dem Referenzpufferindex, der mit der Referenzeinzelbildkennung des mit der ersten Bewegung assoziierten Referenzeinzelbildes gespeichert ist, Vorschieben des ersten Bewegungsvektors vor den verbleibenden der Mehrfachkandidatenbewegungsvektoren zum Kodieren des aktuellen Blocks.
-
Diese und andere Aspekte dieser Offenbarung werden ausführlicher in der folgenden ausführlichen Beschreibung, den beigefügten Ansprüchen und den beigefügten Figuren beschrieben.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
Die Beschreibung nimmt hierin Bezug auf die beigefügten Zeichnungen, die nachfolgend beschrieben werden, wobei sich gleiche Bezugszeichen auf gleiche Teile in den verschiedenen Ansichten beziehen.
-
1 ist eine schematische Darstellung eines Video-Codier- und Dekodiersystems.
-
2 ist ein Blockdiagramm eines Beispiels eines Computergerätes, die eine Sendestation oder eine Empfangsstation implementieren kann.
-
3 ist ein Diagramm eines zu kodierenden und anschließend zu dekodierenden Videostroms.
-
4 ist ein Blockdiagramm eines Videokompressionssystems gemäß einem Aspekt der vorliegenden Erfindung.
-
5 ist ein Blockdiagramm eines Videokompressionssystems gemäß einem Aspekt der vorliegenden Lehren.
-
6 ist ein Flussdiagramm eines Prozesses zum Auswählen einer Bewegungsvektorreferenz durch eine Referenzeinzelbild-Pufferverfolgung.
-
7 ist ein Diagramm eines Beispiels der Referenzpufferaktualisierung, die verwendet wird, um den Prozess von 6 zu erklären.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Ein Videostrom kann durch eine Vielzahl von Techniken komprimiert werden, um die Bandbreite zu reduzieren, die erforderlich ist, um den Videostrom zu übertragen oder zu speichern. Ein Videostrom kann in einen Bitstrom kodiert werden, der eine Komprimierung beinhalten kann und dann zu einem Dekodierer übertragen wird, der den Videostrom dekodieren oder dekomprimieren kann, um ihn für die Anzeige oder weitere Verarbeitung vorzubereiten. Die Komprimierung des Videostroms nutzt die räumliche und zeitliche Korrelation von Videosignalen häufig durch eine räumliche und/oder bewegungskompensierte Vorhersage. Die Inter-Vorhersage verwendet beispielsweise einen oder mehrere Bewegungsvektoren, um einen Block (auch Vorhersageblock genannt) zu erzeugen, der einem aktuellen Block entspricht, der unter Verwendung von zuvor kodierten und dekodierten Pixeln kodiert werden soll. Durch Kodieren des Bewegungsvektors und der Differenz zwischen den zwei Blöcken kann ein Dekodierer, der das kodierte Signal empfängt, den aktuellen Block wiederherstellen.
-
Jeder Bewegungsvektor, der verwendet wird, um einen Vorhersageblock zu erzeugen, bezieht sich auf ein Einzelbild, das nicht das aktuelle Einzelbild ist, d. h. ein Bezugseinzelbild. Referenzeinzelbilder können vor oder nach dem aktuellen Einzelbild in der Sequenz des Videostroms angeordnet sein. Ein gemeinsames Referenzeinzelbild ist zum Beispiel zum Kodieren eines aktuellen Einzelbildes des letzten Einzelbildes, welches das Einzelbild unmittelbar vor dem aktuellen Einzelbild in der Sequenz ist. Wenn mehr als ein Bewegungsvektor verwendet wird, um den Vorhersageblock zu erzeugen, kann jeder Bewegungsvektor auf ein separates Referenzeinzelbild Bezug nehmen. Ein Block, der unter Verwendung eines einzigen Vorhersageblocks vorhergesagt wird (z. B. erzeugt unter Verwendung eines einzigen Bewegungsvektors), wird hierin als ein einziger Referenzfall bezeichnet, während ein Block, der unter Verwendung von mehr als einem Referenzeinzelbild vorhergesagt wird (z. B. erzeugt unter Verwendung von zwei oder mehr Bewegungsvektoren) wird hierin als ein zusammengesetzter Referenzfall bezeichnet.
-
Eine Bewegungsvektorreferenz kann im Prozess der Inter-Vorhersage nützlich sein. Im Allgemeinen ist eine Bewegungsvektorreferenz ein Bewegungsvektor, der bereits aus dem Kodieren eines anderen Blocks vor dem aktuellen Block bestimmt wird. Eine Bewegungsvektorreferenz kann verwendet werden, um einen Bewegungsvektor, der verwendet wird, um den aktuellen Block zu kodieren, differenziell zu kodieren (und somit zu dekodieren). Ein derartiges Kodieren des Bewegungsvektors kann es ermöglichen, dass der kodierte Bewegungsvektor beispielsweise als kleine feste Anzahl von Bits in dem Videostrom beinhaltet ist. Alternativ oder zusätzlich kann eine Bewegungsvektorreferenz als eine einer Anzahl von Kandidatenbewegungsvektoren zum Bestimmen des Bewegungsvektors verwendet werden, der verwendet wird, um den aktuellen Block zu kodieren. Eine Bewegungsvektorreferenz kann aus Blöcken erhalten werden, die räumlich an den aktuellen Block angrenzen. Eine Bewegungsvektorreferenz kann auch eine zeitliche Bewegungsvektorreferenz sein, die aus einem zeitlich benachbarten Block, auch Co-lokalisierter Block genannt, bestimmt wird, da er sich an denselben Pixelpositionen bezüglich seines Einzelbildes als der zu kodierende aktuelle Block befindet.
-
Wie erwähnt, kann jeder Bewegungsvektor auf eines von mehreren verfügbaren Referenzeinzelbildern verweisen. Somit kann jede Bewegungsvektorreferenz auf eines von mehreren verfügbaren Referenzeinzelbildern verweisen. Es kann ein Signal gesendet werden, das anzeigt, dass das Referenzeinzelbild, das die Bewegungsvektorreferenz beinhaltet, eines der verfügbaren Referenzeinzelbilder ist. Anstatt eine Einzelbildkennung selbst zu signalisieren, die eine relativ lange Folge von Bits sein kann, kann das Signal eine kürzere Folge von Bits sein, die den Typ des Referenzeinzelbildes identifiziert. Bei einigen Videocodecs gibt es beispielsweise drei Arten von Referenzeinzelbildern-das letzte Einzelbild (LAST_FRAME), ein goldenes Einzelbild (GOLDEN_FRAME) und ein alternatives Referenzeinzelbild (ALTREF_FRAME).
-
Offenbarte Aspekte können überprüfen, ob ein Referenzeinzelbild eines Bewegungsvektors, der verwendet wird, um einen gemeinsam angeordneten Block in einem zuvor kodierten Einzelbild vorherzusagen, der gleiche Typ ist wie ein Referenzeinzelbild, das für den aktuellen Block verwendet wird. Wenn sie der gleiche Typ sind, wird der Bewegungsvektor bei einer höheren Priorität zum Kodieren des aktuellen Bewegungsvektors als alle anderen Bewegungsvektoren betrachtet, die diesen Test nicht erfüllen. Wenn beispielsweise der aktuelle Block LAST_FRAME gewählt hat und sein kollokierter Block im vorigen Einzelbild ebenfalls LAST_FRAME auswählt, kann der Bewegungsvektor des kollokierten Blocks mit höherer Priorität als Bewegungsvektorreferenz für die Kodierung des aktuellen Bewegungsvektors betrachtet werden.
-
Ein Problem kann bei dem vorstehenden Ansatz darin bestehen, dass nach der Codierung jedes Einzelbildes der Referenzpuffer aktualisiert wird und folglich ein oder mehrere Einzelbilder im Referenzpuffer durch ein neu kodiertes Einzelbild ersetzt werden können. Selbst wenn daher beide Blöcke im vorigen Einzelbild und im aktuellen Einzelbild das gleiche Bezugsbild wählen, z. B. LAST_FRAME können sie nicht auf den eigentlichen identischen Referenzeinzelbildpuffer zeigen. Aspekte von offenbarten Implementierungen adressieren dieses Problem durch Identifizieren, ob der kollokierte Block in dem vorhergehenden Einzelbild identische Referenzeinzelbilder als den aktuellen Block verwendet. Nur wenn die Antwort wahr ist, können der Bewegungsvektor oder die Vektoren des kollokierten Blocks mit einer höheren Priorität behandelt werden als andere Bewegungsvektorreferenzen zum Kodieren des gegenwärtigen Bewegungsvektors.
-
Weitere Einzelheiten werden nach einer ersten Erläuterung der Umgebung beschrieben, in der die Lehren hierin verwendet werden können.
-
1 ist eine schematische Darstellung eines Videokodier- und Dekodiersystems 100. Eine Sendestation 102 kann beispielsweise ein Computer mit einer internen Hardwarekonfiguration sein. wie sie in 2 beschrieben ist. Es sind jedoch auch andere geeignete Implementierungen der Sendestation 102 möglich. So kann beispielsweise die Verarbeitung der Sendestation 102 auf mehrere Geräte verteilt sein.
-
Ein Netzwerk 104 kann die Sendestation 102 und eine Empfangsstation 106 zum Kodieren und Dekodieren des Videostroms verbinden. Insbesondere kann der Videostrom in der Sendestation 102 kodiert werden und der kodierte Videostrom kann in der Empfangsstation 106 dekodiert werden. Das Netzwerk 104 kann beispielsweise das Internet sein. Das Netzwerk 104 kann auch ein lokales Netzwerk (LAN), ein Weitverkehrsnetz (WAN), ein virtuelles privates Netzwerk (VPN), ein Mobilfunknetz oder jedes andere Mittel zum Übertragen des Videostroms von der Sendestation 102 zu, in diesem Beispiel, der Empfangsstation 106 sein.
-
Die Empfangsstation 106 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 Sendestation 106 möglich. So kann beispielsweise die Verarbeitung der Empfangsstation 106 auf mehrere Geräte verteilt sein.
-
Andere Implementierungen des Videokodierungs- und Dekodierungssystems 100 sind möglich. So kann beispielsweise eine Implementierung das Netzwerk 104 weglassen. In einer anderen Implementierung kann ein Videostrom kodiert und dann zur Übertragung zu einem späteren Zeitpunkt zu der Empfangsstation 106 oder einem beliebigen anderen Gerät mit Speicher gespeichert werden. Bei einer Implementierung empfängt die Empfangsstation 106 (z. B. über das Netzwerk 104 einen Computerbus und/oder einen gewissen Kommunikationsweg) 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 104 verwendet. Bei einer anderen Implementierung kann ein anderes Transportprotokoll als RTP verwendet werden, z. B. ein Hypertext Transfer Protocol(HTTP)-basiertes Video-Streaming-Protokoll.
-
Wenn sie beispielsweise in einem Videokonferenzsystem verwendet wird, können die Sendestation 102 und/oder die Empfangsstation 106 die Fähigkeit aufweisen, einen Videostrom zu kodieren und zu dekodieren, wie nachfolgend beschrieben. So könnte beispielsweise die Empfangsstation 106 ein Videokonferenzteilnehmer sein, der einen kodierten Videobitstrom von einem Videokonferenzserver (z. B. der Sendestation 102) empfängt, um diesen zu dekodieren und zu sehen und weiter zu kodieren und seinen eigenen Video-Bitstrom zum Videokonferenzserver zum Dekodieren und Betrachten durch andere Teilnehmer zu übertragen und zu übertragen.
-
2 ist ein Blockdiagramm eines Beispiels eines Computergerätes 200, die eine Sendestation oder eine Empfangsstation implementieren kann. So kann beispielsweise die Rechenvorrichtung 200 eine oder beide der Sendestation 102 und der Empfangsstation 106 von 1 implementieren. Die Rechenvorrichtung 200 kann in Form eines Rechensystems mit mehreren Rechenvorrichtungen oder in Form einer einzigen Rechenvorrichtung, beispielsweise eines Mobiltelefons, eines Tablet-Computers, eines Laptop-Computers, eines Notebook-Computers, eines Desktop-Computers und dergleichen sein.
-
Eine CPU 202 in der Rechenvorrichtung 200 kann eine zentrale Verarbeitungseinheit sein. Alternativ kann die CPU 202 eine beliebige andere Art von Vorrichtung oder mehrere Vorrichtungen sein, die in der Lage ist, Informationen zu manipulieren oder zu verarbeiten, die jetzt existieren oder später entwickelt werden. Obwohl die offenbarten Implementierungen mit einem einzigen Prozessor, wie z. B. der CPU 202, praktiziert werden können, können Vorteile bei Geschwindigkeit und Effizienz unter Verwendung von mehr als einem Prozessor erreicht werden.
-
Ein Speicher 204 in der Rechenvorrichtung 200 kann ein Nur-Lesespeichergerät (ROM) oder ein Direktzugriffsspeichergerät (RAM) in einer Implementierung sein. Jede andere geeignete Speichervorrichtung kann als Speicher 204 verwendet werden. Der Speicher 204 kann Code und Daten 206 beinhalten, auf die durch die CPU 202 unter Verwendung eines Busses 212 zugegriffen wird. Der Speicher 204 kann ferner ein Betriebssystem 208 und Anwendungsprogramme 210 beinhalten, wobei die Anwendungsprogramme 210 mindestens ein Programm beinhalten, das es der CPU 202 ermöglicht, die hier beschriebenen Verfahren durchzuführen. So können beispielsweise die Anwendungsprogramme 210 Anwendungen 1 bis N beinhalten, die ferner eine Videokodierungsanwendung beinhalten, welche die hier beschriebenen Verfahren durchführt. Die Rechenvorrichtung 200 kann auch einen Sekundärspeicher 214 beinhalten, der beispielsweise eine Speicherkarte sein kann, die mit einer mobilen Rechenvorrichtung verwendet wird. Da die Videokommunikationssitzungen eine beträchtliche Menge an Information enthalten können, können sie ganz oder teilweise in dem Sekundärspeicher 214 gespeichert und in den Speicher 204 geladen werden, wie dies für die Verarbeitung erforderlich ist.
-
Die Rechenvorrichtung 200 kann auch eine oder mehrere Ausgabevorrichtungen, wie eine Anzeige 218, beinhalten. Die Anzeige 218 kann in einem Beispiel eine berührungsempfindliche Anzeige sein, die eine Anzeige mit einem berührungsempfindlichen Element kombiniert, das betreibbar ist, um Berührungseingaben zu erfassen. Die Anzeige 218 kann über den Bus 212 mit der CPU 202 gekoppelt sein. Andere Ausgabevorrichtungen, die es einem Benutzer ermöglichen, die Rechenvorrichtung 200 zu programmieren oder anderweitig zu verwenden, können zusätzlich oder alternativ zu der Anzeige 218 vorgesehen sein. Wenn die Ausgabevorrichtung eine Anzeige aufweist oder beinhaltet, kann die Anzeige auf verschiedene Arten implementiert werden, einschließlich durch eine Flüssigkristallanzeige (LCD), eine Kathodenstrahlröhrenanzeige (CRT) oder eine Leuchtdiodenanzeige (LED), wie beispielsweise eine organische LED-Anzeige (OLED).
-
Die Rechenvorrichtung 200 kann auch eine Bildaufnahmevorrichtung 220 beinhalten, beispielsweise eine Kamera, oder jede andere Bilderfassungsvorrichtung 220, die nun vorhanden ist oder später entwickelt wird, die ein Bild, wie beispielsweise das Bild eines Benutzers, der die Computervorrichtung 200 bedient, erfassen kann. Die Bilderfassungsvorrichtung 220 kann so positioniert sein, dass sie auf den Benutzer gerichtet ist, der die Computervorrichtung 200 bedient. In einem Beispiel können die Position und die optische Achse der Bilderfassungsvorrichtung 220 so konfiguriert sein, dass das Sichtfeld einen Bereich umfasst, der direkt an die Anzeige 218 angrenzt und von dem die Anzeige 218 sichtbar ist.
-
Die Rechenvorrichtung 200 kann auch eine Tonerfassungsvorrichtung 222 beinhalten, beispielsweise ein Mikrofon, oder jede andere Tonerfassungsvorrichtung, die aktuell vorhanden ist oder später entwickelt wird, die Töne nahe der Rechenvorrichtung 200 erfassen kann. Die Tonerfassungsvorrichtung 222 kann so positioniert werden, dass sie auf den Benutzer, der die Computervorrichtung 200 betreibt, gerichtet ist und so konfiguriert sein kann, dass sie Töne, beispielsweise Sprache oder andere Äußerungen, empfängt, die vom Benutzer vorgenommen werden, während der Benutzer die Rechenvorrichtung 200 bedient.
-
Obwohl 2 die CPU 202 und den Speicher 204 der Rechenvorrichtung 200 darstellt, wenn sie in einer einzigen Einheit integriert sind, können auch andere Konfigurationen verwendet werden. Die Operationen der CPU 202 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 204 kann über mehrere Maschinen, wie einen netzwerkbasierten Speicher oder Speicher, in mehreren Maschinen verteilt werden, die die Operationen der Rechenvorrichtung 200 ausführen. Obwohl hier als ein einzelner Bus dargestellt, kann der Bus 212 der Rechenvorrichtung 200 aus mehreren Bussen bestehen. Ferner kann der Sekundärspeicher 214 direkt mit den anderen Komponenten der Rechenvorrichtung 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. Die Rechenvorrichtung 200 kann somit in einer Vielzahl von Konfigurationen implementiert werden.
-
3 ist ein Diagramm eines Beispiels eines Videodatenstroms 300, der kodiert und anschließend dekodiert werden soll. Der Videostrom 300 beinhaltet eine Videosequenz 302. Auf der nächsten Ebene beinhaltet die Videosequenz 302 eine Anzahl von benachbarten Einzelbildern 304. Während drei Einzelbilder als benachbarte Einzelbilder 304 dargestellt sind, kann die Videosequenz 302 eine beliebige Anzahl von benachbarten Einzelbildern 304 beinhalten. Die benachbarten Einzelbildern 304 können dann weiter in einzelne Einzelbilder, z. B. ein Einzelbild 306 unterteilt werden. Auf der nächsten Ebene kann das Einzelbild 306 in eine Reihe von Ebenen oder Segmenten 308 unterteilt werden. Die Segmente 308 können Teilmengen von Einzelbildern sein, die beispielsweise eine Parallelverarbeitung ermöglichen. Die Segmente 308 können Teilmengen von Einzelbildern sein, welche die Videodaten in einzelne Farben trennen können. So kann beispielsweise das Einzelbild 306 von Farbvideodaten eine Luminanzebene und zwei Chrominanzflächen beinhalten. Die Segmente 308 können mit unterschiedlichen Auflösungen abgetastet werden.
-
Ob das Einzelbild 306 in die Segmente 308 unterteilt ist oder nicht, kann das Einzelbild 306 ferner weiter in Blöcke 310 unterteilt werden, die Daten beinhalten können, die beispielsweise 16×16 Pixeln im Einzelbild 306 entsprechen. Die Blöcke 310 können auch so angeordnet sein, dass sie Daten von einer oder mehreren Ebenen von Pixeldaten beinhalten. Die Blöcke 310 können auch aus einer beliebigen anderen geeigneten Größe, wie beispielsweise 4×4 Pixel, 8×8 Pixel, 16×8 Pixel, 8×16 Pixel, 16×16 Pixel, oder größer sein. Die Blöcke 310 oder andere Bereiche, die sich aus der Aufteilung der Einzelbilder 306 ergeben, können gemäß den hierin beschriebenen Lehren partitioniert werden, wie nachfolgend ausführlicher erörtert wird. Das heißt, die zu kodierenden Bereiche können größere Bereiche sein, die in kleinere Teilblöcke oder Bereiche unterteilt sind. Insbesondere kann ein aktueller Bereich, der kodiert werden soll, in kleinere Gruppen von Pixeln aufgeteilt werden, die unter Verwendung von z. B. unterschiedlichen Vorhersagemodi kodiert werden. Diese Gruppen von Pixeln können hierin als Vorhersageteilblöcke, Vorhersageteilbereiche oder Vorhersageeinheiten bezeichnet werden. In einigen Fällen gibt es nur einen Vorhersage-Teilbereich, der den gesamten zu kodierenden Bereich umfasst, während der Bereich unter Verwendung nur eines Vorhersagemodus kodiert wird. Wenn nicht anders angegeben, gilt die Beschreibung der Codierung und Dekodierung eines Blocks in den nachfolgenden 4 und 5 gleichermaßen für Vorhersageunterblöcke, Vorhersageunterbereiche oder Vorhersageeinheiten eines größeren Bereichs.
-
4 ist ein Blockdiagramm eines Kodierers 400 gemäß einer Implementierung. Der Kodierer 400 kann, wie vorstehend beschrieben, in der Sendestation 102 implementiert werden, wie beispielsweise durch Bereitstellen eines Computerspeicherprogramms, das zum Beispiel im Speicher 204 gespeichert ist. Das Computersoftwareprogramm kann Maschinenanweisungen beinhalten, die, wenn sie durch einen Prozessor, wie beispielsweise die CPU 202, ausgeführt werden, die Sendestation 102 dazu veranlassen, Videodaten der in 4 beschriebenen Weise zu kodieren. Der Kodierer 400 kann auch als spezialisierte Hardware implementiert sein, die beispielsweise in der Sendestation 102 beinhaltet ist. Der Kodierer 400 weist die folgenden Schritte auf, um die verschiedenen Funktionen in einem Vorwärtspfad auszuführen (dargestellt durch die durchgezogenen Verbindungslinien), um einen kodierten oder komprimierten Bitstrom 420 unter Verwendung des Videostroms 300 als Eingabe zu erzeugen: eine Intra-/Inter-Vorhersagestufe 402, eine Transformationsstufe 404, eine Quantisierungsstufe 406 und eine Entropiekodierungsstufe 408. Der Kodierer 400 kann auch einen Rekonstruktionspfad (dargestellt durch die punktierten Verbindungslinien) beinhalten, um ein Einzelbild zur Codierung zukünftiger Blöcke zu rekonstruieren. In 4 weist der Kodierer 400 die folgenden Schritte auf, um die verschiedenen Funktionen im Rekonstruktionspfad auszuführen: eine Dequantisierungsstufe 410, eine inverse Transformationsstufe 412, eine Rekonstruktionsstufe 414 und eine Schleifenfilterstufe 416. Andere strukturelle Variationen des Kodierers 400 können verwendet werden, um den Videostrom 300 zu kodieren.
-
Wenn der Videostrom 300 zur Codierung dargestellt ist, kann jedes Einzelbild 306 in Einheiten von Pixeln (z. B. Bereichen), wie beispielsweise Blöcken, verarbeitet werden. In der Intra/Inter-Vorhersagestufe 402 kann jeder Block unter Verwendung einer Intra-Einzelbild-Vorhersage (auch Intra-Prädiktion genannt) oder Inter-Einzelbild-Vorhersage (auch Interprädiktion oder Inter-Prädiktion genannt) kodiert werden. In jedem Fall kann ein Vorhersageblock (oder Prädiktor) gebildet werden. Im Falle einer Intra-Vorhersage kann ein Vorhersageblock aus Abtastwerten in dem aktuellen Einzelbild gebildet werden, die vorher kodiert und rekonstruiert wurden. Im Falle einer Inter-Vorhersage kann ein Vorhersageblock aus Abtastwerten in einem oder mehreren zuvor konstruierten Referenzeinzelbildern gebildet werden.
-
Als nächstes bezugnehmend auf 4, kann der Vorhersageblock von dem aktuellen Block an der Intra-/Inter-Vorhersagestufe 402 subtrahiert werden, um einen Restblock (auch Residuum genannt) zu erzeugen. Die Transformationsstufe 404 transformiert den Rest in Transformationskoeffizienten in beispielsweise dem Frequenzbereich unter Verwendung von blockbasierten Transformationen. Derartige blockbasierten Transformationen beinhalten beispielsweise die diskrete Kosinustransformation (DCT) und die asymmetrische diskrete Sinustransformation (ADST). Andere blockbasierte Transformationen sind möglich. Ferner können Kombinationen von verschiedenen Transformationen auf einen einzigen Rest angewendet werden. In einem Anwendungsbeispiel einer Transformation transformiert das DCT den Restblock in den Frequenzbereich, in dem die Transformationskoeffizientenwerte auf der Raumfrequenz basieren. Der niedrigste Frequenzkoeffizient (DC) am oberen linken Rand der Matrix und der höchste Frequenzkoeffizient am unteren rechten Rand der Matrix. Es ist erwähnenswert, dass die Größe eines Vorhersageblocks und damit der resultierende Restblock von der Größe des Transformationsblocks verschieden sein kann. So kann beispielsweise der Restblock oder Bereich in kleinere Blockbereiche aufgeteilt werden, auf die getrennte Transformationen angewendet werden.
-
Die Quantisierungsstufe 406 wandelt die Transformationskoeffizienten, die als quantisierte Transformationskoeffizienten bezeichnet werden, unter Verwendung eines Quantisiererwerts oder eines Quantisierungspegels in diskrete Quantenwerte um. So können zum Beispiel die Transformationskoeffizienten durch den Quantisiererwert geteilt und abgeschnitten werden. Die quantisierten Transformationskoeffizienten werden dann durch die Entropiekodierungsstufe 408 entropiekodiert. Entropiekodierung kann unter Verwendung einer beliebigen Anzahl von Techniken durchgeführt werden, einschließlich Token und Binärbäume. Die entropiekodierten Koeffizienten werden zusammen mit anderen Informationen, die zum Dekodieren des Blocks verwendet werden, die zum Beispiel die Art der verwendeten Vorhersage, den Transformationstyp, die Bewegungsvektoren und den Quantisiererwert beinhalten können, an den komprimierten Bitstrom 420 ausgegeben. Der komprimierte Bitstrom 420 kann auch als ein kodierter Videostrom oder kodierter Videobitstrom bezeichnet werden, und die Ausdrücke werden hierin austauschbar verwendet.
-
Der Rekonstruktionspfad in 4 (dargestellt durch die gestrichelten Verbindungslinien) kann dazu verwendet werden, dass der Kodierer 400 als auch ein Dekodierer 500 (nachfolgend beschrieben) dieselben Referenzeinzelbilder verwenden, um den komprimierten Bitstrom 420 zu dekodieren. Der Rekonstruktionspfad führt Funktionen aus, die ähnlich zu Funktionen sind, die während des Dekodierungsprozesses stattfinden, die nachfolgend ausführlicher erörtert werden, einschließlich des Dequantisierens der quantisierten Transformationskoeffizienten in der Dequantisierungsstufe 410 und der inversen Transformation der dequantisierten Transformationskoeffizienten an der inversen Transformationsstufe 412, um einen derivativen Restblock (der auch als Derivatrest bezeichnet wird) zu erzeugen. In der Rekonstruktionsstufe 414 kann der Vorhersageblock, der bei der Intra-/Inter-Vorhersagestufe 402 vorhergesagt wurde, zu dem Ableitungsrest hinzugefügt werden, um einen rekonstruierten Block zu erzeugen. Die Schleifenfilterstufe 416 kann auf den rekonstruierten Block angewendet werden, um Verzerrungen, wie beispielsweise Blockierartefakte, zu reduzieren.
-
Andere Variationen des Kodierers 400 können verwendet werden, um den komprimierten Bitstrom 420 zu kodieren. So kann beispielsweise ein nicht-transformbasierter Kodierer 400 das Restsignal direkt ohne die Transformationsstufe 404 für bestimmte Blöcke oder Einzelbilder quantisieren. Bei einer anderen Implementierung kann ein Kodierer 400 die Quantisierungsstufe 406 und die Dequantisierungsstufe 410 zu einer einzigen Stufe kombinieren. Der Kodierer 400 kann jegliche Größen- oder Formgruppen von Pixeln gemäß dieser Technik kodieren. Die zu kodierenden Gruppen von Pixeln können somit allgemeiner als Bereiche bezeichnet werden.
-
5 ist ein Blockdiagramm eines Dekodierers 500 gemäß einer anderen Implementierung. Der Kodierer 500 kann beispielsweise in der Empfangsstation 106 implementiert werden, indem ein in dem Speicher 204 gespeichertes Computersoftwareprogramm bereitgestellt wird. Das Computersoftwareprogramm kann Maschinenanweisungen beinhalten, die, wenn sie durch einen Prozessor, wie beispielsweise die CPU 202, ausgeführt werden, die Empfangsstation 106 dazu veranlasst, Videodaten auf die in 5 beschriebene Weise zu kodieren. Der Dekodierer 500 kann auch in Hardware implementiert sein, die beispielsweise in der Sendestation 102 oder der Empfangsstation 106 beinhaltet ist.
-
Der Dekodierer 500 beinhaltet, ähnlich wie der vorstehend beschriebene Rekonstruktionspfad des Kodierers 400, in einem Beispiel die folgenden Schritte, um verschiedene Funktionen auszuführen, um einen Ausgangsvideostrom 516 aus dem komprimierten Bitstrom 420 zu erzeugen: eine Entropiedekodierungsstufe 502, eine Dequantisierungsstufe 504, eine inverse Transformationsstufe 506, eine Intra-/Inter-Vorhersagestufe 508, eine Rekonstruktionsstufe 510, eine Schleifenfilterstufe 512 und eine Entblockierungsfilterstufe 514. Andere strukturelle Variationen des Dekodierers 500 können verwendet werden, um den komprimierten Bitstrom 420 zu dekodieren.
-
Wenn der komprimierte Bitstrom 420 zum Dekodieren dargestellt wird, können die Datenelemente innerhalb des komprimierten Bitstroms 420 durch die Entropie-Dekodierungsstufe 502 dekodiert werden, um einen Satz quantisierter Transformationskoeffizienten zu erzeugen. Die Dequantisierungsstufe 504 dequantisiert die quantisierten Transformationskoeffizienten (z. B. durch Multiplizieren der quantisierten Transformationskoeffizienten mit dem Quantisiererwert), und die inverse Transformationsstufe 506 invertiert die dequantisierten Transformationskoeffizienten unter Verwendung des ausgewählten Transformationstyps, um einen derivaten Rest zu erzeugen, der mit dem identisch sein kann, der durch die inverse Transformationsstufe 412 in dem Kodierer 400 erzeugt wird. Unter Verwendung von Headerinformationen, die von dem komprimierten Bitstrom 420 dekodiert wurden, kann der Dekodierer 500 die Intra-/Inter-Vorhersagestufe 508 verwenden, um denselben Vorhersageblock zu erzeugen, der in dem Kodierer 400 erzeugt wurde, z. B. an der Intra-/Inter-Vorhersagestufe 402. Bei der Rekonstruktionsstufe 510 kann der Vorhersageblock zum Derivatrest hinzugefügt werden, um einen rekonstruierten Block zu erzeugen. Die Schleifenfilterstufe 512 kann auf den rekonstruierten Block angewendet werden, um Blockierungsartefakte zu reduzieren. Eine andere Filterung kann auf den rekonstruierten Block angewendet werden. In diesem Beispiel wird die Entblockierungsfilterstufe 514 an den rekonstruierten Block angelegt, um die Blockierungsverzerrung zu reduzieren, und das Ergebnis wird als ein Ausgangsvideostrom 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 420 zu dekodieren. So kann beispielsweise der Dekodierer 500 den Ausgangsvideostrom 516 ohne die Entblockierungsfilterstufe 514 erzeugen. Während mit Bezug auf die Blöcke zur Vereinfachung der Erläuterung beschrieben wurde, kann der Dekodierer 500 jegliche Größen- oder Formgruppen von Pixeln (z. B. Bereiche) gemäß dieser Technik dekodieren.
-
Wie vorstehend kurz erwähnt, kann ein Einzelbild oder ein Bereich eines Einzelbildes zum Kodieren oder Dekodieren durch eine letzte Einzelbild-Bewegungsvektorpartitionierung, d. h. durch Einstellen der Partitionierung des letzten Einzelbildes unter Verwendung eines Bewegungsvektors, partitioniert werden. Im Allgemeinen wird ein Bereich in getrennte Bereiche durch Verschieben der vorherigen Einzelbildpartitionen durch einen der Bewegungsvektoren aufgeteilt, die durch den Bewegungsvektor des neuen Bereichs bedeckt sind.
-
6 ist ein Flussdiagramm eines Prozesses 600 zum Kodieren oder Dekodieren eines Videostroms gemäß einer Implementierung dieser Offenbarung. Das Verfahren oder der Prozess 600 kann in einem System wie beispielsweise der Rechenvorrichtung 200 implementiert sein, um das Kodieren oder Dekodieren eines Videostroms zu unterstützen. Der Prozess 600 kann beispielsweise als Softwareprogramm implementiert sein, das von eines Computergerätes wie beispielsweise der Sendestation 102 oder der Empfangsstation 106 ausgeführt wird. Das Softwareprogramm kann maschinenlesbare Anweisungen beinhalten, die in einem Speicher wie dem Speicher 204 gespeichert sind, der, wenn er von einem Prozessor, wie beispielsweise der CPU 202, ausgeführt wird, die Rechenvorrichtung veranlasst, den Prozess 600 auszuführen. Der Prozess 600 kann auch ganz oder teilweise mit Hardware implementiert werden. Wie vorstehend erläutert, können einige Rechenvorrichtungen mehrere Speicher und mehrere Prozessoren aufweisen, und die Schritte oder Operationen des Prozesses 600 können in derartigen Fällen unter Verwendung verschiedener Prozessoren und Speicher verteilt werden. Die Verwendung der Begriffe „Prozessor” und „Speicher” in der Singularform hierin verwendet, umfasst Computergeräte, die nur einen Prozessor oder einen Speicher aufweisen sowie Vorrichtungen mit mehreren Prozessoren oder Speichern, die jeweils in der Durchführung einiger, aber nicht notwendigerweise aller genannten Schritte verwendet werden können.
-
Zur Vereinfachung der Erläuterung wird das Verfahren 600 als eine Folge von Schritten oder Operationen dargestellt und beschrieben. Schritte und Vorgänge in Übereinstimmung mit dieser Offenbarung können jedoch in verschiedenen Reihenfolgen und/oder gleichzeitig auftreten. Zusätzlich können Schritte oder Operationen in Übereinstimmung mit dieser Offenbarung mit anderen Schritten oder Operationen, die hier nicht dargestellt und beschrieben werden, auftreten. Ferner können nicht alle dargestellten Schritte oder Operationen erforderlich sein, um ein Verfahren gemäß dem offenbarten Gegenstand durchzuführen. Der Prozess 600 kann für jeden Block jedes Einzelbild des Eingangssignals wiederholt werden. Bei einigen Implementierungen werden nur einige Blöcke von einem oder mehreren Einzelbildern gemäß dem Prozess 600 verarbeitet. So können zum Beispiel Blöcke, die unter Verwendung von Intra-Vorhersagemodi kodiert werden, bei der Durchführung des Prozesses 600 weggelassen werden.
-
Wenn der Prozess 600 ein Codierungsprozess ist, kann das Eingangssignal zum Beispiel der Videostrom 300 sein. Das Eingangssignal kann von dem Computer, der den Prozess 600 durchführt, in einer beliebigen Anzahl von Wegen empfangen werden. So kann beispielsweise das Eingangssignal durch die Bilderfassungsvorrichtung 220 erfasst oder von einem anderen Gerät über einen Eingang empfangen werden, das mit dem Bus 212 verbunden ist. Das Eingangssignal könnte aus dem sekundären Speicher 214 in einer anderen Implementierung abgerufen werden. Andere Arten des Empfangs und anderer Quellen des Eingangssignals sind möglich. Wenn beispielsweise der Prozess 600 ein Dekodierungsprozess ist, kann das Eingangssignal ein kodierter Bitstrom sein, wie beispielsweise der komprimierte Bitstrom 420.
-
Unter Verwendung des Videostroms speichert der Prozess 600 bei Schritt 602 eine Referenzeinzelbildkennung mit einem Referenzpufferindex für jedes einer Vielzahl von Referenzeinzelbildern nach dem Kodieren eines ersten Einzelbildes der Folge von Einzelbildern des Videostroms. Der Schritt 602 kann unter Bezugnahme auf 7 erläutert werden. 7 zeigt ein Referenzeinzelbild 700, einschließlich LAST_FRAME 702, GOLDEN_FRAME 704 und ALTREF_FRAME 706. Eines dieser drei Referenzeinzelbilder 700 wird als Referenzeinzelbild 700 für jeden Block im Block-Header angezeigt. Auf der Einzelbild-Headerebene wird das Eins-zu-Eins-Mapping des Einzelbildes 700 zur virtuellen Referenzkennung oder Index 708 in den Bitstrom geschrieben. Ein weiteres Eins-zu-Eins-Mapping wird für jedes Einzelbild beibehalten, das vom virtuellen Referenzindex 708 zur Referenzpufferkennung oder Index 710 abzubilden ist. Für zwei aufeinander folgende Inter-Einzelbilder, wenn zwei Referenzeinzelbilder 700 auf denselben Referenzpufferindex 710 abgebildet sind, zeigt der Prozess 600 an, dass sie die gleichen Bezugszeichen sind. Das Beispiel von 7 weist acht verfügbare virtuelle Referenzindizes 708 und acht Referenz-Puffer-Indizes 710 auf.
-
Um zu verfolgen, ob der vorherige kollokierte Block die identische Referenz als diejenige des aktuellen Blocks verwendet, können sowohl der Kodierer als auch der Dekodierer Referenzpuffer 700-Puffer-Aktualisierungen verfolgen und die Referenzpuffer-Index-710-Abbildungen für das zuvor kodierte Einzelbild speichern. Somit können der Kodierer und Dekodierer identifizieren, ob die beiden von dem kollokierten Block und dem aktuellen Block verwendeten Referenzeinzelbilder auf einem identischen Referenzpufferindex 710 abgebildet sind. So kann zum Beispiel am Ende der Codierung jedes Einzelbildes vor dem Aktualisieren des Referenzeinzelbildpuffers die Referenzpufferindex 710-Tabelle, die jedem Referenzeinzelbild 700 entspricht, sowohl am Kodierer als auch am Dekodierer gespeichert werden.
-
Wenn der Bewegungsvektor des kollokierten Blocks überprüft wird, kann der Prozess 600 zuerst das Referenzeinzelbild 700 identifizieren, das für den kollokierten Block verwendet wird. Anstatt diesen Referenzeinzelbild-Wert 700 im direkten Vergleich mit dem aktuellen Block zu verwenden, kann der Dekodierer oder Kodierer seinen Referenzpufferindex 710 identifizieren. Der Referenzpufferindex 710 für das Referenzeinzelbild 700 des aktuellen Blocks wird mit den Referenzpufferindizes 710 für den kollokierten Block verglichen. Wenn sie identisch sind, wird der Bewegungsvektor des kollokierten Blocks als eine Bewegungsvektorreferenz für den gegenwärtigen Bewegungsvektor mit einer höheren Priorität genommen.
-
Zurück zu 6 aktualisiert der Prozess 600 das Referenzeinzelbild 700 und den virtuellen Referenzindex 708, der dem Referenzeinzelbild 700 zugeordnet ist, bei Schritt 604. Bei Schritt 606 bestimmt der Prozess 600 mehrere Kandidatenbewegungsvektoren für einen aktuellen Block eines zweiten Einzelbildes, wobei die Mehrfachkandidatenbewegungsvektoren einen ersten Bewegungsvektor beinhalten, der verwendet wird, um einen kollokierten Block innerhalb des ersten Einzelbildes vorherzusagen. Bei Schritt 608 führt der Prozess 600 eine Bewegungssuche für den aktuellen Block innerhalb eines Referenzeinzelbildes 700 der Vielzahl von Referenzeinzelbildern 700 nach dem Aktualisieren durch, um einen zweiten Bewegungsvektor zu erzeugen. Bei Schritt 610 vergleicht Prozess 600 den Referenzpufferindex 710, der mit dem virtuellen Referenzindex 708 des Referenzeinzelbildes 700 gespeichert ist, welches dem ersten Bewegungsvektor zugeordnet ist, mit einem Referenzpufferindex 710 des Referenzeinzelbildes 700, das bei der Durchführung der Bewegungssuche verwendet wird.
-
Bei Schritt 612 bestimmt der Prozess 600, ob der virtuelle Referenzindex 708 des Referenzeinzelbildes 700, das bei der Durchführung der Bewegungssuche verwendet wird, mit dem Referenzpufferindex 710, der dem ersten Bewegungsvektor zugeordnet ist, übereinstimmt. Wenn eine Übereinstimmung gefunden wird, geht der Prozess 600 zum Schritt 614 über, wobei der erste Bewegungsvektor vor den verbleibenden der Vielzahl von Kandidatenbewegungsvektoren vorgerückt werden kann, um den aktuellen Block zu kodieren; andernfalls kehrt der Prozess 600 zum Schritt 602 zurück, um einen anderen Block zu verarbeiten.
-
Das Vorwärtsbewegen des ersten Bewegungsvektors vor den restlichen Kandidatenbewegungsvektoren zum Kodieren des aktuellen Blocks kann bewirken, dass der ausgewählte Bewegungsvektor den aktuellen Bewegungsvektor genauer voraussagt. Deshalb ist die Differenz zwischen dem vorhergesagten Bewegungsvektor und dem aktuellen Bewegungsvektor klein und kann in dem Videostrom in einer kleinen Anzahl von Bits dargestellt werden, wodurch Bandbreite eingespart wird.
-
Aspekte von offenbarten Implementierungen können Bewegungsvektoren in Fällen vorhersagen, in denen ein aktueller Block eines aktuellen Einzelbildes unter Verwendung einer Bi-Vorhersage vorhergesagt wird, wobei zwei Referenzeinzelbilder verwendet werden können, um einen aktuellen Block vorherzusagen. In der Bi-Vorhersage können sowohl das aktuelle Einzelbild als auch das vorherige Einzelbild, welches für die Bewegungsvektorvorhersage verwendet wird, unter Verwendung von entweder LAST_FRAME 702 oder GOLDEN_FRAME 704 oder unter Verwendung von ALTREF_FRAME 706 rückwärts vorhergesagt werden. Wie vorstehend offenbart in Verbindung mit 6, können offenbarte Aspekte bestimmen, ob ein früheres Einzelbild, das für die Bewegungsvorhersage verwendet wird, dasselbe Referenzeinzelbild aufweist wie ein aktuelles Einzelbild. In Fällen, in denen ein aktuelles Einzelbild und ein vorhergehendes Einzelbild unter Verwendung der Bi-Vorhersage vorhergesagt werden, können Bewegungsvektorkandidaten aus dem gemeinsam angeordneten Block in dem vorherigen Einzelbild durch Nachführaktualisierungen des Referenzeinzelbildpuffers unter Verwendung der folgenden Schritte ermittelt werden:
- (1) Überprüfen, ob eine reibungslose Bewegung über drei aufeinanderfolgende Einzelbilder existiert, indem die Referenzeinzelbildpuffer-Aktualisierungen sowohl für das vorhergehende Einzelbild als auch für das Einzelbild vor dem vorhergehenden verfolgt werden, wobei die folgenden Überprüfungsregeln verwendet werden: Für das Paar des aktuellen Blocks und seines gemeinsam angeordneten Blocks verwenden beide sein vorher kodiertes Einzelbild als Referenz und beide Referenzeinzelbilder weisen die gleiche Vorzeichenvorspannung für die Vorwärtsvorhersage auf;
- (2) Wenn es ein zweites Einzelbild für den aktuellen Block gibt, beispielsweise wenn ein zusammengesetzter Modus für den aktuellen Block verfügbar ist, dann wiederholen Sie Schritt (1) für das zweite Einzelbild, um zu überprüfen, ob eine glatte Bewegung für das zweite Einzelbild vorhanden ist.
- (3) Prüfen Sie, ob die Vorzeichen-Vorspannung eine Rückwärtsvorhersage sowohl für den aktuellen Block als auch für seinen gemeinsam angeordneten Block anzeigt und ob identische Einzelbilder als Referenz für beide Blöcke verwendet wurden, unter Verwendung der folgenden Regel: Prüfen Sie zunächst, ob die aktuellen Blöcke ALTREF_FRAME 706 als Referenzeinzelbilder verwendet werden, was anzeigt, dass eine Rückwärtsbewegung in Betracht gezogen wird; Wenn dies der Fall ist, dann prüfen Sie, ob der gemeinsam angeordnete Block auch Rückwärtsvorhersage verwendet, indem er die Vorzeichen-Vorspannung seines Referenzeinzelbildes identifiziert; wenn ja, dann überprüfen Sie, ob der aktuelle Block und sein Co-lokalisierter Block ein identisches Einzelbild als ihre Referenzen verwenden. Falls dies der Fall ist, wird der dem vorhergehenden Einzelbild zugeordnete Bewegungsvektor vor den restlichen Kandidatenbewegungsvektoren vorverlegt.
- (4) Wenn es ein zweites Einzelbild für den aktuellen Block gibt, beispielsweise wenn ein zusammengesetzter Modus für den aktuellen Block betrachtet wird, dann wiederholen Sie Schritt (3) für das zweite Einzelbild, um zu überprüfen, ob es eine Rückwärtsvorhersage sowohl für den aktuellen Block als auch für die gemeinsam angeordneten Blöcke gibt und beide Blöcke ein identisches Einzelbild für eine Rückwärtsvorhersage verwenden. Falls dies der Fall ist, wird der dem vorhergehenden Einzelbild zugeordnete Bewegungsvektor vor den restlichen Kandidatenbewegungsvektoren vorverlegt.
- (5) Prüfen Sie, ob der aktuelle Block und der zusammengelegte Block ein identisches Einzelbild als Referenzeinzelbild verwenden. Falls dies der Fall ist, wird der dem vorhergehenden Einzelbild zugeordnete Bewegungsvektor vor den restlichen Kandidatenbewegungsvektoren vorverlegt.
- (6) Wenn es ein zweites Einzelbild für den aktuellen Block gibt, beispielsweise wenn ein zusammengesetzter Modus für den aktuellen Block betrachtet wird, dann wiederholen Sie Schritt (5) für das zweite Einzelbild, um zu überprüfen, ob es ein identisches Einzelbild gibt, das sowohl für den aktuellen Block als auch für den zusammengelegten Block als ihre Referenzen verwendet wurde. Falls dies der Fall ist, wird der dem vorhergehenden Einzelbild zugeordnete Bewegungsvektor vor den restlichen Kandidatenbewegungsvektoren vorverlegt.
-
Die vorstehend beschriebenen Aspekte der Codierung und Dekodierung veranschaulichen einige Beispiele von Codier- und Dekodierungstechniken. Es versteht sich jedoch, dass die Codierung und Dekodierung, wie diese in den Ansprüchen verwendet werden, Kompression, Dekomprimierung, Transformation oder jede andere Verarbeitung oder Änderung von Daten bedeuten kann.
-
Das Wort „Beispiel” oder „Aspekt” wird hier verwendet und dient als ein Beispiel, eine Instanz oder Veranschaulichung. Jeder Aspekt oder ein Design, das hierin als „Beispiel” oder „Aspekt” beschrieben wird, 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, soll der Begriff „oder” integrativ „oder” eher ein exklusives „oder” bedeuten. Das heißt, wenn nicht anders angegeben, oder aus dem Kontext klar hervorgeht, beinhaltet „X A oder B” und soll eine beliebige der natürlichen einschließenden Permutationen bedeuten. Das heißt, wenn X A beinhaltet; beinhaltet X B; oder X sowohl A als auch B beinhaltet; dann beinhaltet „X A oder B” das unter einem der vorhergehenden Instanzen erfüllt ist. Zusätzlich sollten die in dieser Anmeldung und den anhängenden Ansprüchen verwendeten Artikel „ein” und „einer” allgemein so ausgelegt werden, dass sie „ein oder mehrere” bedeuten, sofern nicht anders angegeben oder aus dem Kontext klar hervorgeht, dass sie auf eine singuläre Form gerichtet sein sollen. Darüber hinaus soll die Verwendung des Begriffs „eine Implementierung” im Ganzen nicht dieselbe Ausführungsform oder Implementierung bedeuten, solange sie nicht als solche beschrieben ist.
-
Die Implementierungen der Sendestation 102 und/oder der Empfangsstation 106 (und der darauf gespeicherten und/oder ausgeführten Algorithmen, Verfahren, Anweisungen usw. einschließlich des Kodierers 400 und des Dekodierers 500), können in Hardware, Software oder irgendeiner Kombination davon realisiert werden. Die Hardware kann beispielsweise Computer, Intellectual Property Kerne (IP), anwendungsspezifische integrierte Schaltkreise (ASICs), programmierbare Logikarrays, optische Prozessoren, programmierbare Logiksteuerungen, Mikrocodes, Mikrocontroller, Server, Mikroprozessoren, digitale Signalprozessoren oder jede andere geeignete Schaltung beinhalten. In den Ansprüchen sollte der Begriff „Prozessor” so verstanden werden, dass er jede der vorgenannten Hardware entweder einzeln oder in Kombination umfasst. Die Begriffe „Signal” und „Daten” werden austauschbar verwendet. Ferner müssen Teile der Sendestation 102 und der Empfangsstation 106 nicht notwendigerweise in der gleichen Weise implementiert werden.
-
Ferner kann in einem Aspekt zum Beispiel die Sendestation 102 oder die Empfangsstation 106 unter Verwendung eines Allzweckcomputers oder eines Allzweckprozessors 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 andere Hardware zur Ausführung irgendeines der hierin beschriebenen Verfahren, Algorithmen oder Anweisungen enthalten kann.
-
Die Sendestation 102 und die Empfangsstation 106 können beispielsweise auf Computer in einem Videokonferenzsystem implementiert sein. Alternativ kann die Sendestation 102 auf einem Server implementiert sein und die Empfangsstation 106 kann auf einer von dem Server getrennten Vorrichtung implementiert sein, wie beispielsweise einer Handkommunikationsvorrichtung. In diesem Fall kann die Sendestation 102 Inhalte unter Verwendung eines Kodierers 400 in ein kodiertes Videosignal kodieren und das kodierte Videosignal zu dem Kommunikationsgerät übertragen. Im Gegenzug kann die Kommunikationsvorrichtung dann das kodierte Videosignal unter Verwendung eines Dekodierers 500 dekodieren. Alternativ kann die Kommunikationsvorrichtung einen lokal auf der Kommunikationseinrichtung gespeicherten Inhalt dekodieren, beispielsweise einen Inhalt, der nicht von der Sendestation 102 übertragen wurde. Andere geeignete Übertragungs- und Empfangsimplementierungsschemata sind verfügbar. So kann beispielsweise die Empfangsstation 106 ein allgemein stationärer Personalcomputer und nicht eine tragbare Kommunikationsvorrichtung sein, und/oder eine Vorrichtung, die einen Kodierer 400 beinhaltet sein und kann auch einen Dekodierer 500 beinhalten.
-
Ferner können alle oder ein Teil der Implementierungen der vorliegenden Offenbarung die Form eines Computerprogrammprodukts annehmen, das beispielsweise von einem materiellen, computerverwendbaren oder computerlesbaren Medium zugänglich ist. Ein computerverwendbares oder computerlesbares Medium kann eine beliebige Vorrichtung sein, die beispielsweise das Programm zur Verwendung durch oder in Verbindung mit irgendeinem Prozessor greifbar beinhalten, speichern, kommunizieren oder übertragen kann. Das Medium kann beispielsweise eine elektronische, magnetische, optische, elektromagnetische oder eine Halbleitervorrichtung sein. Andere geeignete Medien sind ebenfalls 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 abdecken, die innerhalb des Schutzumfangs der beigefügten Ansprüche beinhaltet sind, wobei dem Umfang die breiteste Auslegung zugestanden werden soll, um alle derartigen Modifikationen und äquivalenten Strukturen die nach dem Gesetz zulässig sind, zu umfassen.