Partager via


Classe CPosPassThru

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La capture audio/vidéo dans Media Foundation au lieu de DirectShow, lorsque cela est 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 classe de base cpospassthru

La CPosPassThru classe gère les commandes de recherche pour les filtres de transformation, en les passant amont au filtre suivant.

Lorsqu’une application recherche le graphe de filtre, le Gestionnaire de graphe de filtre donne la commande seek aux filtres du convertisseur. La commande est transmise amont, via la broche de sortie de chaque filtre, jusqu’à ce qu’elle atteigne un filtre qui peut exécuter la commande (le cas échéant). Pour plus d’informations, consultez Recherche. La CPosPassThru classe transmet toutes les commandes de recherche à la broche de sortie sur le filtre amont, comme illustré dans le diagramme suivant.

la classe cpospassthru envoie des commandes de recherche amont.

Bien que cette classe soit fournie dans la bibliothèque de classes de base, DirectShow fournit également la même classe dans Quartz.dll. L’utilisation de la version Quartz.dll peut réduire quelque peu la taille du code dans votre filtre, car la classe est chargée au moment de l’exécution à partir de la DLL. Pour utiliser cette version, appelez la fonction CreatePosPassThru .

Dans la méthode NonDelegatingQueryInterface de votre code pin de sortie, déléguer à l’objet CPosPassThru chaque fois que l’interface demandée est IMediaSeeking ou IMediaPosition, comme indiqué dans le code suivant :

// The following member variables are assumed:
IPin *m_pInput;    // Pointer to the input pin on your filter.
IUnknown *m_pPos;  // Pointer to the CPosPassThru object.

STDMETHODIMP CMyPin::NonDelegatingQueryInterface(REFIID riid, void **ppv)
{
    HRESULT hr
    if (riid == IID_IMediaPosition || riid == IID_IMediaSeeking) 
    {
        if (m_pPos == NULL) 
        {
            // We have not created the CPosPassThru object yet. Do so now.
            hr = CreatePosPassThru(GetOwner(), FALSE, m_pInput, &m_pPos);
            if (FAILED(hr)) return hr;
        }
        return m_pPos->QueryInterface(riid, ppv);
    } 
    else
    {
         // Other interfaces (not shown).
    }
}

~CMyPin::CMyPin() 
{
    // Release the CPosPassThruObject.
    if (m_pPos != NULL) m_pPos->Release();
}

Sauf indication contraire, toutes les méthodes IMediaPosition et IMediaSeeking de cette classe appellent la méthode correspondante sur la broche connectée et retournent le résultat.

Méthodes publiques Description
CPosPassThru Méthode du constructeur.
ForceRefresh Obsolète.
GetMediaTime Récupère les horodatages sur l’exemple actuel. Virtuel.
Méthodes IMediaPosition Description
get_Duration Récupère la durée du flux.
put_CurrentPosition Définit la position actuelle par rapport à la durée totale du flux.
get_StopTime Récupère l’heure à laquelle la lecture s’arrête, par rapport à la durée du flux.
put_StopTime Définit l’heure à laquelle la lecture s’arrête, par rapport à la durée du flux.
get_PrerollTime Récupère la quantité de données qui seront mises en file d’attente avant la position de début.
put_PrerollTime Définit la quantité de données qui seront mises en file d’attente avant la position de début.
get_Rate Récupère le taux de lecture.
put_Rate Définit le taux de lecture.
get_CurrentPosition Récupère la position actuelle, par rapport à la durée totale du flux.
CanSeekForward Détermine si le flux peut être recherché vers l’arrière.
CanSeekBackward Détermine si le flux peut être recherché vers l’avant.
Méthodes IMediaSeeking Description
CheckCapabilities Interroge si un flux a spécifié des fonctionnalités de recherche.
ConvertTimeFormat Convertit d’un format de temps à un autre.
GetAvailable Récupère la plage de temps dans laquelle la recherche est efficace.
GetCapabilities Récupère toutes les fonctionnalités de recherche du flux.
GetCurrentPosition Récupère la position actuelle, par rapport à la durée totale du flux.
GetDuration Récupère la durée du flux.
GetPositions Récupère la position actuelle et la position d’arrêt, par rapport à la durée totale du flux.
GetPreroll Récupère la quantité de données qui seront mises en file d’attente avant la position de début.
GetRate Récupère le taux de lecture.
GetStopPosition Récupère l’heure à laquelle la lecture s’arrête, par rapport à la durée du flux.
GetTimeFormat Récupère le format d’heure actuel.
IsFormatSupported Détermine si un format d’heure spécifié est pris en charge.
IsUsingTimeFormat Détermine si un format d’heure spécifié est le format actuellement utilisé.
QueryPreferredFormat Récupère le format d’heure préféré pour le flux.
SetPositions Définit la position actuelle et la position d’arrêt.
SetRate Définit le taux de lecture.
SetTimeFormat Définit le format d’heure.
Fonctions d’assistance Description
CreatePosPassThru Crée un CPosPassThru objet ou CRendererPosPassThru .

Configuration requise

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