Méthode IMFMediaBuffer ::Lock (mfobjects.h)
Donne à l’appelant l’accès à la mémoire dans la mémoire tampon, pour la lecture ou l’écriture
Syntaxe
HRESULT Lock(
[out] BYTE **ppbBuffer,
[out] DWORD *pcbMaxLength,
[out] DWORD *pcbCurrentLength
);
Paramètres
[out] ppbBuffer
Reçoit un pointeur vers le début de la mémoire tampon.
[out] pcbMaxLength
Reçoit la quantité maximale de données pouvant être écrites dans la mémoire tampon. Ce paramètre peut être NULL. La même valeur est retournée par la méthode IMFMediaBuffer ::GetMaxLength .
[out] pcbCurrentLength
Reçoit la longueur des données valides dans la mémoire tampon, en octets. Ce paramètre peut être NULL. La même valeur est retournée par la méthode IMFMediaBuffer ::GetCurrentLength .
Valeur retournée
Cette méthode retourne un code HRESULT. Les valeurs possibles sont notamment celles figurant dans le tableau suivant.
Code de retour | Description |
---|---|
|
S_OK |
|
Pour les tampons de surface Direct3D, une erreur s’est produite lors du verrouillage de la surface. |
|
La mémoire tampon ne peut pas être verrouillée pour le moment. |
Remarques
Cette méthode permet à l’appelant d’accéder à l’intégralité de la mémoire tampon, jusqu’à la taille maximale retournée dans le paramètre pcbMaxLength . La valeur retournée dans pcbCurrentLength correspond à la taille de toutes les données valides déjà dans la mémoire tampon, qui peut être inférieure à la taille totale de la mémoire tampon.
La validité du pointeur retourné dans ppbBuffer est garantie et est accessible en toute sécurité sur l’ensemble de la mémoire tampon tant que le verrou est conservé. Lorsque vous avez terminé d’accéder à la mémoire tampon, appelez IMFMediaBuffer ::Unlock pour déverrouiller la mémoire tampon. Vous devez appeler Déverrouiller une fois pour chaque appel à Verrouiller. Une fois que vous avez déverrouillé la mémoire tampon, le pointeur retourné dans ppbBuffer n’est plus valide et ne doit pas être utilisé. En règle générale, il est préférable d’appeler Lock uniquement lorsque vous avez besoin d’accéder à la mémoire tampon, et pas avant.
Le verrouillage de la mémoire tampon n’empêche pas d’autres threads d’appeler Lock. Vous ne devez donc pas compter sur cette méthode pour synchroniser les threads.
Cette méthode peut allouer de la mémoire, mais ne transfère pas la propriété de la mémoire à l’appelant. Ne relâchez pas ou ne libérez pas la mémoire ; la mémoire tampon multimédia libère la mémoire lorsque la mémoire tampon multimédia est détruite.
Si vous modifiez le contenu de la mémoire tampon, mettez à jour la longueur actuelle en appelant IMFMediaBuffer ::SetCurrentLength.
Cette méthode peut allouer de la mémoire en interne. Par conséquent, si la mémoire tampon prend en charge l’interface IMF2DBuffer , vous devez utiliser la méthode IMF2DBuffer ::Lock2D pour verrouiller la mémoire tampon à la place. Pour les mémoires tampons 2D, la méthode Lock2DSize peut être plus efficace que la méthode Lock , en fonction de la valeur MF2DBuffer_LockFlags que vous spécifiez. L’appel de Lock2DSize avec MF2DBuffer_LockFlags_Read n’entraîne pas de copie lorsque la mémoire tampon est déverrouillée et l’appelant avec MF2DBuffer_LockFlags_Write n’entraîne pas de copie à partir de la mémoire tampon interne. L’appel de Lock2DSize avec LockFlags_ReadWrite se comporte de la même façon que Lock et Lock2D et entraîne une copie à partir de et une copie en cas de déverrouillage. Les conseils généraux pour optimiser les performances sont d’éviter d’utiliser IMFMediaBuffer et IMF2DBuffer chaque fois que possible, et d’utiliser IMF2DBuffer2 avec les indicateurs de verrouillage minimum requis. Notez que si la mémoire tampon est verrouillée à l’aide de Lock2D, la méthode Lock peut retourner MF_E_INVALIDREQUEST.
Cette interface est disponible sur les plateformes suivantes si les composants redistribuables du SDK Windows Media Format 11 sont installés :
- Windows XP avec Service Pack 2 (SP2) et versions ultérieures.
- Windows XP Media Center Edition 2005 avec KB900325 (Windows XP Media Center Edition 2005) et KB925766 (correctif cumulatif d’octobre 2006 pour Windows XP Édition Media Center) installés.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows Vista [applications de bureau | applications UWP] |
Serveur minimal pris en charge | Windows Server 2008 [applications de bureau | applications UWP] |
Plateforme cible | Windows |
En-tête | mfobjects.h (inclure Mfidl.h) |
Bibliothèque | Mfuuid.lib |