KSPIN_DESCRIPTOR_EX struttura (ks.h)

La struttura KSPIN_DESCRIPTOR_EX descrive le caratteristiche di un tipo di pin in un determinato tipo di filtro.

Sintassi

typedef struct _KSPIN_DESCRIPTOR_EX {
  const KSPIN_DISPATCH         *Dispatch;
  const KSAUTOMATION_TABLE     *AutomationTable;
  KSPIN_DESCRIPTOR             PinDescriptor;
  ULONG                        Flags;
  ULONG                        InstancesPossible;
  ULONG                        InstancesNecessary;
  const KSALLOCATOR_FRAMING_EX *AllocatorFraming;
  PFNKSINTERSECTHANDLEREX      IntersectHandler;
} KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX;

Members

Dispatch

Puntatore alla struttura KSPIN_DISPATCH per questo pin. Questo puntatore è facoltativo e deve essere fornito solo dai client che desiderano ricevere notifiche. I client che devono eseguire l'elaborazione incentrata sui pin (filtri relativi al routing dei dati, in altre parole i driver hardware) devono fornire questa tabella di invio e un invio di processi. Per altre informazioni, vedere KSPIN_DISPATCH .

AutomationTable

Puntatore alla struttura KSAUTOMATION_TABLE per questo pin. La tabella di automazione contiene le proprietà, i metodi e gli eventi supportati dal pin. Questa tabella di automazione viene unita alla tabella di automazione fornita da AVStream per tutti i pin. Se il client fornisce qualsiasi proprietà, evento o gestori di metodi già forniti da AVStream, l'implementazione del client sostituisce quella di AVStream.

PinDescriptor

Questo membro specifica una struttura di tipo KSPIN_DESCRIPTOR.

Flags

Specifica un valore di tipo ULONG. Questo può essere qualsiasi combinazione dei flag elencati nell'elenco seguente. Specificare i flag usando un OR bit per bit, con le eccezioni seguenti: KSPIN_FLAG_CRITICAL_PROCESSING e KSPIN_FLAG_HYPERCRITICAL_PROCESSING si escludono a vicenda. KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING e KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL si escludono a vicenda. KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING e KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING si escludono a vicenda. KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY e KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE si escludono a vicenda.

KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING

Indica che il minidriver richiede che il processo venga inviato in IRQL DISPATCH_LEVEL anziché PASSIVE_LEVEL.

KSPIN_FLAG_CRITICAL_PROCESSING

Se l'elaborazione asincrona è stata specificata o se il sistema è in esecuzione in PASSIVE_LEVEL e una chiamata di processo viene eseguita in DISPATCH_LEVEL, l'elaborazione viene eseguita in un elemento di lavoro in coda. Questo flag indica che l'elemento di lavoro deve essere inserito nella coda di lavoro critica anziché nella coda di lavoro ritardata.

KSPIN_FLAG_HYPERCRITICAL_PROCESSING

Se l'elaborazione asincrona è stata specificata o se il sistema è in esecuzione in PASSIVE_LEVEL e una chiamata di processo viene eseguita in DISPATCH_LEVEL, l'elaborazione viene eseguita in un elemento di lavoro in coda. Questo flag indica che l'elemento di lavoro deve essere inserito nella coda di lavoro ipercritica anziché nella coda di lavoro ritardata o nella coda di lavoro critica.

KSPIN_FLAG_ASYNCHRONOUS_PROCESSING

Indica che il pin deve elaborare i dati in modo asincrono. Se questo flag è impostato, AVStream non attende che venga chiamato un invio di un processo prima di procedere con fotogrammi aggiuntivi.

KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING

AVStream chiama l'invio di elaborazione solo quando il minidriver chiama esplicitamente KsXxxAttemptProcessing. Utile per i client che intendono eseguire direttamente il polling della coda, ad esempio il tempo DPC per il trasporto dei dati nell'hardware.

KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL

Indica che l'elaborazione deve verificarsi ogni volta che un frame di dati arriva nella coda. Se questo flag non è specificato, l'invio del processo viene chiamato solo quando i dati arrivano in una coda precedentemente vuota.

KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING

Indica che i fotogrammi non sono necessari sul pin per l'elaborazione da iniziare. Anche se non esistono fotogrammi nella coda, una modifica dello stato sarà ora sufficiente per far sì che AVStream chiami l'invio di elaborazione. Questo flag è utile solo per i filtri incentrati sui filtri. Pin che non specificano l'elaborazione di questo flag ritardo nell'elaborazione del filtro se non hanno fotogrammi disponibili. I pin che specificano questo flag non ritardano l'elaborazione in questo modo. Se un pin specifica questo flag, diventa responsabilità dell'invio del processo per verificare la disponibilità di frame disponibili.

KSPIN_FLAG_ENFORCE_FIFO

Se si specifica questo flag, la coda forza l'esecuzione di IRP in modo da poter essere gestita in modo first-in-first-out. Se un'IRP viene completata dal minidriver prima di un'IRP inviata in precedenza, l'IRP successiva non viene completato da AVStream fino al completamento dell'IRP precedente dal minidriver.

KSPIN_FLAG_GENERATE_MAPPINGS

Se si specifica questo flag, AVStream genera automaticamente mapping a dispersione/raccolta per un frame in coda quando il minidriver blocca un puntatore di flusso che fa riferimento a tale frame. I client che intendono usare questa funzionalità devono registrare l'oggetto adapter DMA con AVStream tramite la funzione KsDeviceRegisterAdapterObject . Vedere il membro DataUsed di KSSTREAM_HEADER per l'effetto di questo flag sulla struttura KSSTREAM_HEADER. Vedere anche KSSTREAM_POINTER_OFFSET.

KSPIN_FLAG_DISTINCT_TRAILING_EDGE

Indica che la coda associata al pin deve avere un puntatore di flusso perimetrale finale. Il puntatore perimetrale finale è un puntatore di flusso speciale che punta ai dati meno recenti nella coda, a meno che i puntatori cloni non esistano nei dati meno recenti. Tutti i frame di dati nella finestra tra i puntatori di flusso perimetrali iniziali e finali vengono considerati avere almeno un conteggio dei riferimenti su di essi e non vengono completati fino a quando non si spostano dalla finestra avanzando il bordo finale con KsPinGetTrailingEdgeStreamPointer e uno delle funzioni KsStreamPointerAdvanceXxx o KsStreamPointerUnlock . I pin che non specificano questo flag non dispongono di un puntatore di flusso perimetrale finale.

KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY

Indica che AVStream deve chiamare questo pin solo per elaborare quando il pin è in KSSTATE_RUN. Modifica lo stato di elaborazione minimo da sospendere per l'esecuzione. AVStream chiama questo pin per elaborare dopo aver detto di passare allo stato di esecuzione, anche se i fotogrammi arrivano. Qualsiasi pin che specifica questo flag e fa parte di un filtro incentrato sui filtri causa l'elaborazione del filtro se il pin specificato non è in KSSTATE_RUN.

KSPIN_FLAG_SPLITTER

Indica che questo pin (un pin di output) è un splitter. I pin che specificano questo flag devono indicare un numero di istanze possibili maggiori di uno. Quando viene creata una seconda istanza di questo pin, AVStream imposta automaticamente un splitter in modo che i fotogrammi inviati al pin originale vengano copiati nel nuovo pin. Si noti che questa copia viene eseguita automaticamente da AVStream. I client in genere possono ignorare i pin di processo che dispongono di puntatori DelegateBranch e CopySource non NULL. Questi membri indicano che il pin fa parte di un ramo splitter e viene gestito automaticamente da AVStream. Nelle versioni post-DirectX 8.0 questo flag funziona per i pin sia nei filtri incentrati sui filtri incentrati sui filtri incentrati sui filtri incentrati sui pin. Le versioni precedenti supportano questo flag solo per i pin nei filtri incentrati sui filtri.

KSPIN_FLAG_USE_STANDARD_TRANSPORT

Questo flag impone al pin di usare il meccanismo di trasporto standard. Esegue l'override di tutti gli altri controlli (tipo di comunicazione, tipo di media, tipo di interfaccia e così via) sul pin. Specificando sia questo flag che KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT risultati nel trasporto standard usato. Questo flag esegue l'override di tutti gli altri controlli.

KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT

Indica che il pin non usa il meccanismo di trasporto standard. I pin che non usano il meccanismo di trasporto standard non appartengono a una sezione pipe e non avranno code associate.

KSPIN_FLAG_FIXED_FORMAT

Indica che questo pin usa un formato dati fisso. Qualsiasi tentativo di impostare il formato dati restituisce STATUS_INVALID_DEVICE_REQUEST.

KSPIN_FLAG_GENERATE_EOS_EVENTS

Indica che questo pin gestisce le richieste di supporto eventi di connessione.

KSPIN_FLAG_RENDERER

Specifica che questo pin è in grado di eseguire il rendering di fotogrammi.

KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING

Se specificato in un pin di filtro incentrato sui filtri, indica che una o più istanze del tipo di pin in questione devono avere frame disponibili per elaborare i dati. Si escludono a vicenda con KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING.

Si noti che questo comportamento può essere ottenuto tramite KsPinAttachOrGate impostando manualmente un gate OR come gate di cornice per ogni istanza del pin e collegando questo gate OR al gate AND del filtro.

Quando si usa questo flag, i minidriver non possono chiamare KsPinAttachAndGate o KsPinAttachOrGate nelle istanze di pin associate. Il flag esegue in modo efficace questa operazione per il semplice caso OR. Vedere Anche l'elaborazione incentrata sui filtri.

KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE

Se specificato in un pin incentrato sul filtro , indica che l'elaborazione può verificarsi quando una o più istanze di pin contrassegnate sono nello stato di esecuzione. Tutti i pin non arrestati devono comunque trovarsi almeno in pausa per elaborare i dati. Non usare questo flag se il pin corrispondente è un pin di output e questo pin è coinvolto in una trasformazione sul posto.

KSPIN_FLAG_DENY_USERMODE_ACCESS

Questo flag impedisce l'accesso in modalità utente a questo pin specifico.

KSPIN_FLAG_IMPLEMENT_CLOCK

Indica che questo pin espone un orologio che può essere selezionato dal gestore grafici come orologio master. Vedere anche gli orologi AVStream.

InstancesPossible

Specifica un valore di tipo ULONG che contiene un conteggio del numero massimo di istanze possibili di questo pin. Qualsiasi tentativo di creare un'istanza di più di questo numero di pin del tipo specificato ha esito negativo. Impostare su KSINSTANCE_INDETERMINATE per non avere alcun limite per il numero di pin create dall'istanza.

InstancesNecessary

Specifica un valore di tipo ULONG che contiene il numero minimo di pin di un tipo di pin specificato che devono trovarsi in uno stato in corrispondenza o superiore al livello di elaborazione minimo per il corretto funzionamento del filtro. Per impostazione predefinita, il livello di elaborazione minimo è KSSTATE_PAUSE, anche se il minidriver può modificare il comportamento predefinito impostando il membro Flag di questa struttura su KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY o KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE. Qualsiasi tentativo di modificare lo stato di un filtro che non ha questo numero di istanze di questo tipo di pin ha esito negativo. Vedere altre informazioni nella sezione Osservazioni.

AllocatorFraming

Puntatore a una struttura KSALLOCATOR_FRAMING_EX contenente i requisiti di frame allocatore per questo tipo di pin. Il frame dell'allocatore specifica elementi quali requisiti di allineamento della memoria, dimensioni massime del frame e dimensioni minime del frame. Questo membro può essere NULL, che indica che questo pin non supporta la proprietà di frame allocator.

IntersectHandler

Puntatore a una funzione KStrIntersectHandlerEx definita dal driver per gestire l'intersezione dei dati. Se questo membro è NULL, il pin gestisce le query di intersezione dei dati per gli intervalli di dati con l'identificatore KSDATAFORMAT_SPECIFIER_NONE. La funzione del gestore di intersezione riceve un singolo intervallo di dati dalla query e un singolo intervallo di dati dall'elenco dei pin degli intervalli di dati. I GUID del tipo, del sottotipo e dell'identificatore di questi intervalli sono garantiti per la corrispondenza, anche se alcuni caratteri jolly potrebbero essere. La funzione indica che gli intervalli di dati non corrispondono o produce il formato dati migliore nell'intersezione dei due intervalli di dati. Per altre informazioni, vedere Intersezioni dell'intervallo di dati in AVStream .

Commenti

AMCap e Blink potrebbero non essere in grado di trovare interfacce di tuner e barra incrociata nel driver AVStream se il membro InstancesUtil di KSPIN_DESCRIPTOR_EX è impostato su zero per il pin di input video analogico. Per risolvere questo problema, impostare Istanze Necessarie per questo pin su uno.

Si noti che i requisiti di frame dell'allocatore del pin possono essere ignorati nonostante il fatto che il frame dell'allocatore specifica che l'allineamento o le dimensioni è assolutamente necessario essere un determinato valore. Se il driver in modalità kernel è connesso a un filtro in modalità utente upstream che alloca per esso e l'allocatore del filtro upstream specifico non comprende i requisiti di frame, questo può verificarsi (gli esempi correnti includono il splitter MPEG-2).

Inoltre, se si specifica KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING e il pin usa il meccanismo di trasporto standard, è necessario disporre di un oggetto di elaborazione. Ciò significa che deve essere disponibile un invio di processi (a livello di filtro o a livello di pin); anche se questa funzione non viene mai chiamata, deve essere fornita in questa circostanza.

Intersezioni dell'intervallo di dati in AVStream e avStream Splitters.

Requisiti

Requisito Valore
Intestazione ks.h (include Ks.h)

Vedi anche

KSALLOCATOR_FRAMING_EX

KSPIN_DESCRIPTOR

KSPIN_DISPATCH

KsDeviceRegisterAdapterObject