Filtri di acquisizione video DirectShow
[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEnginee Acquisizione audio/video in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente di usare un nuovo codice MediaPlayer, IMFMediaEngine e Acquisizione audio/video 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.
I filtri di acquisizione in DirectShow hanno alcune funzionalità che le distinguono da altri tipi di filtri. Anche se l'Capture Graph Builder nasconde molti dei dettagli, è consigliabile leggere questa sezione per avere una conoscenza generale dei grafici di acquisizione DirectShow.
categorie di pin
Un filtro di acquisizione ha spesso due o più pin di output che forniscono lo stesso tipo di dati, ad esempio un pin di anteprima e un pin di acquisizione. Pertanto, i tipi di supporti non sono un buon modo per distinguere i pin. I pin sono invece distinti in base alle relative funzionalità, identificate usando un GUID, denominato categoria di pin.
Per informazioni su come eseguire query sui pin per la relativa categoria, vedere Uso delle categorie di pin. Per la maggior parte delle applicazioni, tuttavia, non sarà necessario eseguire direttamente query sui pin. Al contrario, vari metodi ICaptureGraphBuilder2 accettano parametri che specificano la categoria di pin su cui operare. Capture Graph Builder individua automaticamente il pin corretto.
pin di anteprima e pin di acquisizione
Alcuni dispositivi di acquisizione video hanno pin di output separati per l'anteprima e l'acquisizione. Il pin di anteprima viene usato per eseguire il rendering del video sullo schermo, mentre il pin di acquisizione viene usato per scrivere video in un file.
Un pin di anteprima e un pin di acquisizione presentano le differenze seguenti:
- Un pin di anteprima elimina i fotogrammi in base alle esigenze per mantenere la velocità effettiva nel pin di acquisizione.
- Ogni fotogramma da un pin di acquisizione viene timestampato con l'ora del flusso in cui è stato acquisito il fotogramma. Un pin di anteprima non contrassegna il timestamp degli esempi che fornisce.
Il motivo per cui i fotogrammi di anteprima non hanno timestamp è che il grafico del filtro introduce una piccola quantità di latenza nel flusso. Se l'ora di acquisizione viene usata come ora di presentazione, il renderer video considera ogni campione come leggermente in ritardo. Ciò può causare l'eliminazione dei fotogrammi da parte del renderer video durante il tentativo di recupero. La rimozione dei timestamp garantisce che il renderer presenti ogni campione all'arrivo, senza eliminare fotogrammi.
La categoria pin per i pin di anteprima è PIN_CATEGORY_PREVIEW. La categoria per i pin di acquisizione è PIN_CATEGORY_CAPTURE.
pin delle porte video
Una porta video è una connessione hardware tra un dispositivo video (ad esempio un tuner tv analogico) e la scheda video. Una porta video consente al dispositivo di inviare dati video direttamente alla scheda grafica. Il video viene visualizzato sullo schermo usando una sovrimpressione hardware. Una porta video potrebbe essere un cavo effettivo che collega due dispositivi su schede separate; o potrebbe trattarsi di una connessione cablata hard-cablata sulla stessa scheda.
Il vantaggio di una porta video è che il video passa direttamente in memoria video, senza alcun lavoro da parte della CPU. Tuttavia, le porte video presentano alcuni svantaggi:
- Una porta video usa sempre la superficie di sovrapposizione durante l'acquisizione, indipendentemente dal fatto che si voglia visualizzare in anteprima il video.
- Il capovolgimento tra fotogrammi si verifica automaticamente, che rende difficile sincronizzare lo scorrimento con altre operazioni video.
Se un dispositivo di acquisizione usa una porta video, il filtro di acquisizione ha un pin della porta video anziché un pin di anteprima. La categoria pin per i pin della porta video è PIN_CATEGORY_VIDEOPORT.
Ogni filtro di acquisizione ha almeno un pin di acquisizione. Inoltre, potrebbe avere un pin di anteprima o un pin della porta video, ma non entrambi. I filtri possono avere più pin di acquisizione e pin di anteprima, ognuno dei quali fornisce un tipo di supporto separato. Di conseguenza, un singolo filtro potrebbe avere un pin di acquisizione video, un pin di anteprima video, un pin di acquisizione audio e un pin di anteprima audio. Non c'è nulla di equivalente a una porta video per l'audio, tuttavia.
filtri WDM upstream
I dispositivi Windows Driver Model (WDM) possono richiedere alcuni filtri aggiuntivi upstream dal filtro di acquisizione. Questi filtri includono quanto segue:
- filtro di tuner TV. Controlla l'ottimizzazione per i sintonizzatori TV analogici.
- filtro audio TV. Controlla le impostazioni audio per i sintonizzatori TV analogici.
- filtro incrociato video analogico. Instrada i segnali video e audio attraverso il dispositivo hardware. Ad esempio, un dispositivo potrebbe avere più input, ad esempio S-Video e video composito. Il filtro barra incrociata consente all'applicazione di selezionare l'input.
Anche se questi sono filtri separati in DirectShow, in genere rappresentano lo stesso dispositivo hardware. Ogni filtro controlla una funzione diversa del dispositivo. I filtri sono connessi tramite pin, ma non vengono spostati dati multimediali tra le connessioni pin. Pertanto, i pin di questi filtri non si connettono stabilendo un tipo di supporto. Usano invece valori GUID denominati medie. I GUID medi sono definiti in modo univoco per un determinato minidriver del dispositivo. Ad esempio, il filtro Tv Tuner e il filtro Acquisizione video per la stessa scheda TV supporteranno lo stesso supporto, che consente all'applicazione di compilare correttamente il grafico.
In pratica, purché si usi ICaptureGraphBuilder2 per compilare i grafici di acquisizione, questi filtri vengono aggiunti automaticamente al grafico. Per una discussione più dettagliata, vedere filtri del driver di classe WDM.
Argomenti correlati