Partager via


IMF2DBuffer2 ::Lock2DSize, méthode (mfobjects.h)

Donne à l’appelant l’accès à la mémoire dans la mémoire tampon.

Syntaxe

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

Paramètres

[in] lockFlags

Membre de l’énumération MF2DBuffer_LockFlags qui spécifie s’il faut verrouiller la mémoire tampon pour la lecture, l’écriture ou les deux.

[out] ppbScanline0

Reçoit un pointeur vers le premier octet de la ligne supérieure de pixels de l’image. La ligne supérieure est définie comme la ligne supérieure lorsque l’image est présentée à la visionneuse et peut ne pas être la première ligne en mémoire.

[out] plPitch

Reçoit le pas de surface, en octets. La progression peut être négative, ce qui indique que l’image est orientée du bas vers le haut en mémoire.

[out] ppbBufferStart

Reçoit un pointeur vers le début de la mémoire tampon accessible en mémoire.

[out] pcbBufferLength

Reçoit la longueur de la mémoire tampon, en octets.

Valeur de retour

Cette méthode peut retourner l’une de ces valeurs.

Retourner le code Description
S_OK
Succès.
MF_E_INVALIDREQUEST
Demande non valide. La mémoire tampon peut déjà être verrouillée avec un indicateur de verrouillage incompatible. Voir les remarques.
E_OUTOFMEMORY
La mémoire est insuffisante pour terminer l’opération.

Remarques

Lorsque vous avez terminé d’accéder à la mémoire, appelez IMF2DBuffer ::Unlock2D pour déverrouiller la mémoire tampon. Vous devez appeler Unlock2D une fois pour chaque appel pour Lock2DSize.

Cette méthode équivaut à la méthode IMF2DBuffer ::Lock2D. Toutefois, lock2DSize est préférable, car il permet à l’appelant de valider les pointeurs de mémoire, et parce qu’il prend en charge les verrous en lecture seule. Une mémoire tampon n’est pas garantie pour prendre en charge l’interface IMF2DBuffer2. Pour accéder à une mémoire tampon, vous devez essayer les méthodes suivantes dans l’ordre indiqué :

  1. IMF2DBuffer2 ::Lock2DSize
  2. IMF2DBuffer ::Lock2D
  3. IMFMediaBuffer ::Lock
Les paramètres ppbBufferStart et ccpBufferLength reçoivent les limites de la mémoire tampon. Utilisez ces valeurs pour vous protéger contre les dépassements de mémoire tampon. Utilisez les valeurs de ppbScanline0 et plPitch pour accéder aux données d’image. Si l’image est en bas de la mémoire, ppbScanline0 pointe vers la dernière ligne d’analyse en mémoire et plPitch sera négatif. Pour plus d’informations, consultez Image Stride .

Le paramètre lockFlags spécifie si la mémoire tampon est verrouillée pour l’accès en lecture seule, l’accès en écriture seule ou l’accès en lecture/écriture.

  • Si la mémoire tampon est déjà verrouillée pour l’accès en lecture seule, elle ne peut pas être verrouillée pour l’accès en écriture.
  • Si la mémoire tampon est déjà verrouillée pour l’accès en écriture seule, elle ne peut pas être verrouillée pour l’accès en lecture.
  • Si la mémoire tampon est déjà verrouillée pour l’accès en lecture/écriture, elle peut être verrouillée pour l’accès en lecture ou en écriture.
Si possible, utilisez un verrou en lecture seule ou en écriture seule et évitez de verrouiller la mémoire tampon pour l’accès en lecture/écriture. Si la mémoire tampon représente une surface DXGI (DirectX Graphics Infrastructure), un verrou en lecture/écriture peut entraîner une copie supplémentaire entre la mémoire processeur et la mémoire GPU.

Exigences

Exigence Valeur
client minimum pris en charge Windows 8 [applications de bureau | Applications UWP]
serveur minimum pris en charge Windows Server 2012 [applications de bureau | Applications UWP]
plateforme cible Windows
d’en-tête mfobjects.h (include Mfidl.h)

Voir aussi

IMF2DBuffer2