Struttura KSPIN (ks.h)
La struttura KSPIN descrive un pin di cui è stata creata un'istanza.
Sintassi
typedef struct _KSPIN {
const KSPIN_DESCRIPTOR_EX *Descriptor;
KSOBJECT_BAG Bag;
PVOID Context;
ULONG Id;
KSPIN_COMMUNICATION Communication;
BOOLEAN ConnectionIsExternal;
KSPIN_INTERFACE ConnectionInterface;
KSPIN_MEDIUM ConnectionMedium;
KSPRIORITY ConnectionPriority;
PKSDATAFORMAT ConnectionFormat;
PKSMULTIPLE_ITEM AttributeList;
ULONG StreamHeaderSize;
KSPIN_DATAFLOW DataFlow;
KSSTATE DeviceState;
KSRESET ResetState;
KSSTATE ClientState;
} KSPIN, *PKSPIN;
Membri
Descriptor
Puntatore al descrittore pin per questo particolare pin. Per altre informazioni, vedere KSPIN_DESCRIPTOR_EX.
Bag
Questo membro specifica il KSOBJECT_BAG (la struttura KSOBJECT_BAG equivale al tipo PVOID) per questa particolare istanza di pin. i contenitori di oggetti sono strutture usate per associare la memoria dinamica a un oggetto AVStream specifico. Qualsiasi elemento nel contenitore dell'oggetto pin viene pulito automaticamente quando il pin viene chiuso.
Context
Puntatore a un buffer. I client possono usare Context per associare informazioni di contesto a un'istanza di pin specifica. In genere, viene usato per le estensioni pin/stream e viene allocato nel dispatch di creazione fornito nella tabella dispatch pin. Si noti che qualsiasi memoria dinamica allocata per le informazioni sul contesto deve essere inserita nel contenitore oggetti dell'istanza del pin usando KsAddItemToObjectBag. context viene inizializzato sul valore del membro Context del KS FILTER padre al momento della creazione del pin. Vedere gerarchia di oggetti AVStream.
Id
Questo membro specifica l'identificatore del tipo di pin. Questo è l'indice nella matrice di descrittori pin forniti per il tipo di filtro specificato.
Communication
Questo membro specifica KSPIN_COMMUNICATION_NONE, KSPIN_COMMUNICATION_SINK, KSPIN_COMMUNICATION_SOURCE, KSPIN_COMMUNICATION_BOTH o KSPIN_COMMUNICATION_BRIDGE. Per il significato di ogni valore, vedere KSPROPERTY_PIN_COMMUNICATION.
ConnectionIsExternal
Questo membro specifica un valore booleano che, se TRUE, indica che il pin connesso non supporta l'handshake di connessione AVStream. Se FALSE, indica che il pin connesso supporta l'handshake di connessione AVStream. Indica se la connessione tra questo pin e il pin a cui è connessa è una connessione tra due pin AVStream.
ConnectionInterface
Questo membro contiene una struttura KSPIN_INTERFACE che identifica l'interfaccia utilizzata per la connessione. Queste informazioni vengono fornite dal generatore di gragrafi quando viene creato il pin.
ConnectionMedium
Questo membro contiene una struttura KSPIN_MEDIUM che identifica il supporto di connessione che deve essere utilizzato da questo pin. Queste informazioni vengono fornite dal generatore di gragrafi quando viene creato il pin.
ConnectionPriority
Questo membro contiene una struttura KSPRIORITY che specifica la priorità della connessione. Queste informazioni vengono fornite dal generatore di gragrafi quando viene creato il pin.
ConnectionFormat
Puntatore a una struttura KSDATAFORMAT che specifica il formato dati della connessione. Queste informazioni vengono inizialmente fornite dal generatore di grafi quando viene creato il pin e possono essere modificate tramite l'accesso alle proprietà o tramite i messaggi di modifica del formato inseriti nel flusso. L'accesso a questo membro viene sincronizzato dal mutex del controllo filtro. Questo membro non deve essere modificato dal client.
AttributeList
Puntatore a una struttura KSMULTIPLE_ITEM che specifica l'elenco di attributi, forniti durante la creazione del pin, per descrivere la connessione. Specifica la direzione del flusso di dati per questo pin (KSPIN_DATAFLOW_IN o KSPIN_DATAFLOW_OUT). Queste informazioni sono un attributo statico del pin e vengono visualizzate nel descrittore pin. Viene memorizzato nella cache qui per l'accesso a IRQL sopra PASSIVE_LEVEL.
StreamHeaderSize
Questo membro indica le dimensioni in byte di ogni struttura KSSTREAM_HEADER per questo pin. In genere usato per i pin di output, un client può impostarlo su qualsiasi valore maggiore di sizeof (KSSTREAM_HEADER) e avere intestazioni di flusso estese allocate (ogni intestazione di flusso sarà StreamHeaderSize byte). Se un client non imposta questo membro, indica che nessuna informazione estesa segue le intestazioni del flusso. In una situazione di questo tipo, ogni intestazione del flusso è esattamente sizeof (KSSTREAM_HEADER). I client possono impostarne il contenuto nell'invio di creazione del pin.
DataFlow
Questo membro specifica la direzione del flusso di dati per il pin. Le impostazioni possibili sono KSPIN_DATAFLOW_IN e KSPIN_DATAFLOW_OUT. Queste informazioni sono un attributo statico del pin e vengono visualizzate nella struttura KSPIN_DESCRIPTOR pertinente. Viene memorizzato nella cache qui per l'accesso a IRQL sopra PASSIVE_LEVEL.
DeviceState
Questo membro contiene un'enumerazione di tipo KSSTATE che identifica lo stato in cui è stato indicato al pin di eseguire la transizione. Non necessariamente uguale allo stato della pipe, segnalata tramite AVStrMiniPinSetDeviceState. Inizialmente KSSTATE_STOP, questo membro viene modificato quando AVStream riceve un set di proprietà dello stato di connessione IOCTL. L'accesso viene sincronizzato usando il mutex del controllo filtro . I minidriver non devono modificare questo membro. Vedere la nota nella sezione Osservazioni di seguito. Vedere anche il membro clientState.
ResetState
Questo membro contiene un'enumerazione di tipo KSRESET che identifica lo stato di reimpostazione corrente del pin. Le impostazioni possibili sono KSRESET_BEGIN e KSRESET_END. Questo membro viene inizialmente impostato su KSRESET_END e viene modificato tramite l'accesso alle proprietà. L'accesso a questo membro viene sincronizzato dal mutex del controllo filtro . Il client non deve modificare questo membro.
ClientState
Questo membro specifica il KSSTATE in cui è attualmente impostato il pin. Aggiornato immediatamente prima che venga chiamato AVStrMiniPinSetDeviceState. Se questa routine di callback ha esito negativo, AVStream esegue il rollback ClientState al valore precedente. I minidriver che non superano le transizioni di stato e che controllano questo membro durante l'elaborazione devono essere consapevoli di questa sequenza di eventi.
Osservazioni
In molti modi, i pin sono l'obiettivo del comportamento del filtro. Ciò si riflette nel fatto che la struttura del pin ha un numero elevato di membri. Molti minidriver devono perfezionare il comportamento delle pin e mantenere un contesto aggiuntivo associato al pin. Per i filtri con comportamento di pin abbastanza convenzionale, non è necessario alcun perfezionamento o contesto aggiuntivo. In molti casi, il comportamento predefinito dei pin è sufficiente; È possibile accedere ai pin usando Filter-Centric Elaborazione.
Ai fini della sincronizzazione, la durata di questo oggetto è l'intervallo che inizia quando viene chiamata la funzione dispatch PreCreate del minidriver e termina quando viene restituita la funzione dispatch close del minidriver, presupponendo che la funzione non restituisca STATUS_PENDING. Se restituisce STATUS_PENDING, la durata dell'oggetto termina quando il client indica il completamento della richiesta di chiusura chiamando KsCompletePendingRequest.
Se il minidriver deve determinare se è stato indicato di passare a uno specifico KSSTATE, confrontando il valore del DeviceState membro di KSPIN a tale stato non è un metodo affidabile. Esaminare invece il membro ClientState oppure creare una variabile nel callback SetDeviceState e quindi controllare questa variabile. SetDeviceState è membro di KSPIN_DISPATCH.
Vedere anche contenitori di oggetti.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Disponibile in Microsoft Windows XP e nei sistemi operativi successivi e in Microsoft DirectX 8.0 e versioni successive. |
intestazione | ks.h (include Ks.h) |