CPosPassThru, classe

cpospassthru base class hierarchy

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

Lorsqu’une application recherche le graphique de filtre, le Gestionnaire de filtre Graph donne la commande seek aux filtres du renderer. La commande est passée en amont, via l’épingle 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 à l’épingle de sortie sur le filtre en amont, comme illustré dans le diagramme suivant.

the cpospassthru class sends seek commands upstream.

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 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 broche 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 l’épingle connectée et retournent le résultat.

Méthodes publiques Description
CPosPassThru Méthode constructeur.
ForceRefresh Obsolète.
GetMediaTime Récupère les horodatages de 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 à une autre.
GetAvailable Récupère l’intervalle de temps dans lequel 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 (inclure Flux.h)
Bibliothèque
Strmbase.lib (builds de vente au détail) ;
Strmbasd.lib (builds de débogage)