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.]
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 :
- 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.
- Appelez la méthode CBaseAllocator::Commit pour allouer les mémoires tampons.
- 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.
- 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.
- 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 |
|
Bibliothèque |
|