Classe CPosPassThru

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

gerarchia di classi di base cpospassthru

La CPosPassThru classe gestisce i comandi per i filtri di trasformazione passandoli a monte al filtro successivo.

Quando un'applicazione cerca il grafico del filtro, Filter Graph Manager fornisce il comando di ricerca ai filtri del renderer. Il comando viene passato a monte, tramite il pin di output di ogni filtro, fino a raggiungere un filtro che può eseguire il comando (se presente). Per informazioni dettagliate, vedere Ricerca. La CPosPassThru classe passa tutti i comandi di ricerca al pin di output nel filtro upstream, come illustrato nel diagramma seguente.

la classe cpospassthru invia comandi di ricerca upstream.

Anche se questa classe viene fornita nella libreria di classi di base, DirectShow fornisce anche la stessa classe in Quartz.dll. L'uso della versione Quartz.dll può ridurre le dimensioni del codice nel filtro in qualche modo, perché la classe viene caricata in fase di esecuzione dalla DLL. Per usare tale versione, chiamare la funzione CreatePosPassThru .

Nel metodo NonDelegatingQueryInterface del pin di output delegare all'oggetto CPosPassThru ogni volta che l'interfaccia richiesta è IMediaSeeking o IMediaPosition, come illustrato nel codice seguente:

// 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();
}

Tranne dove indicato, tutti i metodi IMediaPosition e IMediaSeeking in questa classe chiamano il metodo corrispondente sul pin connesso e restituiscono il risultato.

Metodi pubblici Descrizione
CPosPassThru Metodo costruttore.
ForceRefresh Obsoleta.
GetMediaTime Recupera i timestamp nell'esempio corrente. Virtuale.
Metodi IMediaPosition Descrizione
get_Duration Recupera la durata del flusso.
put_CurrentPosition Imposta la posizione corrente, rispetto alla durata totale del flusso.
get_StopTime Recupera il tempo in cui la riproduzione si arresterà, rispetto alla durata del flusso.
put_StopTime Imposta il tempo in cui la riproduzione si arresterà, in relazione alla durata del flusso.
get_PrerollTime Recupera la quantità di dati che verranno accodati prima della posizione iniziale.
put_PrerollTime Imposta la quantità di dati che verranno accodati prima della posizione iniziale.
get_Rate Recupera la frequenza di riproduzione.
put_Rate Imposta la frequenza di riproduzione.
get_CurrentPosition Recupera la posizione corrente, rispetto alla durata totale del flusso.
CanSeekForward Determina se il flusso può essere cercato all'indietro.
CanSeekBackward Determina se il flusso può essere cercato in avanti.
Metodi IMediaSeeking Descrizione
CheckCapabilities Esegue query sul fatto che un flusso abbia specificato le funzionalità di ricerca.
ConvertTimeFormat Converte da un formato all'altro.
GetAvailable Recupera l'intervallo di volte in cui la ricerca è efficiente.
GetCapabilities Recupera tutte le funzionalità di ricerca del flusso.
GetCurrentPosition Recupera la posizione corrente, rispetto alla durata totale del flusso.
GetDuration Recupera la durata del flusso.
GetPositions Recupera la posizione corrente e la posizione di arresto, rispetto alla durata totale del flusso.
GetPreroll Recupera la quantità di dati che verranno accodati prima della posizione iniziale.
GetRate Recupera la frequenza di riproduzione.
GetStopPosition Recupera il tempo in cui la riproduzione si arresterà, rispetto alla durata del flusso.
GetTimeFormat Recupera il formato ora corrente.
IsFormatSupported Determina se è supportato un formato di tempo specificato.
IsUsingTimeFormat Determina se un formato ora specificato è il formato attualmente in uso.
QueryPreferredFormat Recupera il formato di tempo preferito per il flusso.
SetPositions Imposta la posizione corrente e la posizione di arresto.
SetRate Imposta la frequenza di riproduzione.
SetTimeFormat Imposta il formato ora.
Funzioni di supporto Descrizione
CreatePosPassThru Crea un CPosPassThru oggetto o CRendererPosPassThru .

Requisiti

Requisito Valore
Intestazione
Ctlutil.h (includere Streams.h)
Libreria
Strmbase.lib (build al dettaglio);
Strmbasd.lib (build di debug)