Compartilhar via


estrutura KSPIN_DESCRIPTOR_EX (ks.h)

A estrutura KSPIN_DESCRIPTOR_EX descreve as características de um tipo de pino em um determinado tipo de filtro.

Sintaxe

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;

Membros

Dispatch

Um ponteiro para a estrutura KSPIN_DISPATCH para esse pino. Esse ponteiro é opcional e só deve ser fornecido por clientes que desejam receber notificações. Os clientes que precisam executar o processamento centrado em pin (filtros relacionados ao roteamento de dados, em outras palavras, drivers de hardware) devem fornecer essa tabela de expedição e uma expedição de processo. Consulte KSPIN_DISPATCH para obter mais informações.

AutomationTable

Um ponteiro para a estrutura KSAUTOMATION_TABLE para esse pino. A tabela de automação contém as propriedades, os métodos e os eventos compatíveis com o pin. Essa tabela de automação é mesclada com a tabela de automação fornecida pelo AVStream para todos os pinos. Se o cliente fornecer qualquer propriedade, evento ou manipuladores de método que já sejam fornecidos pelo AVStream, a implementação do cliente substituirá a do AVStream.

PinDescriptor

Este membro especifica uma estrutura do tipo KSPIN_DESCRIPTOR.

Flags

Especifica um valor do tipo ULONG. Isso pode ser qualquer combinação dos sinalizadores listados na lista a seguir. Especifique sinalizadores usando um OR bit a bit, com as seguintes exceções: KSPIN_FLAG_CRITICAL_PROCESSING e KSPIN_FLAG_HYPERCRITICAL_PROCESSING são mutuamente exclusivos. KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING e KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL são mutuamente exclusivos. KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING e KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING são mutuamente exclusivos. KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY e KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE são mutuamente exclusivos.

KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING

Indica que o minidriver solicita que a expedição do processo ocorra no IRQL DISPATCH_LEVEL em vez de PASSIVE_LEVEL.

KSPIN_FLAG_CRITICAL_PROCESSING

Se o processamento assíncrono tiver sido especificado ou se o sistema estiver em execução no PASSIVE_LEVEL e uma chamada de processo chegar em DISPATCH_LEVEL, o processamento será feito em um item de trabalho na fila. Esse sinalizador indica que o item de trabalho deve ser colocado na fila de trabalho crítica em vez da fila de trabalho atrasada.

KSPIN_FLAG_HYPERCRITICAL_PROCESSING

Se o processamento assíncrono tiver sido especificado ou se o sistema estiver em execução no PASSIVE_LEVEL e uma chamada de processo chegar em DISPATCH_LEVEL, o processamento será feito em um item de trabalho na fila. Esse sinalizador indica que o item de trabalho deve ser colocado na fila de trabalho hipercrítica em vez da fila de trabalho atrasada ou da fila de trabalho crítica.

KSPIN_FLAG_ASYNCHRONOUS_PROCESSING

Indica que o pino deve processar dados de forma assíncrona. Se esse sinalizador estiver definido, o AVStream não aguardará que uma expedição de processo seja chamada antes de prosseguir com quadros adicionais.

KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING

O AVStream chama a expedição de processamento somente quando o minidriver chama explicitamente KsXxxAttemptProcessing. Útil para clientes que pretendem sondar diretamente a fila em, por exemplo, tempo de DPC para transportar dados para hardware.

KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL

Indica que o processamento deve ocorrer sempre que um quadro de dados chega à fila. Se esse sinalizador não for especificado, a expedição do processo só será chamada quando os dados chegarem a uma fila vazia anteriormente.

KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING

Indica que os quadros não são necessários nesse pino para que o processamento seja iniciado. Mesmo que nenhum quadro exista na fila, uma alteração de estado agora será suficiente para fazer com que o AVStream chame a expedição de processamento. Esse sinalizador é útil apenas para filtros centrados em filtro. Fixa os pinos que não especificam esse sinalizador atrasam o processamento no filtro se eles não tiverem quadros disponíveis. Os pinos que especificam esse sinalizador não atrasam o processamento dessa maneira. Se um pino especificar esse sinalizador, ele se tornará responsabilidade do processo de expedição para verificar os quadros disponíveis.

KSPIN_FLAG_ENFORCE_FIFO

Especificar esse sinalizador faz com que a fila force os IRPs a serem manipulados de maneira inicial. Se um IRP for concluído pelo minidriver antes de um IRP que foi enviado anteriormente, o IRP posterior não será concluído pelo AVStream até que o IRP anterior tenha sido concluído pelo minidriver.

KSPIN_FLAG_GENERATE_MAPPINGS

Especificar esse sinalizador faz com que o AVStream gere automaticamente mapeamentos de dispersão/coleta para um quadro enfileirado quando o minidriver bloqueia um ponteiro de fluxo referenciando esse quadro. Os clientes que pretendem usar esse recurso precisam registrar o objeto do adaptador DMA com o AVStream por meio da função KsDeviceRegisterAdapterObject. Consulte o dataUsed membro do KSSTREAM_HEADER para obter o efeito desse sinalizador na estrutura KSSTREAM_HEADER. Veja também KSSTREAM_POINTER_OFFSET.

KSPIN_FLAG_DISTINCT_TRAILING_EDGE

Indica que a fila associada ao pino deve ter um ponteiro de fluxo de borda à direita. O ponteiro de borda à direita é um ponteiro de fluxo especial que aponta para os dados mais antigos da fila, a menos que existam ponteiros de clone em dados mais antigos. Todos os quadros de dados na janela entre os ponteiros de fluxo de borda à esquerda e à direita são considerados com pelo menos uma contagem de referência e não são concluídos até que saiam da janela avançando a borda à direita com KsPinGetTra DoEdgeStreamPointer e uma das funções KsStreamPointerAdvanceXxx ou KsStreamPointerUnlock. Os pinos que não especificam esse sinalizador não têm um ponteiro de fluxo de borda à direita.

KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY

Indica que o AVStream só deve chamar esse pin para processar quando o pino estiver em KSSTATE_RUN. Altera o estado mínimo de processamento de pausa para execução. O AVStream chama esse pino para processar depois que dizendo a ele para ir para o estado de execução, mesmo que os quadros cheguem. Qualquer pino que especifica esse sinalizador e faz parte de um filtro centrado em filtro faz com que o filtro não seja processado se o pino determinado não estiver em KSSTATE_RUN.

KSPIN_FLAG_SPLITTER

Indica que esse pino (um pino de saída) é um divisor. Os pinos que especificam esse sinalizador devem indicar um número de instâncias possíveis maiores que uma. Quando uma segunda instância desse pino é criada, o AVStream configura automaticamente um divisor para que os quadros enviados para o pino original sejam copiados para o novo pino. Observe que essa cópia é feita automaticamente pelo AVStream. Os clientes normalmente podem ignorar os pinos de processo que têm ponteirosNULL DelegateBranch e CopySource. Esses membros indicam que o pin faz parte de um branch de divisor e é tratado automaticamente pelo AVStream. Em versões pós-DirectX 8.0, esse sinalizador funciona para fixações em filtros centrados em filtros centrados em filtros. Versões mais antigas dão suporte a esse sinalizador apenas para fixações em filtros centrados em filtros.

KSPIN_FLAG_USE_STANDARD_TRANSPORT

Esse sinalizador força o pino a usar o mecanismo de transporte padrão. Ele substitui todas as outras verificações (tipo de comunicação, tipo médio, tipo de interface etc.) no pino. Especificar esse sinalizador e KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT resulta no transporte padrão sendo usado. Esse sinalizador substitui todas as outras verificações.

KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT

Indica que o pino não usa o mecanismo de transporte padrão. Os pinos que não usam o mecanismo de transporte padrão não pertencerão a uma seção de pipe e não terão filas associadas.

KSPIN_FLAG_FIXED_FORMAT

Indica que esse pino usa um formato de dados fixo. Qualquer tentativa de definir o formato de dados retorna STATUS_INVALID_DEVICE_REQUEST.

KSPIN_FLAG_GENERATE_EOS_EVENTS

Indica que esse pino manipula solicitações de suporte a eventos de conexão.

KSPIN_FLAG_RENDERER

Especifica que esse pino é capaz de renderizar quadros.

KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING

Quando especificado em um pino de filtro centrado em filtro, indica que uma ou mais instâncias do tipo de pino em questão devem ter quadros disponíveis para processar dados. Mutuamente exclusivo com KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING.

Observe que esse comportamento pode ser obtido por meio de KsPinAttachOrGate configurando manualmente um portão OR como o portão de quadro para cada instância do pino e anexando esse portão OR à porta AND do filtro.

Ao usar esse sinalizador, os minidrivers não podem chamar KsPinAttachAndGate ou KsPinAttachOrGate nas instâncias de pino associadas. (O sinalizador efetivamente faz isso para você para o caso OR simples.) Consulte também Filter-Centric processando.

KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE

Quando especificado em um pino de centrado em filtro, indica que o processamento pode ocorrer quando uma ou mais instâncias de pinos tão sinalizadas estão no estado de execução. Todos os pinos não interrompidos ainda devem estar em pelo menos uma pausa para processar dados. Não use esse sinalizador se o pino correspondente for um pino de saída e esse pino estiver envolvido em uma transformação in-loco.

KSPIN_FLAG_DENY_USERMODE_ACCESS

Esse sinalizador impede o acesso do modo de usuário a esse pino específico.

KSPIN_FLAG_IMPLEMENT_CLOCK

Indica que esse pino expõe um relógio que pode ser selecionado pelo gerenciador de grafo como um relógio mestre. Consulte também de Relógios AVStream.

InstancesPossible

Especifica um valor do tipo ULONG que contém uma contagem do número máximo de instâncias possíveis desse pino. Qualquer tentativa de instanciar mais do que esse número de pinos do tipo fornecido falha. Defina como KSINSTANCE_INDETERMINATE não ter limite no número de pinos instanciados.

InstancesNecessary

Especifica um valor do tipo ULONG que contém o número mínimo de pinos de um determinado tipo de pino que são necessários para estar em um estado no ou acima do nível mínimo de processamento para o funcionamento adequado do filtro. Por padrão, o nível mínimo de processamento é KSSTATE_PAUSE, embora o minidriver possa modificar o comportamento padrão definindo o Flags membro dessa estrutura como KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY ou KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE. Qualquer tentativa de alterar o estado de um filtro que não tenha esse número de instâncias desse tipo de pino falha. Consulte informações adicionais na seção Comentários.

AllocatorFraming

Um ponteiro para uma estrutura de KSALLOCATOR_FRAMING_EX que contém os requisitos de enquadramento do alocador para esse tipo de pino. O enquadramento do alocador especifica itens como requisitos de alinhamento de memória, tamanho máximo do quadro e tamanho mínimo do quadro. Esse membro pode ser NULL, o que indica que esse pin não dá suporte à propriedade de enquadramento do alocador.

IntersectHandler

Um ponteiro para uma função KStrIntersectHandlerEx definida pelo driver para lidar com a interseção de dados. Se esse membro estiver NULL, o pino manipulará consultas de interseção de dados para intervalos de dados com o KSDATAFORMAT_SPECIFIER_NONE especificador. A função de manipulador de interseção recebe um único intervalo de dados da consulta e um único intervalo de dados da lista de pinos de intervalos de dados. O tipo, o subtipo e os GUIDs especificadores desses intervalos são garantidos para corresponder, embora alguns possam ser curingas. A função indica que os intervalos de dados não correspondem ou produz o melhor formato de dados na interseção dos dois intervalos de dados. Consulte interseções de intervalo de dados no AVStream para obter mais informações.

Observações

O AMCap e o Blink podem não conseguir encontrar interfaces de ajuste e de barra cruzada no driver AVStream se o InstancesNecessary membro do KSPIN_DESCRIPTOR_EX estiver definido como zero para o pin de entrada de vídeo analógico. Para corrigir esse problema, defina InstancesNecessary para esse pin como um.

Observe que os requisitos de enquadramento do alocador do seu pin podem ser ignorados, apesar do fato de que o enquadramento do alocador especifica que o alinhamento ou o tamanho é absolutamente necessário para ser um determinado valor. Se o driver do modo kernel estiver conectado a um filtro de modo de usuário upstream que aloca para ele e o alocador do filtro upstream específico não entender os requisitos de enquadramento, isso poderá acontecer (exemplos específicos atuais incluem o divisor MPEG-2).

Além disso, se você especificar KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING e o pino usar o mecanismo de transporte padrão, você deverá ter um objeto de processamento. Isso significa que deve haver algum processo de expedição fornecido (no nível do filtro ou no nível do pino); mesmo que essa função nunca seja chamada, ela deve ser fornecida nesta circunstância.

interseções de intervalo de dados no AVStream e de divisores AVStream.

Requisitos

Requisito Valor
cabeçalho ks.h (incluir Ks.h)

Consulte também

KSALLOCATOR_FRAMING_EX

KSPIN_DESCRIPTOR

KSPIN_DISPATCH

KsDeviceRegisterAdapterObject