Metodo IMediaSeeking::SetPositions (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 SetPositions
metodo imposta la posizione corrente e la posizione di arresto.
Sintassi
HRESULT SetPositions(
[in, out] LONGLONG *pCurrent,
[in] DWORD dwCurrentFlags,
[in, out] LONGLONG *pStop,
[in] DWORD dwStopFlags
);
Parametri
[in, out] pCurrent
[in,out] Puntatore a una variabile che specifica la posizione corrente, in unità del formato ora corrente.
[in] dwCurrentFlags
Combinazione bit per bit di flag. Vedere la sezione Osservazioni.
[in, out] pStop
[in,out] Puntatore a una variabile che specifica l'ora di arresto, in unità di misura del formato ora corrente.
[in] dwStopFlags
Combinazione bit per bit di flag. Vedere la sezione Osservazioni.
Valore restituito
Restituisce un valore HRESULT . Di seguito sono indicati alcuni valori possibili.
Codice restituito | Descrizione |
---|---|
|
Nessun cambiamento di posizione. Entrambi i flag non specificano alcuna ricerca. |
|
Operazione completata. |
|
Argomento non valido. |
|
Il metodo non è supportato. |
|
Argomento puntatore NULL. |
Commenti
I parametri dwCurrentFlags e dwStopFlags definiscono il tipo di seek. Vengono definiti i flag seguenti.
Flag di posizionamento | Descrizione |
---|---|
AM_SEEKING_NoPositioning | Nessun cambiamento di posizione. Il parametro time può essere NULL. |
AM_SEEKING_AbsolutePositioning | La posizione specificata è assoluta. |
AM_SEEKING_RelativePositioning | La posizione specificata è relativa al valore precedente. |
AM_SEEKING_IncrementalPositioning | La posizione di arresto (pStop) è relativa alla posizione corrente (pCurrent). |
Flag di modifica | Descrizione |
---|---|
AM_SEEKING_SeekToKeyFrame | Cercare il fotogramma chiave più vicino. Questo potrebbe essere più veloce, ma meno accurato. Nessuno dei filtri forniti con DirectShow supporta questo flag. I decodificatori sono il tipo di filtro più probabile per supportarlo. |
AM_SEEKING_ReturnTime | Restituisce i tempi di riferimento equivalenti. |
AM_SEEKING_Segment | Usare la ricerca di segmenti. |
AM_SEEKING_NoFlush | Non scaricare. |
Per ogni parametro, usare un flag di posizionamento. Facoltativamente, includere uno o più flag di modifica.
Se viene specificato il flag AM_SEEKING_ReturnTime, il metodo converte il valore della posizione in un'ora di riferimento e lo restituisce nella variabile pCurrent o pStop . Questo flag è utile se si usa un altro formato temporale, ad esempio frame.
I flag AM_SEEKING_Segment e AM_SEEKING_NoFlush supportano il ciclo facile:
- Se il flag AM_SEEKING_Segment è presente, il filtro di origine invia un evento EC_END_OF_SEGMENT quando raggiunge la posizione di arresto, anziché chiamare IPin::EndOfStream. L'applicazione può attendere questo evento e quindi eseguire un altro comando seek.
- Se il flag AM_SEEKING_NoFlush è presente, il grafico non scarica i dati durante la ricerca. Usare questo flag con AM_SEEKING_Segment.
I valori in ingresso di pCurrent e pStop sono espressi nel formato ora corrente. Il formato di ora predefinito è REFERENCE_TIME unità (100 nanosecondi). Per modificare i formati temporali, utilizzare il metodo IMediaSeeking::SetTimeFormat . Se il flag AM_SEEKING_ReturnTime è presente, il metodo converte il valore in uscita in unità di REFERENCE_TIME .
Filtrare gli sviluppatori
Se si implementa questo metodo, è possibile verificare se il chiamante richiede una modifica nella posizione corrente o di arresto, usando il valore AM_SEEKING_PositioningBitsMask per mascherare i flag di modificatore. Ad esempio:
DWORD dwCurrentPos = dwCurrentFlags & AM_SEEKING_PositioningBitsMask if (dwCurrentPos == AM_SEEKING_AbsolutePositioning) { // Set new position to pCurrent. m_rtStart = *pCurrent; } else if (dwCurrentPos == AM_SEEKING_RelativePositioning) { // Increment current position by pCurrent. m_rtStart += *pCurrent; } |
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 |