Condividi tramite


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
S_FALSE
Nessun cambiamento di posizione. Entrambi i flag non specificano alcuna ricerca.
S_OK
Operazione completata.
E_INVALIDARG
Argomento non valido.
E_NOTIMPL
Il metodo non è supportato.
E_POINTER
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.
Per eseguire il ciclo, il grafico deve segnalare AM_SEEKING_CanDoSegments nel metodo IMediaSeeking::GetCapabilities . Attualmente, solo il filtro parser WAVE supporta questa funzionalità.

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;
}
Per altre informazioni, vedere il codice sorgente per il metodo CSourceSeeking::SetPositions nella libreria di classi di base.

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

Vedi anche

Codici di errore e di esito positivo

Interfaccia IMediaSeeking