Estrutura KSPIN (ks.h)
A estrutura KSPIN descreve um pin instanciado.
Sintaxe
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;
Membros
Descriptor
Um ponteiro para o descritor de pino para esse pin específico. Consulte KSPIN_DESCRIPTOR_EX para obter mais informações.
Bag
Esse membro especifica o KSOBJECT_BAG (a estrutura KSOBJECT_BAG é equivalente ao tipo PVOID) para essa instância de pin específica. Os Sacos de Objeto são estruturas usadas para associar memória dinâmica a um objeto AVStream específico. Qualquer coisa no recipiente de objetos de pino é limpa automaticamente quando o pino é fechado.
Context
Um ponteiro para um buffer. Os clientes podem usar o Context para associar informações de contexto a uma instância de pin específica. Normalmente, isso é usado para extensões de pin/fluxo e é alocado na expedição de criação fornecida na tabela de expedição de pino. Observe que qualquer memória dinâmica alocada para informações de contexto deve ser colocada no recipiente de objetos da instância de pino usando KsAddItemToObjectBag. O contexto é inicializado para o valor do membro Context do KSFILTER pai no momento em que o pino é criado. Consulte Hierarquia de objetos AVStream.
Id
Esse membro especifica o identificador de tipo de pino. Esse é o índice na matriz de descritores de pin fornecidos para o tipo de filtro fornecido.
Communication
Esse membro especifica KSPIN_COMMUNICATION_NONE, KSPIN_COMMUNICATION_SINK, KSPIN_COMMUNICATION_SOURCE, KSPIN_COMMUNICATION_BOTH ou KSPIN_COMMUNICATION_BRIDGE. Confira KSPROPERTY_PIN_COMMUNICATION para obter o significado de cada valor.
ConnectionIsExternal
Esse membro especifica um valor booliano que, se TRUE, indica que o pino conectado não dá suporte ao handshake de conexão AVStream. Se FALSE, indica que o pino conectado dá suporte ao handshake de conexão AVStream. Essa é uma indicação de se a conexão entre esse pino e o pino ao qual ele está conectado é uma conexão entre dois pinos AVStream.
ConnectionInterface
Esse membro contém uma estrutura KSPIN_INTERFACE que identifica a interface que está sendo usada para a conexão. Essas informações são fornecidas pelo construtor de grafo quando o pino é criado.
ConnectionMedium
Esse membro contém uma estrutura KSPIN_MEDIUM que identifica o meio de conexão que esse pino deve usar. Essas informações são fornecidas pelo construtor de grafo quando o pino é criado.
ConnectionPriority
Esse membro contém uma estrutura KSPRIORITY que especifica a prioridade da conexão. Essas informações são fornecidas pelo construtor de grafo quando o pino é criado.
ConnectionFormat
Um ponteiro para uma estrutura KSDATAFORMAT que especifica o formato de dados da conexão. Essas informações são inicialmente fornecidas pelo construtor de grafo quando o pino é criado e podem ser alteradas por meio do acesso à propriedade ou por mensagens de alteração de formato inseridas no fluxo. O acesso a esse membro é sincronizado pelo mutex de controle de filtro. Esse membro não deve ser alterado pelo cliente.
AttributeList
Um ponteiro para uma estrutura KSMULTIPLE_ITEM que especifica a lista de atributos, fornecida durante a criação do pino, para descrever a conexão. Especifica a direção do fluxo de dados para esse pino (KSPIN_DATAFLOW_IN ou KSPIN_DATAFLOW_OUT). Essas informações são um atributo estático do pino e aparecem no descritor de pino. Ele é armazenado em cache aqui para acesso no IRQL acima PASSIVE_LEVEL.
StreamHeaderSize
Esse membro indica o tamanho em bytes de cada estrutura KSSTREAM_HEADER para esse pino. Normalmente usado para pinos de saída, um cliente pode defini-lo como qualquer valor maior que sizeof (KSSTREAM_HEADER) e ter cabeçalhos de fluxo estendidos alocados (cada cabeçalho de fluxo será StreamHeaderSize bytes long). Se um cliente não definir esse membro, isso indicará que nenhuma informação estendida segue cabeçalhos de fluxo. Nessa situação, cada cabeçalho de fluxo é precisamente sizeof (KSSTREAM_HEADER). Os clientes podem definir isso na expedição de criação de pino.
DataFlow
Esse membro especifica a direção do fluxo de dados para o pino. As configurações possíveis são KSPIN_DATAFLOW_IN e KSPIN_DATAFLOW_OUT. Essas informações são um atributo estático do pino e aparecem na estrutura de KSPIN_DESCRIPTOR relevante. Ele é armazenado em cache aqui para acesso no IRQL acima PASSIVE_LEVEL.
DeviceState
Esse membro contém uma enumeração do tipo KSSTATE que identifica o estado para o qual o pino foi orientado a fazer a transição. Não necessariamente o mesmo que o estado do pipe, que é relatado por meio de AVStrMiniPinSetDeviceState. Inicialmente KSSTATE_STOP, esse membro é alterado quando o AVStream recebe um IOCTL de conjunto de propriedades de estado de conexão. O acesso é sincronizado usando o mutex de controle de filtro. Os minidrivers não devem alterar esse membro. Veja a observação na seção Comentários abaixo. Consulte também o membro ClientState .
ResetState
Esse membro contém uma enumeração do tipo KSRESET que identifica o estado de redefinição atual do pino. As configurações possíveis são KSRESET_BEGIN e KSRESET_END. Inicialmente, esse membro é definido como KSRESET_END e é alterado por meio do acesso à propriedade. O acesso a esse membro é sincronizado pelo mutex de controle de filtro. O cliente não deve alterar esse membro.
ClientState
Esse membro especifica o KSSTATE no qual o pino está definido no momento. Atualizado imediatamente antes de AVStrMiniPinSetDeviceState ser chamado. Se essa rotina de retorno de chamada falhar, o AVStream reverterá ClientState para seu valor anterior. Minidrivers que falham nas transições de estado e que marcar esse membro durante o processamento devem estar cientes dessa sequência de eventos.
Comentários
Em muitos aspectos, os pinos são o foco do comportamento do filtro. Isso se reflete no fato de que a estrutura de pinos tem um grande número de membros. Muitos minidrivers precisam refinar o comportamento do pino e manter o contexto adicional associado a pin. Para filtros com comportamento de pino bastante convencional, nenhum refinamento ou contexto adicional é necessário. Em muitos casos, o comportamento padrão do pin é suficiente; os pinos são acessados usando o Processamento Centrado em Filtro.
Para fins de sincronização, o tempo de vida desse objeto é o intervalo que começa quando a função de expedição PreCreate do minidriver é chamada e termina quando a função close dispatch do minidriver retorna, supondo que a função não retorne STATUS_PENDING. Se ele retornar STATUS_PENDING, o tempo de vida do objeto terminará quando o cliente indicar a conclusão da solicitação de fechamento chamando KsCompletePendingRequest.
Se o minidriver precisar determinar se ele foi orientado a ir para um KSSTATE específico, comparar o valor do membro DeviceState de KSPIN com esse estado não é um método confiável. Em vez disso, examine o membro ClientState ou crie uma variável no retorno de chamada SetDeviceState e, em seguida, marcar essa variável. SetDeviceState é um membro do KSPIN_DISPATCH.
Consulte também Sacos de Objeto.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Disponível no Microsoft Windows XP e em sistemas operacionais posteriores e no Microsoft DirectX 8.0 e versões posteriores. |
Cabeçalho | ks.h (inclua Ks.h) |