IMF2DBuffer::Lock2D-Methode (mfobjects.h)

Gewährt dem Aufrufer Zugriff auf den Speicher im Puffer.

Syntax

HRESULT Lock2D(
  [out] BYTE **ppbScanline0,
  [out] LONG *plPitch
);

Parameter

[out] ppbScanline0

Empfängt einen Zeiger auf das erste Byte der oberen Pixelzeile im Bild. Die oberste Zeile wird als oberste Zeile definiert, wenn das Bild dem Viewer angezeigt wird, und ist möglicherweise nicht die erste Zeile im Arbeitsspeicher.

[out] plPitch

Empfängt den Oberflächenschritt in Bytes. Der Schritt kann negativ sein, was angibt, dass das Bild im Arbeitsspeicher von unten nach oben ausgerichtet ist.

Rückgabewert

Die Methode gibt ein HRESULT zurück. Mögliches Werte (aber nicht die Einzigen) sind die in der folgenden Tabelle.

Rückgabecode BESCHREIBUNG
S_OK
Die Methode wurde erfolgreich ausgeführt.
D3DERR_INVALIDCALL
Die Direct3D-Oberfläche kann nicht gesperrt werden.
MF_E_INVALIDREQUEST
Der Puffer kann derzeit nicht gesperrt werden.

Hinweise

Wenn p ein Zeiger auf das erste Byte in einer Pixelzeile ist, zeigt p + (*plPitch) auf das erste Byte in der nächsten Pixelzeile. Ein Puffer kann eine Auffüllung nach jeder Pixelzeile enthalten, sodass der Schritt größer als die Breite des Bilds in Bytes sein kann. Greifen Sie nicht auf den Speicher zu, der für Das Auffüllen von Bytes reserviert ist, da er möglicherweise nicht auf Lesezugriff oder Schreibzugriff zugegriffen werden kann. Weitere Informationen finden Sie unter Image Stride.

Der in pbScanline0 zurückgegebene Zeiger bleibt gültig, solange der Aufrufer die Sperre hält. Wenn Sie mit dem Zugriff auf den Arbeitsspeicher fertig sind, rufen Sie IMF2DBuffer::Unlock2D auf, um den Puffer zu entsperren. Sie müssen Unlock2D einmal für jeden Aufruf von Lock2D aufrufen. Nachdem Sie den Puffer entsperrt haben, ist der in pbScanline0 zurückgegebene Zeiger nicht mehr gültig und sollte nicht mehr verwendet werden. Im Allgemeinen ist es am besten, Lock2D nur dann aufzurufen, wenn Sie auf den Pufferspeicher zugreifen müssen, und nicht früher.

Die von den Methoden IMFMediaBuffer::GetCurrentLength und IMFMediaBuffer::GetMaxLength zurückgegebenen Werte gelten nicht für den Puffer, der von der Lock2D-Methode zurückgegeben wird. Aus demselben Grund müssen Sie IMFMediaBuffer::SetCurrentLength nicht aufrufen, nachdem Sie die Daten im Puffer bearbeitet haben, der von der Lock2D-Methode zurückgegeben wurde.

Die IMFMediaBuffer::Lock-Methode schlägt fehl, während die Lock2D-Sperre gehalten wird und umgekehrt. Anwendungen sollten jeweils nur eine dieser Methoden verwenden.

Wenn der zugrunde liegende Puffer eine Direct3D-Oberfläche ist, schlägt die Methode fehl, wenn die Oberfläche nicht gesperrt werden kann.

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)
Bibliothek Mfuuid.lib

Weitere Informationen

IMF2DBuffer

Medienpuffer

Nicht komprimierte Videopuffer