Share via


Classe CBaseAllocator

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

Hiérarchie de classes cbaseallocator

La classe CBaseAllocator est une classe de base abstraite qui implémente un allocateur. Les allocateurs exposent l’interface IMemAllocator .

Un allocateur est un objet qui alloue des mémoires tampons. L’allocateur gère une liste de mémoires tampons disponibles. Lorsqu’un client (généralement un filtre) demande une mémoire tampon, l’allocateur en récupère une dans la liste. Le client remplit la mémoire tampon avec des données et peut passer la mémoire tampon à un autre objet. Finalement, la mémoire tampon est libérée et l’allocateur la retourne à la liste des mémoires tampons disponibles.

Chaque mémoire tampon est encapsulée par un objet appelé exemple de média. Les exemples de média permettent de mettre en package des pointeurs vers des blocs de mémoire dans l’infrastructure COM (Component Object Model). Les exemples multimédias exposent l’interface IMediaSample et sont implémentés à l’aide de la classe CMediaSample . Un exemple de média contient un pointeur vers la mémoire tampon associée, accessible en appelant la méthode IMediaSample::GetPointer . Pour plus d’informations, consultez Exemples et allocateurs.

Pour utiliser cette classe, procédez comme suit :

  1. Appelez la méthode CBaseAllocator::SetProperties pour spécifier les exigences de mémoire tampon, y compris le nombre de mémoires tampons et la taille de chaque mémoire tampon.
  2. Appelez la méthode CBaseAllocator::Commit pour allouer les mémoires tampons.
  3. Appelez la méthode CBaseAllocator::GetBuffer pour récupérer des exemples multimédias. Cette méthode se bloque jusqu’à ce que l’exemple suivant soit disponible.
  4. Lorsque vous avez terminé avec chaque exemple, appelez la méthode IUnknown::Release sur l’exemple. L’exemple n’est pas supprimé lorsque son nombre de références atteint zéro. Au lieu de cela, l’exemple retourne à la liste libre de l’allocateur.
  5. Lorsque vous avez terminé d’utiliser l’allocateur, appelez la méthode CBaseAllocator::D ecommit pour libérer la mémoire pour les mémoires tampons.

La méthode Commit appelle la méthode virtuelle CBaseAllocator::Alloc, qui alloue la mémoire pour les mémoires tampons. La méthode Decommit appelle la méthode virtuelle pure CBaseAllocator::Free, qui libère la mémoire. Les classes dérivées doivent remplacer ces deux méthodes.

La classe de base CMemAllocator dérive de CBaseAllocator. Les classes de base de filtre utilisent la classe CMemAllocator .

Variables de membre protégé Description
m_lFree Pointeur vers une liste d’exemples multimédias (gratuits) disponibles.
m_hSem Sémaphore signalé lorsqu’un échantillon devient disponible.
m_lWaiting Nombre de threads en attente d’échantillons.
m_lCount Nombre de mémoires tampons à fournir.
m_lAllocated Nombre de mémoires tampons actuellement allouées.
m_lSize Taille de chaque mémoire tampon.
m_lAlignment Alignement de chaque mémoire tampon.
m_lPrefix Préfixe de chaque mémoire tampon.
m_bChanged Indicateur indiquant si les exigences de la mémoire tampon ont changé.
m_bCommitted Indicateur indiquant si l’allocateur a été commité.
m_bDecommitInProgress Indicateur indiquant si une opération de dégagement est en cours.
m_pNotify Pointeur vers une interface de rappel, qui est appelée lorsque des exemples sont libérés.
m_fEnableReleaseCallback Indicateur indiquant si le rappel de mise en production est activé.
Méthodes protégées Description
Alloc Alloue de la mémoire pour les mémoires tampons. Virtuel.
Méthodes publiques Description
CBaseAllocator Méthode du constructeur.
~ CBaseAllocator Méthode de destructeur.
SetNotify Obsolète.
GetFreeCount Récupère le nombre d’exemples de médias qui ne sont pas utilisés.
NotifySample Libère tous les threads en attente d’exemples.
Set Waiting Incrémente le nombre de threads en attente.
Méthodes virtuelles pures Description
Gratuit Libère toute la mémoire tampon.
IMemAllocator, méthodes Description
SetProperties Spécifie le nombre de mémoires tampons à allouer et la taille de chaque mémoire tampon.
GetProperties Récupère le nombre de mémoires tampons créées par l’allocateur et les propriétés de la mémoire tampon.
Commit Alloue la mémoire pour les mémoires tampons.
Désengagement Déscommit les mémoires tampons.
GetBuffer Récupère un exemple de média qui contient une mémoire tampon.
ReleaseBuffer Retourne un exemple de média à la liste des exemples multimédias gratuits.

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

Fournir un allocateur personnalisé