Freigeben über


IMF2DBuffer2::Lock2DSize-Methode (mfobjects.h)

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

Syntax

HRESULT Lock2DSize(
  [in]  MF2DBuffer_LockFlags lockFlags,
  [out] BYTE                 **ppbScanline0,
  [out] LONG                 *plPitch,
  [out] BYTE                 **ppbBufferStart,
  [out] DWORD                *pcbBufferLength
);

Parameter

[in] lockFlags

Ein Member der MF2DBuffer_LockFlags-Enumeration , das angibt, ob der Puffer zum Lesen, Schreiben oder beides gesperrt werden soll.

[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.

[out] ppbBufferStart

Empfängt einen Zeiger auf den Anfang des zugänglichen Puffers im Arbeitsspeicher.

[out] pcbBufferLength

Empfängt die Länge des Puffers in Bytes.

Rückgabewert

Diese Methode kann einen dieser Werte zurückgeben.

Rückgabecode BESCHREIBUNG
S_OK
Erfolg.
MF_E_INVALIDREQUEST
Ungültige Anforderung. Der Puffer ist möglicherweise bereits mit einem inkompatiblen Sperrflag gesperrt. Siehe Hinweise.
E_OUTOFMEMORY
Es ist nicht genügend Arbeitsspeicher vorhanden, um den Vorgang abzuschließen.

Hinweise

Wenn Sie mit dem Zugriff auf den Arbeitsspeicher fertig sind, rufen Sie IMF2DBuffer::Unlock2D auf, um den Puffer zu entsperren. Sie müssen Unlock2D für jeden Aufruf von Lock2DSize einmal aufrufen.

Diese Methode entspricht der IMF2DBuffer::Lock2D-Methode . Lock2DSize wird jedoch bevorzugt, da der Aufrufer Speicherzeiger überprüfen kann und schreibgeschützte Sperren unterstützt. Es ist nicht garantiert, dass ein Puffer die IMF2DBuffer2-Schnittstelle unterstützt. Um auf einen Puffer zuzugreifen, sollten Sie die folgenden Methoden in der aufgeführten Reihenfolge ausprobieren:

  1. IMF2DBuffer2::Lock2DSize
  2. IMF2DBuffer::Lock2D
  3. IMFMediaBuffer::Lock
Die Parameter ppbBufferStart und pcbBufferLength empfangen die Grenzen des Pufferspeichers. Verwenden Sie diese Werte, um vor Pufferüberläufen zu schützen. Verwenden Sie die Werte von ppbScanline0 und plPitch , um auf die Bilddaten zuzugreifen. Wenn sich das Bild unten im Arbeitsspeicher befindet, zeigt ppbScanline0 auf die letzte Scanzeile im Arbeitsspeicher, und plPitch ist negativ. Weitere Informationen finden Sie unter Image Stride.

Der lockFlags-Parameter gibt an, ob der Puffer für schreibgeschützten Zugriff, schreibgeschützten Zugriff oder Lese-/Schreibzugriff gesperrt ist.

  • Wenn der Puffer bereits für den schreibgeschützten Zugriff gesperrt ist, kann er nicht für den Schreibzugriff gesperrt werden.
  • Wenn der Puffer bereits für schreibgeschützten Zugriff gesperrt ist, kann er nicht für den Lesezugriff gesperrt werden.
  • Wenn der Puffer bereits für den Lese-/Schreibzugriff gesperrt ist, kann er für lese- oder schreibzugriff gesperrt werden.
Verwenden Sie nach Möglichkeit eine schreibgeschützte oder schreibgeschützte Sperre, und vermeiden Sie das Sperren des Puffers für Lese-/Schreibzugriff. Wenn der Puffer eine DXGI-Oberfläche (DirectX Graphics Infrastructure) darstellt, kann eine Lese-/Schreibsperre zu einer zusätzlichen Kopie zwischen CPU-Arbeitsspeicher und GPU-Arbeitsspeicher führen.

Anforderungen

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

Weitere Informationen

IMF2DBuffer2