Alocadores AVStream
O driver de classe AVStream usa um Alocador para alocar buffers de dados em unidades chamadas quadros. Um quadro é uma parte da memória contínua, cujo tamanho é especificado pelo fornecedor por meio do membro AllocatorFraming do KSPIN_DESCRIPTOR_EX.
Os minidrivers acessam esses buffers por meio da API stream pointers ; chame KsPinGetLeadingEdgeStreamPointer para adquirir um ponteiro para o fluxo.
Os clientes AVStream podem obter informações sobre os requisitos de enquadramento de um pin 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 do 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 inclui suas próprias rotinas de alocação. Por exemplo, você poderá fornecer um alocador se o driver alocar memória de um buffer de DMA comum.
Para fornecer um alocador, forneça uma estrutura KSALLOCATOR_DISPATCH que contém ponteiros para as seguintes rotinas de retorno de chamada fornecidas pelo fornecedor:
Forneça um ponteiro para essa estrutura de expedição do alocador no membro Allocator da estrutura KSPIN_DISPATCH que descreve o pino para o qual esse alocador instanciará quadros.
Forneça um ponteiro para essa estrutura de expedição de pino no membro Dispatch da estrutura de KSPIN_DESCRIPTOR_EX correspondente. Para saber mais sobre estruturas de expedição no AVStream, leia Tabelas de Expedição AVStream.
Em tempo de execução, o gerenciador de grafo (por exemplo, o módulo Proxy de Streaming de Kernel ) manipula a seleção do alocador. Não há garantia de que um alocador fornecido pelo fornecedor seja selecionado pelo gerenciador de grafo.
Um alocador de modo kernel só será escolhido se a conexão estiver no modo kernel. Além disso, seu alocador poderá ser rejeitado se houver uma incompatibilidade nos requisitos do alocador e nos recursos do alocador. Se o alocador não estiver selecionado, sua rotina de retorno de chamada AVStrMiniInitializeAllocator nunca será chamada.
Consulte também Serviços de DMA do AVStream e Ponteiros de Fluxo.