Metodo IMediaSeeking::SetRate (strmif.h)
[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine 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, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.
Il SetRate
metodo imposta la frequenza di riproduzione.
Sintassi
HRESULT SetRate(
[in] double dRate
);
Parametri
[in] dRate
Velocità di riproduzione. Non deve essere zero.
Valore restituito
Restituisce un valore HRESULT . Di seguito sono indicati alcuni valori possibili.
Codice restituito | Descrizione |
---|---|
|
Operazione completata. |
|
La frequenza specificata è zero o un valore negativo. (Vedere Note). |
|
Non implementato. |
|
Argomento puntatore NULL. |
|
Il dispositivo audio o il filtro non supporta questa frequenza. |
Commenti
La velocità di riproduzione viene espressa come rapporto della velocità normale. Pertanto, 1,0 è normale velocità di riproduzione, 0,5 è metà velocità e 2,0 è due volte velocità. Per i flussi audio, la modifica della frequenza cambia anche l'inclinazione.
I valori negativi indicano la riproduzione inversa. La maggior parte dei filtri non supporta la riproduzione negativa, ma restituisce invece un codice di errore se il parametro dRate è negativo.
Quando un'applicazione chiama questo metodo in Filter Graph Manager, Filter Graph Manager esegue le operazioni seguenti:
- Chiama il metodo IMediaSeeking::GetCurrentPosition . Questa chiamata restituisce la posizione corrente calcolata da Filter Graph Manager.
- Arresta il grafico del filtro (se il grafico è in pausa o in esecuzione).
- Chiama il metodo IMediaSeeking::SetPositions sui filtri, con la posizione corrente come ora di inizio. Questo ha l'effetto di reimpostare il tempo di flusso su zero.
- Chiama il
SetRate
metodo sui filtri, con la nuova frequenza. - Riprende il grafico del filtro, se è stato sospeso o in esecuzione.
I filtri devono rispondere alle modifiche alla frequenza come indicato di seguito:
Parser e filtri di origine: Il filtro che ha origine i timestamp risponde alla SetRate
chiamata. Si tratta in genere di un filtro parser, ad esempio il filtro di divisione AVI, ma potrebbe trattarsi di un filtro di origine. Dopo qualsiasi modifica di ricerca o frequenza, il filtro deve chiamare il metodo IPin::NewSegment con le nuove impostazioni. Dopo una modifica della frequenza, deve modificare i timestamp di conseguenza. Poiché una modifica della frequenza è preceduta da una ricerca, i timestamp vengono riavviati da zero, quindi il filtro può semplicemente dividere per la frequenza per calcolare i nuovi timestamp.
Filtri del decodificatore: I decodificatori non devono agire sulle SetRate
chiamate diverse da passarle a monte. Devono invece rispondere alla chiamata NewSegment che il parser upstream emette. Quando un filtro decodificatore riceve nuove informazioni sul segmento, deve archiviare i valori e passare la chiamata NewSegment downstream. Alcuni decodificatori devono generare timestamp aggiuntivi interpolando il proprio input; devono prendere in considerazione le modifiche al tasso in caso di tale operazione.
Renderer: I renderer video possono in genere ignorare le modifiche alla frequenza, perché i fotogrammi in ingresso hanno già il timestamp corretto. I renderer audio devono modificare la frequenza di riproduzione, perché i decodificatori audio in genere non apportano conversioni di modifica della frequenza.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows 2000 Server [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | strmif.h (include Dshow.h) |
Libreria | Strmiids.lib |