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.
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.
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 |
|
Libreria |
|