Поделиться через


Предварительный просмотр проекта

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

[Этот API не поддерживается и может быть изменен или недоступен в будущем.]

Для предварительного просмотра проекта сначала вызовите CoCreateInstance , чтобы создать экземпляр базового обработчика отрисовки. Идентификатор класса — CLSID_RenderEngine. Затем вызовите метод IRenderEngine::SetTimelineObject, чтобы указать отрисовку временная шкала.

При первом просмотре временная шкала выполните следующие вызовы в указанном порядке:

  1. Вызовите метод IRenderEngine::SetRenderRange, чтобы указать, какая часть временная шкала предварительного просмотра. (необязательно)
  2. Вызовите метод IRenderEngine::ConnectFrontEnd , чтобы создать внешний интерфейс графа.
  3. Вызовите метод IRenderEngine::RenderOutputPins. Этот метод подключает каждый выходной контакт к отрисовщику видео или звуковому отрисовщику, заполняя граф.

В следующем примере кода показаны следующие шаги:

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

Теперь запустите граф фильтра. Сначала вызовите метод IRenderEngine::GetFilterGraph , чтобы получить указатель на интерфейс IGraphBuilder диспетчера фильтров графов. Затем выполните запрос к диспетчеру фильтров графа для интерфейса IMediaControl и вызовите IMediaControl::Run, как показано в следующем коде:

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

Используйте интерфейс IMediaEventEx диспетчера фильтров графов, чтобы дождаться завершения предварительной версии. Вы также можете искать граф с помощью интерфейса IMediaSeeking диспетчера фильтров графов, как и граф воспроизведения файлов.

Чтобы снова просмотреть проект, найдите график до нулевого времени и вызовите команду Выполнить еще раз. При изменении содержимого временная шкала выполните следующие действия.

  1. Вызов setRenderRange. (необязательно)
  2. Вызовите ConnectFrontEnd.
  3. Если метод ConnectFrontEnd возвращает S_WARN_OUTPUTRESET, вызовите RenderOutputPins. (Если ConnectFrontEnd возвращает S_OK, этот шаг можно пропустить.)
  4. Найдите график назад к нулю времени.
  5. Запустите граф.

В следующем примере показано следующее:

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

Полный пример загрузки и предварительного просмотра файла проекта см. в разделе Загрузка и предварительный просмотр проекта.

Управление проектами редактирования видео

Отрисовка проекта