Classe CBaseRenderer

[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 cbaserenderer

La CBaseRenderer classe est une classe de base permettant d’implémenter des filtres de convertisseur. Il prend en charge une broche d’entrée, implémentée par la classe CRendererInputPin . Pour utiliser cette classe, déclarez une classe dérivée qui hérite de CBaseRenderer. Au minimum, la classe dérivée doit implémenter les méthodes suivantes, qui sont déclarées comme virtuelles pures dans la classe de base :

  • CBaseRenderer::CheckMediaType : accepte ou rejette les types de médias proposés. Le filtre appelle cette méthode pendant le processus de connexion d’épingle.
  • CBaseRenderer::D oRenderSample : affiche un exemple. Le filtre appelle cette méthode pour chaque échantillon qu’il reçoit lors de l’exécution.

La classe de base gère les modifications d’état et les problèmes de synchronisation. Il planifie également des échantillons pour le rendu, bien qu’il n’implémente aucune mesure de contrôle de la qualité. La classe de base déclare également plusieurs méthodes « handler ». Il s’agit de méthodes que le filtre appelle à des points spécifiques du processus de diffusion en continu. Ils ne font rien dans la classe de base, mais la classe dérivée peut les remplacer. Dans le tableau qui suit, ils sont répertoriés sous le titre Méthodes publiques : gestionnaires.

Le gestionnaire CBaseRenderer::OnReceiveFirstSample mérite une mention spéciale. Le filtre appelle cette méthode s’il reçoit un exemple pendant que le filtre est suspendu. Cela peut se produire si le graphique passe d’arrêté à suspendu, ou si le graphique est recherché pendant la pause. Les convertisseurs vidéo utilisent généralement l’exemple pour afficher une image fixe. Lorsque le filtre passe de en pause à l’exécution, il envoie le même exemple à la méthode CBaseRenderer::D oRenderSample , que le premier exemple du flux.

La CBaseRenderer classe expose les interfaces IMediaSeeking et IMediaPosition via l’objet CRendererPosPassThru . Il transmet toutes les demandes de recherche au filtre suivant amont.

Planification

Lorsque le filtre amont appelle la méthode IMemInputPin::Receive de la broche d’entrée pour remettre un exemple, l’épingle passe cet appel à la méthode CBaseRenderer::Receive du filtre. Le filtre supprime l’exemple, le restitue immédiatement ou le planifie pour le rendu.

Si l’exemple n’a pas d’horodatage, ou si aucune horloge de référence n’est disponible, le filtre restitue immédiatement l’exemple. Sinon, le filtre appelle la méthode CBaseRenderer::ShouldDrawSampleNow pour déterminer ce qu’il faut faire. Par défaut, l’exemple est planifié en fonction de ses horodatages. La classe dérivée peut remplacer ShouldDrawSampleNow pour prendre en charge le contrôle qualité.

Pour planifier un exemple, le filtre appelle la méthode IReferenceClock::AdviseTime , qui crée une demande d’avis. La méthode Receive se bloque ensuite jusqu’à ce que l’heure planifiée, ou jusqu’à ce que le filtre change d’état. Le blocage empêche le filtre amont de fournir davantage d’exemples tant que l’exemple actuel n’est pas rendu.

Lorsque le filtre amont appelle la méthode IPin::EndOfStream pour signaler la fin du flux, le filtre envoie un événement EC_COMPLETE au gestionnaire de graphe de filtres. Le filtre attend l’heure d’arrêt de l’exemple actuel avant d’envoyer l’événement.

Variables de membre protégé Description
m_bAbort Indicateur qui indique s’il faut arrêter le rendu et rejeter d’autres exemples.
m_bEOS Indicateur qui indique si la fin du flux a été atteinte.
m_bEOSDelivered Indicateur qui indique si le filtre a publié l’événement EC_COMPLETE.
m_bInReceive Indicateur qui indique si le filtre traite un appel de réception .
m_bRepaintStatus Indicateur qui active ou désactive les événements de repaint.
m_bStreaming Indicateur qui indique si le filtre diffuse des données.
m_dwAdvise Identificateur de l’événement du minuteur qui planifie le rendu.
m_EndOfStreamTimer Identificateur d’événement du minuteur, pour la planification EC_COMPLETE notifications.
m_evComplete Événement signalé lorsqu’une transition d’état est terminée.
m_InterfaceLock Verrouillage de l’état du filtre.
m_ObjectCreationLock Verrou pour protéger la création d’objets à l’intérieur du filtre.
m_pInputPin Pointeur vers la broche d’entrée du filtre.
m_pMediaSample Pointeur vers l’exemple de média actuel.
m_pPosition Objet d’assistance à passer des commandes de recherche amont.
m_pQSink Pointeur vers l’objet qui reçoit des messages de contrôle qualité.
m_RendererLock Verrouillage de diffusion en continu.
m_RenderEvent Événement utilisé pour planifier le rendu.
m_SignalTime Arrêtez l’heure sur l’exemple actuel.
m_ThreadSignal Événement utilisé pour libérer le thread de streaming.
Méthodes publiques Description
CancelNotification Annule l’événement du minuteur qui planifie le rendu. Virtuel.
CBaseRenderer Méthode du constructeur.
~CBaseRenderer Méthode de destructeur.
GetMediaPositionInterface Récupère les pointeurs d’interface IMediaPosition et IMediaSeeking du filtre. Virtuel.
GetPin Récupère une épingle. Virtuel.
GetPinCount Récupère le nombre d’épingles. Virtuel.
GetSampleTimes Récupère les horodatages d’un exemple. Virtuel.
OnDisplayChange Publie un événement EC_DISPLAY_CHANGED dans le gestionnaire de graphe de filtres.
PrepareReceive Prépare le rendu d’un exemple. Virtuel.
Recevoir Reçoit l’exemple de média suivant dans le flux. Virtuel.
Rendu Affiche un exemple. Virtuel.
ScheduleSample Planifie un exemple pour le rendu. Virtuel.
SendNotifyWindow Avertit le filtre amont du handle de fenêtre vidéo.
SendRepaint Envoie un événement de repaint au gestionnaire de graphe de filtres.
SetMediaType Appelé lorsque le type de média de l’épingle est défini. Virtuel.
SignalTimerFired Efface l’identificateur du minuteur utilisé pour planifier le rendu.
SourceThreadCanWait Conserve ou libère le thread de diffusion en continu. Virtuel.
WaitForReceiveToComplete Attend la fin de la méthode CBaseRenderer::Receive .
WaitForRenderTime Attend l’heure de présentation de l’exemple actuel. Virtuel.
Méthodes publiques : méthodes d’accesseur Description
ClearPendingSample Libère l’exemple actuel. Virtuel.
GetCurrentSample Récupère l’exemple actuel. Virtuel.
GetRealState Récupère l’état du filtre.
GetRenderEvent Récupère l’événement qui planifie le rendu.
HaveCurrentSample Détermine si le filtre a un exemple. Virtuel.
IsEndOfStream Demande si la notification de fin de flux a été reçue.
IsEndOfStreamDelivered Demande si l’événement EC_COMPLETE a été remis au gestionnaire de graphe de filtres.
IsStreaming Interroge si le filtre diffuse des données.
SetAbortSignal Définit un indicateur qui indique s’il faut arrêter le rendu et rejeter d’autres exemples.
SetRepaintStatus Active ou désactive les événements de repaint.
Méthodes publiques : méthodes State-Change Description
Actif Appelé lorsque l’état est basculé en pause ou en cours d’exécution. Virtuel.
BeginFlush Commence une opération de vidage. Virtuel.
BreakConnect Libère la broche d’entrée d’une connexion. Virtuel.
CheckReady Interroge si une transition d’état est terminée.
CompleteConnect Termine la connexion de la broche d’entrée à une autre broche. Virtuel.
CompleteStateChange Détermine si une transition vers l’état suspendu est terminée. Virtuel.
EndFlush Met fin à une opération de vidage. Virtuel.
Inactif Appelé lorsque l’état est basculé sur arrêté. Virtuel.
NotReady Signale qu’une transition d’état n’est pas encore terminée.
Prêt Signale qu’une transition d’état est terminée.
StartStreaming Lance la diffusion en continu lorsque le filtre passe à un état d’exécution. Virtuel.
StopStreaming Arrête la diffusion en continu lorsque le filtre sort de l’état d’exécution. Virtuel.
Méthodes publiques : méthodes de fin de flux Description
EndOfStream Avertit le filtre que la broche d’entrée a reçu une notification de fin de flux. Virtuel.
NotifyEndOfStream Publie un événement EC_COMPLETE dans le gestionnaire de graphe de filtre.
ResetEndOfStream Réinitialise les indicateurs de fin de flux.
ResetEndOfStreamTimer Annule le minuteur qui planifie les notifications EC_COMPLETE. Virtuel.
SendEndOfStream Si la fin du flux a été atteinte, planifie un événement EC_COMPLETE pour le gestionnaire de graphe de filtre. Virtuel.
TimerCallback Méthode de rappel pour l’événement du minuteur de fin de flux.
Méthodes publiques : gestionnaires Description
OnReceiveFirstSample Appelé lorsque le filtre reçoit un exemple en pause. Virtuel.
OnRenderEnd Appelé après le rendu d’un exemple. Virtuel.
OnRenderStart Appelé lorsque le rendu est sur le point de démarrer. Virtuel.
OnStartStreaming Appelé lorsque le filtre commence à diffuser en continu. Virtuel.
OnStopStreaming Appelé lorsque le filtre arrête la diffusion en continu. Virtuel.
OnWaitEnd Appelé lorsque le filtre est terminé en attendant l’heure de présentation d’un exemple. Virtuel.
OnWaitStart Appelé lorsque le filtre commence à attendre l’heure de présentation d’un exemple. Virtuel.
PrepareRender Appelé avant que le filtre ne restitue un exemple. Virtuel.
ShouldDrawSampleNow Détermine la façon dont un exemple est planifié pour le rendu. Virtuel.
Méthodes virtuelles pures Description
CheckMediaType Détermine si le filtre accepte un type de média spécifique.
DoRenderSample Affiche un exemple.
Méthodes IMediaFilter Description
GetState Récupère l’état du filtre (en cours d’exécution, arrêté ou suspendu).
Suspendre Interrompt le filtre.
Exécuter Permet d'exécuter le filtre.
Arrêter Arrête le filtre.
Méthodes IBaseFilter Description
FindPin Récupère la broche avec l’identificateur spécifié.

Configuration requise

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