Partager via


Interface IMF2DBuffer (mfobjects.h)

Représente une mémoire tampon qui contient une surface à deux dimensions, telle qu’une trame vidéo.

Héritage

L’interface IMF2DBuffer hérite de l’interface IUnknown. IMF2DBuffer a également les types de membres suivants :

Méthodes

L’interface IMF2DBuffer a ces méthodes.

 
IMF2DBuffer ::ContiguousCopyFrom

Copie les données dans cette mémoire tampon à partir d’une mémoire tampon dont le format est contigu.
IMF2DBuffer ::ContiguousCopyTo

Copie cette mémoire tampon dans la mémoire tampon de l’appelant, en convertissant les données au format contigu.
IMF2DBuffer ::GetContiguousLength

Récupère le nombre d’octets nécessaires pour stocker le contenu de la mémoire tampon dans un format contigu.
IMF2DBuffer ::GetScanline0AndPitch

Récupère un pointeur vers la mémoire tampon et la surface stride.
IMF2DBuffer ::IsContiguousFormat

Demande si la mémoire tampon est contiguë dans son format natif.
IMF2DBuffer ::Lock2D

Permet à l’appelant d’accéder à la mémoire dans la mémoire tampon. (IMF2DBuffer.Lock2D)
IMF2DBuffer ::Unlock2D

Déverrouille une mémoire tampon précédemment verrouillée. Appelez cette méthode une fois pour chaque appel à IMF2DBuffer ::Lock2D.

Remarques

Pour obtenir un pointeur vers cette interface, appelez QueryInterface sur la mémoire tampon multimédia.

Pour utiliser une mémoire tampon 2D, il est important de connaître la foulée, qui est le nombre d’octets nécessaires pour passer d’une ligne de pixels à la suivante. La foulée peut être supérieure à la largeur de l’image, car la surface peut contenir des octets de remplissage après chaque ligne de pixels. La foulée peut également être négative si les pixels sont orientés de bas en haut en mémoire. Pour plus d’informations, consultez Image Stride.

Chaque format vidéo définit une représentation contiguë ou empaquetée. Cette représentation est compatible avec la disposition standard d’une surface DirectX dans la mémoire système, sans remplissage supplémentaire. Pour la vidéo RVB, la représentation contiguë a une hauteur égale à la largeur de l’image en octets, arrondie à la limite DWORD la plus proche. Pour la vidéo YUV, la disposition de la représentation contiguë dépend du format YUV. Pour les formats YUV planaires, le plan Y peut avoir une hauteur différente de celle des plans you et V.

Si une mémoire tampon multimédia prend en charge l’interface IMF2DBuffer , il n’est pas garanti que la mémoire tampon sous-jacente ait une représentation contiguë, car il peut y avoir des octets de remplissage supplémentaires après chaque ligne de pixels. Lorsqu’une mémoire tampon est non contiguë, les méthodes Lock et Lock2D ont des comportements différents :

  • La méthode Lock2D retourne un pointeur vers la mémoire tampon sous-jacente. La mémoire tampon peut ne pas être contiguë.
  • La méthode Lock retourne une mémoire tampon dont la contiguïté est garantie. Si la mémoire tampon sous-jacente n’est pas contiguë, la méthode copie les données dans une nouvelle mémoire tampon et la méthode Unlock les copie dans la mémoire tampon d’origine.
Appelez la méthode Lock2D pour accéder à la mémoire tampon 2D dans son format natif. Le format natif peut ne pas être contigu. La méthode IMFMediaBuffer ::Lock de la mémoire tampon retourne une représentation contiguë de la mémoire tampon. Toutefois, cela peut nécessiter une copie interne à partir du format natif. Pour les mémoires tampons 2D, vous devez donc utiliser la méthode Lock2D et éviter la méthode Lock . Étant donné que la méthode Lock peut entraîner jusqu’à deux copies de mémoire tampon, la méthode Lock2D est généralement plus efficace et doit être utilisée dans la mesure du possible. Pour savoir si la mémoire tampon sous-jacente est contiguë, appelez IMF2DBuffer ::IsContiguousFormat.

Pour les images non compressées, la quantité de données valides dans la mémoire tampon est déterminée par la largeur, la hauteur et la disposition en pixels de l’image. Pour cette raison, si vous appelez Lock2D pour accéder à la mémoire tampon, ne vous appuyez pas sur les valeurs retournées par IMFMediaBuffer ::GetCurrentLength ou IMFMediaBuffer ::GetMaxLength. De même, si vous modifiez les données dans la mémoire tampon, vous n’avez pas besoin d’appeler IMFMediaBuffer ::SetCurrentLength pour mettre à jour la taille. En règle générale, vous devez éviter de mélanger les appels aux méthodes IMF2DBuffer et IMFMediaBuffer sur la même mémoire tampon multimédia.

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 (include Mfidl.h)

Voir aussi

Mémoires tampons multimédias

Interfaces Media Foundation

Mémoires tampons vidéo non compressées