CSource, classe
[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 CSource est une classe de base permettant d’implémenter des filtres sources. Un filtre dérivé de CSource contient une ou plusieurs broches de sortie dérivées de la classe CSourceStream . Chaque broche de sortie crée un thread de travail qui envoie des exemples multimédias en aval.
Notes
La classe CSource est conçue pour prendre en charge le modèle Push pour le flux de données. Cette classe n’est pas recommandée pour la création de filtres de lecteur de fichiers. Les lecteurs de fichiers doivent prendre en charge le modèle d’extraction par le biais de l’interface IAsyncReader . Pour plus d’informations, consultez Data Flow pour les développeurs de filtres.
Variables de membre protégé | Description |
---|---|
m_iPins | Nombre d’épingles sur le filtre. |
m_paStreams | Tableau de broches. |
m_cStateLock | Objet de section critique qui protège l’état du filtre. |
Méthodes publiques | Description |
CSource | Méthode du constructeur. |
~CSource | Méthode de destructeur. |
GetPinCount | Récupère le nombre de broches sur le filtre. |
GetPin | Récupère une épingle. |
pStateLock | Récupère un pointeur vers l’objet de section critique du filtre. |
AddPin | Ajoute une nouvelle broche de sortie au filtre. |
RemovePin | Supprime une broche spécifiée du filtre. |
FindPinNumber | Récupère le numéro d’une broche spécifiée sur le filtre. |
IBaseFilter, méthodes | Description |
FindPin | Récupère l’épingle avec l’identificateur spécifié. |
Notes
Pour implémenter une broche de sortie, procédez comme suit :
- Dérivez une classe de CSourceStream.
- Remplacez la méthode CSourceStream::GetMediaType et éventuellement la méthode CSourceStream::CheckMediaType , qui valide les types de médias pour l’épingle.
- Implémentez la méthode CBaseOutputPin::D ecideBufferSize , qui retourne les exigences de mémoire tampon de l’épingle.
- Implémentez la méthode CSourceStream::FillBuffer , qui remplit un exemple de mémoire tampon de média avec des données.
Pour implémenter le filtre, procédez comme suit :
- Dérivez une classe de CSource.
- Dans le constructeur, créez une ou plusieurs broches de sortie dérivées de CSourceStream. Les broches s’ajoutent automatiquement au filtre dans leurs méthodes de constructeur et se suppriment elles-mêmes dans leurs méthodes de destructeur.
Pour synchroniser l’état du filtre entre plusieurs threads, appelez la méthode CSource::p StateLock . Cette méthode retourne un pointeur vers la section critique de l’état de filtre. Utilisez la classe CAutoLock pour contenir la section critique. À partir d’un code confidentiel, vous pouvez accéder à pStateLock à partir de la variable membre CBasePin::m_pFilter de l’épingle, comme suit :
CAutoLock lock(m_pFilter->pStateLock());
Configuration requise
Condition requise | Valeur |
---|---|
En-tête |
|
Bibliothèque |
|