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.
Por padrão, cada fila do AVStream contém um ponteiro de fluxo de borda dianteira . A borda dianteira aponta para novos quadros à medida que eles chegam à fila. Especificamente, a borda dianteira inicialmente aponta para o primeiro quadro para chegar à fila e não se move até que o minidriver o mova. O AVStream cria a borda dianteira, que então existe durante o tempo de vida da fila. Minidrivers podem manipular a borda de ponta usando funções fornecidas pela Microsoft.
Quando um novo quadro chega na fila, o AVStream define a extremidade dianteira para apontar para esse quadro, desde que a extremidade dianteira não aponte já para um quadro.
Para obter um ponteiro para o ponteiro de fluxo de borda principal, o minidriver chama KsPinGetLeadingEdgeStreamPointer.
O minidriver é responsável por avançar a frente em todas as situações, exceto nas duas resumidas na tabela seguinte.
| Situação | Comportamento do AVStream |
|---|---|
Um quadro chega numa fila préviamente vazia. |
O AVStream define a borda dianteira para apontar para este quadro. |
A borda dianteira aponta para um quadro. O IRP correspondente a este quadro é cancelado. |
O AVStream avança na vanguarda. A vantagem agora aponta para um quadro mais novo. |
Consulte Introdução aos ponteiros de fluxo Para obter mais informações sobre como avançar ponteiros de fluxo.
Especificando um ponteiro de fluxo de borda à direita
Os minidrivers podem especificar que uma fila tenha um ponteiro de fluxo de borda traseira. A borda de fuga geralmente indica o quadro mais antigo de interesse para o minidriver. Para especificar uma aresta final, defina o sinalizador KSPIN_FLAG_DISTINCT_TRAILING_EDGE no membro Flags da estrutura KSPIN_DESCRIPTOR_EX relevante. Em seguida, chame KsPinGetTrailingEdgeStreamPointer para obter um ponteiro para o ponteiro de fluxo de borda à direita.
Quando a borda à direita avança, a contagem de referência no quadro para o qual ela apontava anteriormente cai para zero e o quadro é concluído. Se o quadro for o último contido em seu IRP, um pino de coletor completa o IRP para o chamador; um pino de origem envia o IRP para o pino ao qual ele está conectado.
Mantendo uma janela de moldura
Como resultado das regras de contagem de referência de quadro descritas em Introdução aos Ponteiros de Fluxo, um quadro entre as extremidades dianteira e traseira permanece na fila até ser cancelado, mesmo que o quadro não seja utilizado por um ponteiro de fluxo. Como tal, um minidriver pode usar os ponteiros de borda dianteira e traseira para manter uma janela de trabalho de vários quadros contíguos. Os quadros na janela podem estar aguardando processamento ou preenchimento, por exemplo.
No diagrama a seguir, os quadros mais antigos estão na parte inferior. Novos quadros chegam ao topo. O número em cada quadro é a contagem de referência para esse quadro. Quando os ponteiros de fluxo avançam, eles se movem para cima neste diagrama.
A fila mais à esquerda mostra como o minidriver pode usar uma borda à direita para criar um conjunto funcional de quadros. Cada quadro entre a borda dianteira e a borda final tem uma contagem de referência de um, apesar do fato de que nenhum ponteiro de fluxo faz referência a esses quadros.
A fila do meio é um exemplo de ponteiros de fluxo de clonagem. O driver clonou repetidamente e, em seguida, avançou a borda dianteira, conforme descrito nas etapas do processo de pinos no AVStream DMA Services.
A fila mais à direita mostra como o minidriver pode manter a contagem de referência para um quadro atrás da borda traseira usando um clone de ponteiro de fluxo de dados.