Elaborazione incentrata sui pin
Quando si scrive un minidriver AVStream, vengono forniti filtri che usano uno dei due paradigmi di elaborazione: elaborazione incentrata sui pin o elaborazione incentrata sui filtri.
L'elaborazione incentrata sui pin significa che AVStream chiama la routine di invio del processo di invio del pin del minidriver quando arrivano nuovi fotogrammi nella coda di pin.
L'elaborazione incentrata sui filtri indica che AVStream chiama la routine di invio del processo di filtro del minidriver quando sono disponibili frame di dati in ogni pin creato. Si noti che queste definizioni specificano il comportamento predefinito; i minidriver possono modificare il comportamento predefinito impostando i flag nella struttura KSPIN_DESCRIPTOR_EX .
In generale, i filtri software usano filtri incentrati sul filtro e i filtri hardware usano l'elaborazione incentrata sui pin. Ad esempio, l'hardware che trasforma o esegue il rendering dei dati può instradare i dati in un filtro incentrato sul pin. Esistono rari casi in cui questi ruoli possono essere invertito.
Per fornire un filtro incentrato sul pin, il minidriver fornisce un puntatore a una routine di callback AVStrMiniPinProcess in ogni struttura KSPIN_DISPATCH ; non fornire un invio di elaborazione nella struttura KSFILTER_DISPATCH .
Se il minidriver non modifica le impostazioni del flag nella struttura KSPIN_DESCRIPTOR_EX, AVStream chiama la routine di callback AVStrMiniPinProcess fornita dal fornitore in tre situazioni:
Il pin passa allo stato minimo di elaborazione. I frame devono già esistere nella coda e il pin deve passare da meno dello stato minimo di elaborazione in almeno lo stato di elaborazione minimo.
Arrivano nuovi fotogrammi. Il pin deve trovarsi almeno nello stato minimo di elaborazione e non deve essere presente alcun frame in corrispondenza o in anticipo del bordo principale.
Minidriver chiama in modo esplicito KsPinAttemptProcessing.
Per impostazione predefinita, sospendere è lo stato di elaborazione minimo.
Inoltre, AVStream non chiama l'invio del processo di pin se il gate AND del pin è chiuso. Se si usano le routine KSGATEXxx per aggiungere input aggiuntivi al gate AND del pin, ad esempio, il processo di invio non verrà chiamato.
Quando AVStream chiama AVStrMiniPinProcess, fornisce un puntatore all'oggetto pin con dati disponibili. L'invio di elaborazione del minidriver può quindi acquisire un puntatore perimetrale principale chiamando KsPinGetLeadingEdgeStreamPointer. I minidriver modificano quindi i dati di flusso usando l'API puntatore di flusso .
I minidriver che usano l'elaborazione incentrata sui pin possono modificare quando AVStream chiama il dispatch AVStrMiniPinProcess impostando flag nella struttura KSPIN_DESCRIPTOR_EX pertinente. Le descrizioni dei flag nella pagina di riferimento KSPIN_DESCRIPTOR_EX sono particolarmente rilevanti per i fornitori che implementano filtri incentrati sui pin.
I tentativi di elaborazione potrebbero non riuscire se il minidriver mantiene il mutex di elaborazione tramite KsPinAcquireProcessingMutex. I problemi possono verificarsi anche se il minidriver modifica direttamente un gate usando le chiamate KSGATE* .
Il driver di esempio hardware simulato AVStream (AVSHwS) negli esempi di Windows Driver Kit è un driver di acquisizione incentrato sui pin per un componente hardware simulato. L'esempio Avshws illustra come implementare DMA tramite AVStream.