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.]
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 |
|
Bibliothèque |
|