Compartilhar via


Pinos de porta de vídeo

[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.]

Um dispositivo de captura com uma porta de vídeo de hardware pode usar as VPE (extensões de porta de vídeo) no Microsoft® DirectX®. Nesse caso, o filtro de captura terá um pino de porta de vídeo (VP). Nenhum dado de vídeo viaja do pino VP pelo grafo de filtro. Em vez disso, os quadros de vídeo são produzidos em hardware e enviados diretamente para a memória de vídeo. O pin VP permite que as mensagens de controle sejam enviadas para o hardware.

É importante conectar o pin VP, mesmo que seu aplicativo execute apenas a captura de arquivo sem visualização. Se você deixar o pino desconectado, o grafo não será executado corretamente. Isso é diferente dos pinos de visualização, que não precisam ser conectados.

Os diferentes renderizadores de vídeo do DirectShow fornecem suporte variável para pinos de VP:

  • Renderizador de Vídeo: conecte o pino de VP para fixar 0 no filtro Do Mixer de Sobreposição e conecte o filtro do Mixer de Sobreposição ao Renderizador de Vídeo.
  • VMR-7: conecte o pino VP ao filtro gerenciador de portas de vídeo e conecte o Gerenciador de Portas de Vídeo à VMR-7.
  • VMR-9: você não poderá usar a VMR-9 se o dispositivo tiver um pin VP, pois o Direct3D 9 não dá suporte a portas de vídeo. Use o Renderizador de Vídeo ou a VMR-7.

Para cenários de porta de vídeo, o Mixer de Sobreposição e o Renderizador de Vídeo são recomendados no Gerenciador de Portas de Vídeo e na VMR-7, pois nem todos os drivers dão suporte ao Gerenciador de Portas de Vídeo. Em geral, o Overlay Mixer é a opção mais confiável para portas de vídeo.

O método ICaptureGraphBuilder2::RenderStream insere automaticamente o Mixer de Sobreposição se houver um pin de VP. Se você estiver criando o grafo sem usar esse método, deverá marcar para um pino de porta de vídeo no filtro de captura e, se houver, conecte-o ao filtro Do Mixer de Sobreposição, conforme mostrado no diagrama a seguir.

conectando um pino de porta de vídeo ao filtro de mixer de sobreposição.

Você pode usar o método ICaptureGraphBuilder2::FindPin para pesquisar um pin VP no filtro de captura:

hr = pBuild->FindPin(
    pCap,                    // Pointer to the capture filter.
    PINDIR_OUTPUT,           // Look for an output pin.
    &PIN_CATEGORY_VIDEOPORT, // Look for a video port pin.
    NULL,                    // Any media type.
    FALSE,                   // Pin can be connected.
    0,                       // Retrieve the first matching pin.
    &pVPPin                  // Receives a pointer to the pin.
);

Depois de adicionar o Mixer de Sobreposição ao grafo, chame FindPin novamente para localizar o pino 0 no Mixer de Sobreposição. O pino 0 é sempre o primeiro pino de entrada no filtro.

pBuild->FindPin(pOvMix, PINDIR_INPUT, NULL, NULL, TRUE, 0, &pOVPin);

Conecte os dois pinos chamando IGraphBuilder::Connect.

pGraph->Connect(pVPPin, pOvPin);

Em seguida, conecte o pino de saída do Mixer de Sobreposição ao filtro do Renderizador de Vídeo. Você pode ocultar o vídeo chamando os métodos IVideoWindow::p ut_AutoShow e IVideoWindow::p ut_Visible no Gerenciador de Grafo de Filtro.

Para sintonizadores de TV, o filtro de captura também pode ter um pino de VBI de porta de vídeo (PIN_CATEGORY_VIDEOPORT_VBI). Nesse caso, conecte esse pino ao filtro Alocador de Superfície do VBI . Para obter mais informações, consulte Exibindo legendas fechadas.

Tópicos avançados de captura

Usando o Mixer de Sobreposição na Captura de Vídeo