Freigeben über


IMF2DBuffer-Schnittstelle (mfobjects.h)

Stellt einen Puffer dar, der eine zweidimensionale Oberfläche enthält, z. B. einen Videoframe.

Vererbung

Die IMF2DBuffer-Schnittstelle erbt von der IUnknown-Schnittstelle . IMF2DBuffer verfügt auch über folgende Membertypen:

Methoden

Die IMF2DBuffer-Schnittstelle verfügt über diese Methoden.

 
IMF2DBuffer::ContiguousCopyFrom

Kopiert Daten aus einem Puffer mit einem zusammenhängenden Format in diesen Puffer.
IMF2DBuffer::ContiguousCopyTo

Kopiert diesen Puffer in den Puffer des Aufrufers und konvertiert die Daten in ein zusammenhängendes Format.
IMF2DBuffer::GetContiguousLength

Ruft die Anzahl der Bytes ab, die zum Speichern des Pufferinhalts im zusammenhängenden Format erforderlich sind.
IMF2DBuffer::GetScanline0AndPitch

Ruft einen Zeiger auf den Pufferspeicher und den Oberflächenschritt ab.
IMF2DBuffer::IsContiguousFormat

Fragt ab, ob der Puffer im nativen Format zusammenhängend ist.
IMF2DBuffer::Lock2D

Gewährt dem Aufrufer Zugriff auf den Arbeitsspeicher im Puffer. (IMF2DBuffer.Lock2D)
IMF2DBuffer::Unlock2D

Entsperrt einen Puffer, der zuvor gesperrt war. Rufen Sie diese Methode einmal für jeden Aufruf von IMF2DBuffer::Lock2D auf.

Hinweise

Um einen Zeiger auf diese Schnittstelle zu erhalten, rufen Sie QueryInterface für den Medienpuffer auf.

Um einen 2D-Puffer zu verwenden, ist es wichtig, den Schritt zu kennen, d. h. die Anzahl der Bytes, die benötigt werden, um von einer Zeile mit Pixeln zur nächsten zu wechseln. Der Schritt kann größer als die Bildbreite sein, da die Oberfläche nach jeder Zeile von Pixeln Auffüllungsbytes enthalten kann. Stride kann auch negativ sein, wenn die Pixel im Arbeitsspeicher von unten nach oben ausgerichtet sind. Weitere Informationen finden Sie unter Bildstride.

Jedes Videoformat definiert eine zusammenhängende oder gepackte Darstellung. Diese Darstellung ist mit dem Standardlayout einer DirectX-Oberfläche im Systemspeicher ohne zusätzlichen Abstand kompatibel. Bei RGB-Videos weist die zusammenhängende Darstellung eine Neigung auf, die der Bildbreite in Bytes entspricht und auf die nächste DWORD-Grenze aufgerundet wird. Bei YUV-Videos hängt das Layout der zusammenhängenden Darstellung vom YUV-Format ab. Bei planaren YUV-Formaten kann die Y-Ebene eine andere Tonhöhe aufweisen als die Ebenen "Sie" und "V".

Wenn ein Medienpuffer die IMF2DBuffer-Schnittstelle unterstützt, wird nicht garantiert, dass der zugrunde liegende Puffer über eine zusammenhängende Darstellung verfügt, da nach jeder Pixelzeile möglicherweise zusätzliche Auffüllungsbytes vorhanden sind. Wenn ein Puffer nicht zusammenhängend ist, weisen die Lock - und Lock2D-Methoden unterschiedliche Verhaltensweisen auf:

  • Die Lock2D-Methode gibt einen Zeiger auf den zugrunde liegenden Puffer zurück. Der Puffer ist möglicherweise nicht zusammenhängend.
  • Die Lock-Methode gibt einen Puffer zurück, der garantiert zusammenhängend ist. Wenn der zugrunde liegende Puffer nicht zusammenhängend ist, kopiert die Methode die Daten in einen neuen Puffer, und die Unlock-Methode kopiert sie wieder in den ursprünglichen Puffer.
Rufen Sie die Lock2D-Methode auf, um auf den 2D-Puffer im nativen Format zuzugreifen. Das native Format ist möglicherweise nicht zusammenhängend. Die IMFMediaBuffer::Lock-Methode des Puffers gibt eine zusammenhängende Darstellung des Puffers zurück. Dies kann jedoch eine interne Kopie aus dem nativen Format erfordern. Für 2D-Puffer sollten Sie daher die Lock2D-Methode verwenden und die Lock-Methode vermeiden. Da die Lock-Methode bis zu zwei Pufferkopien verursachen kann, ist die Lock2D-Methode im Allgemeinen effizienter und sollte nach Möglichkeit verwendet werden. Um herauszufinden, ob der zugrunde liegende Puffer zusammenhängend ist, rufen Sie IMF2DBuffer::IsContiguousFormat auf.

Bei nicht komprimierten Bildern wird die Menge der gültigen Daten im Puffer durch die Breite, Höhe und das Pixellayout des Bilds bestimmt. Wenn Sie Lock2D aufrufen, um auf den Puffer zuzugreifen, verlassen Sie sich daher nicht auf die Werte, die von IMFMediaBuffer::GetCurrentLength oder IMFMediaBuffer::GetMaxLength zurückgegeben werden. Wenn Sie die Daten im Puffer ändern, müssen Sie auch nicht IMFMediaBuffer::SetCurrentLength aufrufen, um die Größe zu aktualisieren. Im Allgemeinen sollten Sie das Mischen von Aufrufen der METHODEN IMF2DBuffer und IMFMediaBuffer auf demselben Medienpuffer vermeiden.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile mfobjects.h (include Mfidl.h)

Weitere Informationen

Medienpuffer

Media Foundation-Schnittstellen

Nicht komprimierte Videopuffer