Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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 centrados em filtros e centrados em pinos. As versões anteriores suportam este sinalizador apenas para pinos em filtros centrados em critérios.
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 a jusante deste pino de saída alteram os dados no próprio lugar.
Os quadros chegam ao pino de entrada e são colocados na fila de entrada. O minidriver interage unicamente com a fila de entrada e a fila de saída do 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 para o pino de saída, por exemplo, poderia haver um solicitante e um alocador associados a cada fila e pertencentes a esse segmento de tubo. Alternativamente, os frames podem vir de um filtro a jusante.
Na estrutura KSFILTER_DISPATCH, o minidriver especifica um ponteiro para uma rotina de callback AVStrMiniFilterProcess fornecida pelo fornecedor. Esta rotina de retorno de chamada é onde o minidriver recebe um ponteiro para uma estrutura KSPROCESSPIN_INDEXENTRY contendo a matriz de estruturas KSPROCESSPIN descritas abaixo.
Este diagrama mostra como o minidriver distingue entre os dois pinos de saída na lista de pinos do 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. Isto indica que o minidriver é responsável por gerir frames nestes pinos.
O segundo pino de saída, no entanto, tem um CopySource que aponta de volta para o primeiro pino de saída. Isso indica que o segundo pino de saída está em um pipe separado do primeiro pino de saída e que o AVStream está copiando automaticamente todos os dados colocados na fila do primeiro pino de saída para a fila do segundo pino de saída.
Casos de divisores mais complicados podem surgir quando dois pinos de saída são construídos no mesmo tubo. Um minidriver pode incluir dois terminais de saída baseados em divisores de sinal na mesma canalização, por exemplo, desde que os filtros a jusante não alterem os dados enviados desses terminais. Como os dados não são modificados, os pinos de saída são considerados somente leitura; ambos os filtros a jusante recebem os mesmos buffers.
Também é possível que alguns dos filtros a jusante que se ligam automaticamente ao pino divisor alterem os dados, enquanto outros não.
Nesse caso, o layout do filtro pode ser semelhante ao diagrama a seguir, que mostra 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 através 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, solicitantes e alocadores foram omitidos dos diagramas. Os diagramas destinam-se a demonstrar apenas o processo de divisão do quadro.