Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um minidriver AVStream pode usar a funcionalidade de driver de classe AVStream para dividir um fluxo de dados em várias cópias à medida que o fluxo passa por um determinado pino. Esse processo de divisão pode ser útil se o driver precisar copiar um fluxo de entrada para produzir dois fluxos de saída idênticos.
Para fazer isso, defina KSPIN_FLAG_SPLITTER no membro Flags da estrutura KSPIN_DESCRIPTOR_EX do pino. Quando esse sinalizador é definido em um pino, o pino atua como um divisor automático. O AVStream copia automaticamente todos os dados necessários para dividir o fluxo.
Em versões posteriores ao DirectX8.0, o sinalizador KSPIN_FLAG_SPLITTER funciona para pinos em filtros filtro-cêntricos e pino-cêntricos. As versões anteriores dão suporte a esse sinalizador apenas para pinos em filtros centrados em filtro.
O diagrama a seguir mostra a configuração de um filtro no qual o pino de entrada divide um fluxo em dois pinos de saída. Os filtros downstream desse pino de saída alteram os dados em seu lugar.
Os quadros chegam ao pino de entrada e são colocados na fila de entrada. O minidriver interage apenas com a fila de entrada e a fila de saída para o pino original. O AVStream copia automaticamente os dados da fila do primeiro pino para a fila do segundo pino.
Para simplificar, este diagrama não mostra como os quadros são entregues ao pino de saída. Para fornecer quadros ao pino de saída, por exemplo, pode haver um solicitante e um alocador associados a cada fila e pertencentes a esta seção de pipeline. Como alternativa, os quadros podem vir de um filtro downstream.
Na estrutura KSFILTER_DISPATCH, o minidriver especifica um ponteiro para uma rotina de callback AVStrMiniFilterProcess fornecida pelo fornecedor. Essa rotina de retorno de chamada é onde o minidriver recebe um ponteiro para uma estrutura KSPROCESSPIN_INDEXENTRY que contém uma matriz das estruturas KSPROCESSPIN descritas abaixo.
Este diagrama mostra como o minidriver distingue entre os dois pinos de saída na lista de pinos de processo:
Neste diagrama, db refere-se ao membro DelegateBranch da estrutura KSPROCESSPIN e CS refere-se ao membro CopySource . Os membros DelegateBranch e CopySource do pino de entrada e do primeiro pino de saída são NULL. Isso indica que o minidriver é responsável por manipular quadros de vídeo nesses pinos.
No entanto, o segundo pino de saída possui um CopySource que aponta para o primeiro pino de saída. Isso indica que o segundo pino de saída está em um canal separado do primeiro pino de saída e que o AVStream está copiando automaticamente quaisquer dados inseridos na fila do primeiro pino de saída para a fila do segundo pino de saída.
Casos de divisão mais complicados podem surgir quando dois pinos de saída são incorporados ao mesmo tubo. Um minidriver pode incluir, por exemplo, dois pinos de saída que funcionam como divisores no mesmo pipeline, desde que os filtros a jusante não alterem os dados enviados por esses pinos. Como os dados não são modificados, os pinos de saída são considerados somente leitura; Ambos os filtros downstream recebem os mesmos buffers.
Também é possível que alguns dos filtros downstream que são encaixados automaticamente ao pino de divisor modifiquem os dados, enquanto outros não.
Nesse caso, o layout do filtro pode ser semelhante ao diagrama a seguir, que ilustra um filtro que contém três instâncias do pino de saída dividido:
Os pinos A e B são atribuídos ao mesmo tubo porque os filtros a jusante não alteram os dados; os filtros a jusante de A e B recebem os mesmos ponteiros de buffer.
O minidriver interage apenas com a fila de entrada e uma única fila de saída. O AVStream copia automaticamente da fila A/B e da fila C. Ele também cria um objeto divisor que envia os mesmos quadros de dados por meio do pino A e do pino B (observe que os cabeçalhos de fluxo diferem).
A matriz de estruturas KSPROCESSPIN é a seguinte:
O único pino com o qual o minidriver deve interagir em circunstâncias normais é o pino A.
Para simplificar os diagramas acima, os solicitantes e os alocadores foram omitidos dos diagramas. Os diagramas destinam-se a demonstrar apenas o processo de divisão de quadros.