Partager via


Méthode ISampleGrabber::GetCurrentBuffer

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation au lieu de DirectShow, si possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Notes

[Déconseillé. Cette API peut être supprimée des versions ultérieures de Windows.]

 

La méthode GetCurrentBuffer récupère une copie de la mémoire tampon associée à l’exemple le plus récent.

Syntaxe

HRESULT GetCurrentBuffer(
  [in, out] long *pBufferSize,
  [out]     long *pBuffer
);

Paramètres

pBufferSize [in, out]

Pointeur vers la taille de la mémoire tampon. Si pBuffer a la valeur NULL, ce paramètre reçoit la taille de mémoire tampon requise, en octets. Si pBuffer n’a pas la valeur NULL, définissez ce paramètre sur la taille de la mémoire tampon, en octets. Lors de la sortie, le paramètre reçoit le nombre d’octets qui ont été copiés dans la mémoire tampon. Cette valeur peut être inférieure à la taille de la mémoire tampon.

pBuffer [out]

Pointeur vers un tableau d’octets de taille pBufferSize ou NULL. Si ce paramètre n’est pas NULL, la mémoire tampon actuelle est copiée dans le tableau. Si ce paramètre a la valeur NULL, le paramètre pBufferSize reçoit la taille de mémoire tampon requise.

Valeur renvoyée

Retourne l’une des valeurs suivantes.

Code de retour Description
E_INVALIDARG
Les exemples ne sont pas mis en mémoire tampon. Appelez ISampleGrabber::SetBufferSamples.
E_OUTOFMEMORY
La mémoire tampon spécifiée n’est pas assez grande.
E_POINTER
Argument pointeur NULL .
S_OK
Opération réussie.
VFW_E_NOT_CONNECTED
Le filtre n’est pas connecté.
VFW_E_WRONG_STATE
Le filtre n’a pas encore reçu d’échantillons. Pour fournir un exemple, exécutez ou suspendez le graphique.

 

Notes

Pour activer la mise en mémoire tampon, appelez ISampleGrabber::SetBufferSamples avec la valeur TRUE.

Appelez cette méthode deux fois. Lors du premier appel, définissez pBuffer sur NULL. La taille de la mémoire tampon est retournée dans pBufferSize. Ensuite, allouez un tableau et appelez à nouveau la méthode. Lors du deuxième appel, passez la taille du tableau dans pBufferSize et transmettez l’adresse du tableau dans pBuffer. Si le tableau n’est pas assez grand, la méthode retourne E_OUTOFMEMORY.

Le paramètre pBuffer est typé en tant que pointeur long , mais le contenu de la mémoire tampon dépend du format des données. Appelez ISampleGrabber::GetConnectedMediaType pour obtenir le type de média du format.

N’appelez pas cette méthode pendant l’exécution du graphique de filtre. Pendant l’exécution du graphe de filtres, le filtre Sample Grabber remplace le contenu de la mémoire tampon chaque fois qu’il reçoit un nouvel exemple. La meilleure façon d’utiliser cette méthode consiste à utiliser le « mode one shot », qui arrête le graphique après avoir reçu le premier échantillon. Pour définir le mode one shot, appelez ISampleGrabber::SetOneShot.

Le filtre ne met pas en mémoire tampon les exemples de pré-inscription, ni les exemples dans lesquels le membre dwStreamId de la structure AM_SAMPLE2_PROPERTIES est autre chose que AM_STREAM_MEDIA.

Notes

Le fichier d’en-tête Qedit.h n’est pas compatible avec les en-têtes Direct3D ultérieurs à la version 7.

 

Notes

Pour obtenir Qedit.h, téléchargez Microsoft Windows SDK Update pour Windows Vista et .NET Framework 3.0. Qedit.h n’est pas disponible dans le Microsoft Windows SDK pour Windows 7 et .NET Framework 3.5 Service Pack 1.

 

Configuration requise

Condition requise Valeur
En-tête
Qedit.h
Bibliothèque
Strmiids.lib

Voir aussi

Utilisation de l’exemple de capture

ISampleGrabber, interface