IMFMediaBuffer::Lock-Methode (mfobjects.h)
Gewährt dem Aufrufer Zugriff auf den Speicher im Puffer zum Lesen oder Schreiben.
Syntax
HRESULT Lock(
[out] BYTE **ppbBuffer,
[out] DWORD *pcbMaxLength,
[out] DWORD *pcbCurrentLength
);
Parameter
[out] ppbBuffer
Empfängt einen Zeiger auf den Anfang des Puffers.
[out] pcbMaxLength
Empfängt die maximale Datenmenge, die in den Puffer geschrieben werden kann. Dieser Parameter kann NULL sein. Der gleiche Wert wird von der IMFMediaBuffer::GetMaxLength-Methode zurückgegeben.
[out] pcbCurrentLength
Empfängt die Länge der gültigen Daten im Puffer in Bytes. Dieser Parameter kann NULL sein. Der gleiche Wert wird von der IMFMediaBuffer::GetCurrentLength-Methode zurückgegeben.
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 |
---|---|
|
Die Methode wurde erfolgreich ausgeführt. |
|
Bei Direct3D-Oberflächenpuffern ist beim Sperren der Oberfläche ein Fehler aufgetreten. |
|
Der Puffer kann derzeit nicht gesperrt werden. |
Hinweise
Diese Methode gewährt dem Aufrufer Zugriff auf den gesamten Puffer bis zur maximalen Größe, die im parameter pcbMaxLength zurückgegeben wird. Der in pcbCurrentLength zurückgegebene Wert ist die Größe aller gültigen Daten, die sich bereits im Puffer befinden, was kleiner als die Gesamtpuffergröße sein kann.
Der in ppbBuffer zurückgegebene Zeiger ist garantiert gültig und kann sicher über den gesamten Puffer zugegriffen werden, solange die Sperre gehalten wird. Wenn Sie mit dem Zugriff auf den Puffer fertig sind, rufen Sie IMFMediaBuffer::Unlock auf, um den Puffer zu entsperren. Sie müssen die Entsperrung für jeden Aufruf von Lock einmal aufrufen. Nachdem Sie den Puffer entsperrt haben, ist der in ppbBuffer zurückgegebene Zeiger nicht mehr gültig und sollte nicht verwendet werden. Im Allgemeinen empfiehlt es sich, die Sperre nur aufzurufen, wenn Sie auf den Pufferspeicher zugreifen müssen, und nicht früher.
Das Sperren des Puffers verhindert nicht, dass andere Threads die Sperre aufrufen, sodass Sie sich nicht auf diese Methode verlassen sollten, um Threads zu synchronisieren.
Diese Methode kann Arbeitsspeicher zuordnen, aber der Besitz des Arbeitsspeichers wird nicht an den Aufrufer übertragen. Geben Sie den Arbeitsspeicher nicht frei. Der Medienpuffer gibt den Speicher frei, wenn der Medienpuffer zerstört wird.
Wenn Sie den Inhalt des Puffers ändern, aktualisieren Sie die aktuelle Länge, indem Sie IMFMediaBuffer::SetCurrentLength aufrufen.
Diese Methode kann intern speicherseitig zugeordnet werden. Wenn der Puffer also die IMF2DBuffer-Schnittstelle unterstützt, sollten Sie stattdessen die IMF2DBuffer::Lock2D-Methode verwenden, um den Puffer zu sperren. Bei 2D-Puffern kann die Lock2DSize-Methode je nach MF2DBuffer_LockFlags angegebenen Wert effizienter sein als die Lock-Methode. Wenn Sie Lock2DSize mit MF2DBuffer_LockFlags_Read aufrufen, wird keine Kopie zurückgerufen, wenn der Puffer entsperrt ist, und wenn Sie ihn mit MF2DBuffer_LockFlags_Write aufrufen, entsteht keine Kopie aus dem internen Puffer. Das Aufrufen von Lock2DSize mit LockFlags_ReadWrite verhält sich genauso wie Lock und Lock2D und verursacht beim Entsperren eine Kopie von und zurück. Die allgemeine Anleitung für eine optimale Leistung besteht darin, die Verwendung von IMFMediaBuffer und IMF2DBuffer nach Möglichkeit zu vermeiden und stattdessen IMF2DBuffer2 mit den mindestens erforderlichen Sperrflags zu verwenden. Wenn der Puffer mit Lock2D gesperrt ist, gibt die Lock-Methode möglicherweise MF_E_INVALIDREQUEST zurück.
Diese Schnittstelle ist auf den folgenden Plattformen verfügbar, wenn die verteilbaren Windows Media Format 11 SDK-Komponenten installiert sind:
- Windows XP mit Service Pack 2 (SP2) und höher.
- Windows XP Media Center Edition 2005 mit KB900325 (Windows XP Media Center Edition 2005) und KB925766 (Updaterollup für Windows XP Media Center Edition) vom Oktober 2006) installiert.
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 |