Partager via


Méthode CBaseAllocator.GetBuffer

[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.]

La GetBuffer méthode récupère un exemple de média qui contient une mémoire tampon. Cette méthode implémente la méthode IMemAllocator::GetBuffer .

Syntaxe

HRESULT GetBuffer(
   IMediaSample   **ppBuffer,
   REFERENCE_TIME *pStartTime,
   REFERENCE_TIME *pEndTime,
   DWORD          dwFlags
);

Paramètres

ppBuffer

Reçoit un pointeur vers l’interface IMediaSample de la mémoire tampon. L’appelant doit libérer l’interface.

pStartTime

Pointeur vers l’heure de début de l’exemple.

pEndTime

Pointeur vers l’heure de fin de l’exemple.

dwFlags

Combinaison au niveau du bit de zéro ou plusieurs indicateurs. La classe de base prend en charge l’indicateur suivant.

Valeur Signification
AM_GBF_NOWAIT
N’attendez pas qu’une mémoire tampon soit disponible.

Valeur renvoyée

Retourne l’une des valeurs HRESULT suivantes.

Code de retour Description
S_OK
Opération réussie.
VFW_E_NOT_COMMITTED
L’allocateur n’a pas été commité.
VFW_E_TIMEOUT
A expiré.

Notes

Sauf si l’appelant spécifie l’indicateur AM_GBF_NOWAIT dans dwFlags, cette méthode se bloque jusqu’à ce que l’exemple suivant soit disponible.

L’exemple de média récupéré a un pointeur valide vers la mémoire tampon allouée. L’appelant est chargé de définir toutes les autres propriétés de l’exemple, telles que les horodatages, les heures de média ou la propriété de point de synchronisation. Pour plus d’informations, consultez IMediaSample.

Dans la classe de base, les paramètres pStartTime et pEndTime sont ignorés. Les classes dérivées peuvent utiliser ces valeurs. Par exemple, l’allocateur pour le filtre Video Renderer utilise ces valeurs pour synchroniser le basculement entre les surfaces DirectDraw.

Si la méthode doit attendre sur un exemple, elle incrémente le nombre d’objets en attente (CBaseAllocator::m_lCount) et appelle la fonction WaitForSingleObject sur le sémaphore (CBaseAllocator::m_hSem). Lorsqu’un exemple devient disponible, il appelle la méthode CBaseAllocator::ReleaseBuffer sur l’allocateur, ce qui augmente le nombre de sémaphores d’m_lCount (libérant ainsi les threads en attente) et rétablit m_lCount à zéro.

Configuration requise

Condition requise Valeur
En-tête
Amfilter.h (include Streams.h)
Bibliothèque
Strmbase.lib (builds de vente au détail) ;
Strmbasd.lib (builds de débogage)

Voir aussi

CBaseAllocator, classe