Arbeiten mit Videoframes

Unkomprimiertes Video ist eine Sequenz von Bitmaps, die in schneller Folge wiedergegeben werden, in der Regel mit einer Rate von etwa 30 Bildern pro Sekunde. Da die meisten Videos in einem komprimierten Format in einen DirectShow-Filtergraphen gelangen, durchläuft der Videostream in der Regel einen Decoder für die Dekomprimierung. Viele Decoder ausgeben Daten in einem YUV-Format und lassen die endgültige Konvertierung in RGB für die Videohardware unmittelbar vor dem Rendern. Wenn ein Decoder DirectX Video Acceleration verwendet, führt die Videohardware zusätzliche Arbeit aus, um das Bild zu decodieren. Daher kann die endgültige Dekomprimierung der Bitmaps erst durchgeführt werden, wenn die Daten die Videohardware erreichen.

Um jedoch viele Arten der Videoanalyse, -verarbeitung oder -bearbeitung auszuführen, ist es oft erforderlich, an unkomprimierten Bitmaps in einem RGB- oder YUV-Format zu arbeiten, bevor sie gerendert oder in eine Datei geschrieben werden. Diese Arbeit erfolgt in der Regel innerhalb eines Transformationsfilters, der auf der Basisklasse CTransformFilter basiert, insbesondere in der Transform-Methode. Diese Methode empfängt einen Zeiger auf ein IMediaSample-Objekt, das die Videodaten kapselt. Die IMediaSample::GetPointer-Methode gibt einen Zeiger auf das erste Byte der Rohdaten zurück. Bei nicht komprimierten Frames bestehen diese Daten aus Pixeln, auf die direkt über den Filter zugegriffen oder geändert werden kann. Die folgenden Abschnitte enthalten Hintergrundinformationen, mit denen Sie auf diese Weise effektiv mit DIB-Daten arbeiten können.

Hinweis

Sie können die Bits auch mithilfe von GDI-, GDI+-, DirectDraw- oder Direct3D-Funktionen ändern, aber diese Techniken gehen über den Rahmen dieses Artikels hinaus.

Dieser Abschnitt enthält die folgenden Themen: