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.
[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEnginee Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize 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.]
[Esta API não é suportada e pode ser alterada ou indisponível no futuro.]
Para visualizar um projeto, primeiro chame CoCreateInstance para criar uma instância do Basic Render Engine. O identificador de classe é CLSID_RenderEngine. Em seguida, chame o método IRenderEngine::SetTimelineObject para especificar a linha do tempo que você está renderizando.
Na primeira vez que você visualizar a linha do tempo, execute as seguintes chamadas na ordem listada:
- Chame IRenderEngine::SetRenderRange para especificar qual parte da linha do tempo deve ser visualizada. (Opcional)
- Chame IRenderEngine::ConnectFrontEnd para criar o front-end do gráfico.
- Chamada IRenderEngine::RenderOutputPins. Este método conecta cada pino de saída a um renderizador de vídeo ou áudio, completando o gráfico.
O exemplo de código a seguir mostra essas etapas:
IRenderEngine *pRender = NULL;
hr = CoCreateInstance(CLSID_RenderEngine, NULL,
CLSCTX_INPROC_SERVER, IID_IRenderEngine, (void**)&pRender);
hr = pRender->SetTimelineObject(pTL);
hr = pRender->ConnectFrontEnd();
hr = pRender->RenderOutputPins();
Agora execute o gráfico de filtro. Primeiro, chame o método IRenderEngine::GetFilterGraph para recuperar um ponteiro para a interface IGraphBuilder do Filter Graph Manager. Em seguida, consulte o Filter Graph Manager para o interface IMediaControl e chame IMediaControl::Run, conforme mostrado no código a seguir:
IGraphBuilder *pGraph = NULL;
IMediaControl *pControl = NULL;
hr = pRender->GetFilterGraph(&pGraph);
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pControl->Run();
Use a interface deIMediaEventEx do Filter Graph Managerpara aguardar a conclusão da visualização. Você também pode procurar o gráfico usando a interface IMediaSeeking do Filter Graph Manager, assim como faria com um gráfico de reprodução de arquivos.
Para visualizar o projeto novamente, procure o gráfico de volta ao tempo zero e chame Executar novamente. Se você alterar o conteúdo da linha do tempo, faça o seguinte:
- Ligue SetRenderRange. (Opcional)
- Ligue ConnectFrontEnd.
- Se o método ConnectFrontEnd retornar S_WARN_OUTPUTRESET, chame RenderOutputPins. (Se ConnectFrontEnd retornar S_OK, poderá ignorar esta etapa.)
- Procure o gráfico de volta ao tempo zero.
- Execute o gráfico.
O exemplo a seguir mostra essas etapas:
hr = pRender->ConnectFrontEnd();
if (hr == S_WARN_OUTPUTRESET)
{
hr = pRender->RenderOutputPins();
}
LONGLONG llStart = 0;
hr = pSeek->SetPositions(&llStart, AM_SEEKING_AbsolutePositioning, 0, 0);
hr = pControl->Run();
Para obter um exemplo completo que carrega e visualiza um arquivo de projeto, consulte Carregando e visualizando um projeto.
Tópicos relacionados