Fixar Conexões

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in 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 Audio/Video Capture in 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.]

Os filtros se conectam em seus pinos, por meio da interface IPin . Os pinos de saída se conectam aos pinos de entrada. Cada conexão de pino tem um tipo de mídia, descrito pela estrutura AM_MEDIA_TYPE .

Um aplicativo conecta filtros chamando métodos no Gerenciador de Grafo de Filtro, nunca chamando métodos nos próprios filtros ou pinos. O aplicativo pode especificar diretamente quais filtros se conectar, chamando o método IFilterGraph::ConnectDirect ou IGraphBuilder::Connect ; ou pode conectar filtros indiretamente, usando um método de criação de grafo como IGraphBuilder::RenderFile.

Para que a conexão seja bem-sucedida, ambos os filtros devem estar no grafo de filtro. O aplicativo pode adicionar um filtro ao grafo chamando o método IFilterGraph::AddFilter . O Gerenciador de Grafo de Filtro também pode adicionar filtros ao grafo. Quando um filtro é adicionado, o Gerenciador do Gráfico de Filtro chama o método IBaseFilter::JoinFilterGraph do filtro para notificar o filtro.

A estrutura de tópicos geral do processo de conexão é a seguinte:

  1. O Gerenciador de Grafo de Filtro chama IPin::Connect no pino de saída, passando um ponteiro para o pino de entrada.
  2. Se o pino de saída aceitar a conexão, ele chamará IPin::ReceiveConnection no pin de entrada.
  3. Se o pino de entrada também aceitar a conexão, a tentativa de conexão terá êxito e os pinos serão conectados.

Alguns pinos podem ser desconectados e reconectados enquanto o filtro está ativo. Esse tipo de reconexão é chamado de reconexão dinâmica . Para obter mais informações, consulte Dynamic Graph Building. No entanto, a maioria dos filtros não dá suporte à reconexão dinâmica.

Os filtros geralmente são conectados em ordem downstream— em outras palavras, os pinos de entrada do filtro são conectados antes de seus pinos de saída. Um filtro sempre deve dar suporte a essa ordem de conexão. Alguns filtros também dão suporte a conexões na ordem oposta — pinos de saída primeiro, seguidos por pinos de entrada. Por exemplo, pode ser possível conectar o pino de saída de um filtro MUX ao filtro de gravador de arquivos, antes de conectar os pinos de entrada do filtro MUX.

Quando o método Connect ou ReceiveConnection de um pin é chamado, o pin deve verificar se ele pode dar suporte à conexão. Os detalhes dependem do filtro específico. As tarefas mais comuns incluem o seguinte:

  • Verifique se o tipo de mídia é aceitável
  • Negociar um alocador
  • Consulte o outro pino para as interfaces necessárias.