Partilhar via


Alocadores AVStream

O driver de classe AVStream usa um alocador para alocar buffers de dados em unidades chamadas quadros. Um quadro é um pedaço de memória contínua, cujo tamanho é especificado pelo fornecedor através do membro AllocatorFraming do KSPIN_DESCRIPTOR_EX.

Os minidrivers acessam esses buffers por meio da API de ponteiros de fluxo ; chame KsPinGetLeadingEdgeStreamPointer para adquirir um ponteiro no fluxo.

Os clientes AVStream podem obter informações sobre os requisitos de enquadramento de um pino usando a propriedade somente leitura KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX. Essa propriedade retorna uma estrutura do tipo KSALLOCATOR_FRAMING_EX que descrevem os requisitos de enquadramento para o pino.

Quando os dados não estão mais em uso, o AVStream usa o alocador para liberar o buffer.

O AVStream fornece um alocador padrão. O alocador padrão aloca memória de pool com base nos requisitos do alocador que o minidriver fornece no membro AllocatorFraming da estrutura KSPIN_DESCRIPTOR_EX .

Um fornecedor com requisitos de alocação específicos do dispositivo pode escrever um minidriver que inclua suas próprias rotinas de alocação. Por exemplo, você pode fornecer um alocador se o driver aloca memória de um buffer DMA comum.

Para fornecer um alocador, forneça uma estrutura KSALLOCATOR_DISPATCH que contenha ponteiros para as seguintes rotinas de retorno de chamada fornecidas pelo fornecedor:

Forneça um ponteiro para esta estrutura de despacho do alocador no membro Allocator da estrutura KSPIN_DISPATCH descrevendo o pino para o qual este alocador instanciará frames.

Forneça um ponteiro para esta estrutura de despacho de pinos no membro Dispatch da correspondente estrutura KSPIN_DESCRIPTOR_EX. Para saber mais sobre estruturas de despacho no AVStream, leia Tabelas de despacho do AVStream.

Em tempo de execução, o gerenciador de gráficos (por exemplo, o módulo Kernel Streaming Proxy ) lida com a seleção do alocador. Não é garantido que um alocador fornecido pelo fornecedor seja selecionado pelo gerente gráfico.

Um alocador de modo kernel só é escolhido se a conexão estiver no modo kernel. Além disso, o alocador pode ser rejeitado se houver incompatibilidade entre os requisitos do alocador e as suas capacidades. Se o alocador não estiver selecionado, a função de retorno de chamada AVStrMiniInitializeAllocator nunca será chamada.

Consulte também AVStream DMA Services and Stream Pointers.