Esecuzione di query per la ricerca di funzionalità

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

Microsoft® DirectShow® supporta la ricerca tramite l'interfaccia IMediaSeeking. Filter Graph Manager espone questa interfaccia, ma la funzionalità di ricerca viene sempre implementata dai filtri nel grafico.

Alcuni dati non possono essere cercati. Ad esempio, non è possibile cercare un flusso video live da una fotocamera. Se un flusso è ricercabile, tuttavia, potrebbero essere supportati vari tipi di ricerca. tra cui:

  • Ricerca di una posizione arbitraria nel flusso.
  • Recupero della durata del flusso.
  • Recupero della posizione corrente all'interno del flusso.
  • Giocare inverso.

L'interfaccia IMediaSeeking definisce un set di flag, AM_edizione StandardEKING_edizione StandardEKING_CAPABILITIES, che descrivono le possibili funzionalità di ricerca. Per recuperare le funzionalità del flusso, chiamare il metodo IMediaSeeking::GetCapabilities. Il metodo restituisce una combinazione bit per bit di flag. L'applicazione può testarli usando l'operatore AND (bit per bit). Ad esempio, il codice seguente controlla se il grafico può cercare una posizione arbitraria:

DWORD dwCap = 0;
HRESULT hr = pSeek->GetCapabilities(&dwCap);
if (AM_SEEKING_CanSeekAbsolute & dwCap)
{
    // Graph can seek to absolute positions.
}