Partager via


Méthode IMF2DBuffer2 ::Lock2DSize (mfobjects.h)

Permet à l’appelant d’accéder à 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 dans 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 la foulée de surface, en octets. La foulée peut être négative, indiquant que l’image est orientée de bas en 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 retournée

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

Code de retour Description
S_OK
Réussite.
MF_E_INVALIDREQUEST
Demande non valide. La mémoire tampon est peut-être déjà verrouillée avec un indicateur de verrouillage incompatible. Consultez la section Notes.
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 à Lock2DSize.

Cette méthode est équivalente à 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. Il n’est pas garanti qu’une mémoire tampon prend 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 pcbBufferLength 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 de bas en haut en mémoire, ppbScanline0 pointe vers la dernière ligne d’analyse dans la mémoire et plPitch est 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.
Lorsque cela est 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 d’infrastructure graphique DirectX (DXGI), un verrou en lecture/écriture peut entraîner une copie supplémentaire entre la mémoire processeur et la mémoire GPU.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8 [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2012 [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête mfobjects.h (include Mfidl.h)

Voir aussi

IMF2DBuffer2