Compartir a través de


Vista previa de un proyecto

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

[Esta API no se admite y puede modificarse o no estar disponible en el futuro].

Para obtener una vista previa de un proyecto, primero llame a CoCreateInstance para crear una instancia del motor de representación básico. El identificador de clase es CLSID_RenderEngine. A continuación, llame al método IRenderEngine::SetTimelineObject para especificar la escala de tiempo que va a representar.

La primera vez que obtenga una vista previa de la escala de tiempo, realice las siguientes llamadas en el orden indicado:

  1. Llame a IRenderEngine::SetRenderRange para especificar qué parte de la escala de tiempo se va a obtener una vista previa. (Opcional)
  2. Llame a IRenderEngine::ConnectFrontEnd para crear el front-end del grafo.
  3. Llame a IRenderEngine::RenderOutputPins. Este método conecta cada patilla de salida a un representador de vídeo o a un representador de audio, completando el gráfico.

En el ejemplo de código siguiente se muestran estos pasos:

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();

Ahora, ejecute el gráfico de filtros. En primer lugar, llame al método IRenderEngine::GetFilterGraph para recuperar un puntero a la interfaz IGraphBuilder de Filter Graph Manager. A continuación, consulte el Administrador de gráficos de filtros para la interfaz IMediaControl y llame a IMediaControl::Run, como se muestra en el código siguiente:

IGraphBuilder   *pGraph = NULL;
IMediaControl   *pControl = NULL;
hr = pRender->GetFilterGraph(&pGraph);
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pControl->Run();

Use la interfaz IMediaEventEx de Filter Graph Manager para esperar a que se complete la versión preliminar. También puede buscar el gráfico mediante la interfaz IMediaSeeking del Administrador de gráficos de filtros, como lo haría con un gráfico de reproducción de archivos.

Para obtener una vista previa del proyecto de nuevo, vuelva a buscar el gráfico en el tiempo cero y llame a Ejecutar de nuevo. Si cambia el contenido de la escala de tiempo, haga lo siguiente:

  1. Llame a SetRenderRange. (Opcional)
  2. Llame a ConnectFrontEnd.
  3. Si el método ConnectFrontEnd devuelve S_WARN_OUTPUTRESET, llame a RenderOutputPins. (Si ConnectFrontEnd devuelve S_OK, puede omitir este paso).
  4. Vuelva a buscar el gráfico en el tiempo cero.
  5. Ejecute el gráfico.

En el ejemplo siguiente se muestran estos pasos:

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 obtener un ejemplo completo que carga y previsualiza un archivo de proyecto, vea Carga y vista previa de un proyecto.

Administración de proyectos de edición de vídeo

Representación de un proyecto