Modelo de pull

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Na interface IMemInputPin, o filtro upstream determina quais dados enviar e envia os dados por push para o filtro downstream. Para alguns filtros, um modelo de pull é mais apropriado. Aqui, o filtro downstream solicita dados do filtro upstream. Os exemplos ainda viajam downstream, do pino de saída ao pino de entrada, mas o filtro downstream inicia o fluxo de dados. Esse tipo de conexão usa a interface IAsyncReader .

O uso típico para o modelo de pull está na reprodução de arquivo. Por exemplo, em um grafo de reprodução AVI, o filtro Fonte de Arquivo Assíncrono executa operações genéricas de leitura de arquivo e fornece os dados como um fluxo de bytes, sem informações de formato. O filtro Divisor de AVI lê os cabeçalhos AVI e analisa o fluxo em exemplos de vídeo e áudio. O Divisor de AVI pode determinar quais dados ele precisa melhor do que o filtro Fonte de Arquivo Assíncrono e, portanto, usa IAsyncReader em vez de IMemInputPin.

Para solicitar dados do pino de saída, o pin de entrada chama um dos seguintes métodos:

O primeiro método é assíncrono, para dar suporte a várias leituras sobrepostas. Os outros são síncronos.

Em teoria, qualquer filtro pode dar suporte a IAsyncReader, mas, na prática, ele foi projetado para filtros de origem que se conectam a filtros de analisador. O analisador atua muito como um filtro de origem no modelo de push. Quando ele pausa, ele cria um thread de streaming que extrai dados da conexão IAsyncReader e os envia por push para baixo. Os pinos de saída usam IMemInputPin e o restante do grafo usa o modelo de push padrão.

Fluxo de Dados no Grafo de Filtro