Создание фильтра DVD Graph

как и в любом DirectShow приложении, приложение для воспроизведения DVD-дисков начинается с создания графа фильтра. DirectShow предоставляет следующие компоненты для воспроизведения DVD-дисков:

  • построитель DVD Graph. Вспомогательный объект, создающий граф фильтра. Он предоставляет интерфейс идвдграфбуилдер .
  • Фильтр DVD Navigator . фильтр DirectShow, который обрабатывает воспроизведение DVD-дисков, навигацию и другие команды.

Для воспроизведения DVD также требуется декодер MPEG-2. Декодеры MPEG-2 и программное обеспечение доступны третьим лицам. сначала создайте экземпляр объекта Graph построителя DVD-дисков.

IDvdGraphBuilder *pBuild = NULL;
hr = CoCreateInstance(CLSID_DvdGraphBuilder, NULL, 
    CLSCTX_INPROC_SERVER, IID_IDvdGraphBuilder, (void **)&pBuild);

На этом этапе можно выбрать и настроить модуль подготовки видео перед построением остальной части графа. Этот шаг, который является необязательным, подробно описан в следующем разделе. если пропустить этот шаг, то построитель DVD Graph выберет модуль подготовки отчетов по умолчанию. Затем создайте граф, вызвав метод идвдграфбуилдер:: рендердвдвидеоволуме .

AM_DVD_RENDERSTATUS buildStatus;
hr = pBuild->RenderDvdVideoVolume(L"Z:\\video_ts", 0, &buildStatus);

Первый параметр — это имя каталога, содержащего файлы DVD. На DVD-диске эти файлы находятся в каталоге с именем VIDEO _ TS. если первый параметр имеет значение NULL, то построитель dvd Graph использует первый диск, содержащий том DVD.

Второй параметр содержит различные необязательные флаги для выбора типа декодера (аппаратного или программного обеспечения) и других параметров.

Третьим параметром является Структура _ _ рендерстатус DVD , которая получает сведения о состоянии. Если метод рендердвдвидеоволуме возвращает _ значение false, это означает, что вызов частично завершился успешно (или частично завершился сбоем, если вы являетесь пессимистичным). Например, метод может не обрабатывать поток субтитров, даже если другие потоки успешно визуализируются. Если метод рендердвдвидеоволуме возвращает код ошибки или значение _ false, можно просмотреть сведения об ошибке в структуре _ DVD _ рендерстатус .

затем получите указатель на фильтр Graph Manager, вызвав идвдграфбуилдер:: жетфилтерграф. этот метод возвращает указатель на интерфейс играфбуилдер диспетчера фильтров Graph.

IGraphBuilder *pGraph = NULL;
hr =  pBuild->GetFiltergraph(&m_pGraph);

Используйте метод идвдграфбуилдер:: жетдвдинтерфаце для получения интерфейсов, связанных с DVD, включая следующие:

  • IDvdControl2. Управляет командами воспроизведения и DVD
  • IDvdInfo2. Возвращает сведения о текущем состоянии DVD-навигатора.
  • IAMLine21Decoder. Управляет отображением скрытых субтитров. Отображение скрытых субтитров включено по умолчанию. Чтобы отключить его, вызовите IAMLine21Decoder:: SetServiceState с _ _ флагом AM L21 ккстате _ Off.
  • Ибасикаудио. Управляет звуковым Томом и балансом.

Например, следующий код возвращает интерфейс IDvdControl2 .

IDvdControl2 *pDvdControl = NULL;
hr = pBuild->GetDvdInterface(IID_IDvdControl2, (void**)&pDvdControl);

чтобы создать граф фильтра воспроизведения dvd, рекомендуется сделать так, чтобы объект dvd Graph Builder выполнил его автоматически. Этот подход показан ниже и в примере приложения DVD. если вам нужно создать граф фильтра DVD вручную, это можно сделать, следуя основным правилам построения графов, обсуждаемым в других разделах документации по DirectShow. как правило, не следует вручную добавлять, удалять, подключать или отключать отдельные фильтры в графе, созданном построителем Graph DVD, так как это может привести к путанице с кодом очистки.

Настройка модуля подготовки видео

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

если вы запрашиваете какой-либо из этих интерфейсов перед построением графа фильтра, построитель DVD Graph создает соответствующий модуль подготовки видео. позже, при построении графа, построитель DVD Graph попытается использовать этот модуль подготовки отчетов. Но если не удается построить граф с помощью выбранного модуля подготовки отчетов, он может переключиться на другой модуль подготовки отчетов. например, декодер MPEG-2 может быть несовместим с фильтром VMR. в этом случае Graph построитель DVD будет по умолчанию перекрытием Mixer.

Эти интерфейсы также дают возможность настроить модуль подготовки отчетов перед его подключением к декодеру. Например, можно задать VMR для использования режима без окон, а не оконного режима по умолчанию. Дополнительные сведения о модулях подготовки отчетов см. в разделе о отрисовке видео в DirectShow.

в Windows XP и более поздних версиях построитель DVD Graph всегда использует устройство микширования видео версии 7 (VMR-7), если:

  • вызывающий объект запрашивает интерфейсы, которые обнаружили только Mixer наложения, например IMixerPinConfig2. это посылает указание в построитель DVD Graph, что приложение хочет использовать наложение Mixer, а не VMR. проигрыватель Windows Media также имеет параметр диалогового окна, который позволяет принудительно использовать наложение Mixer.
  • Установленный декодер не совместим с VMR. Во время построения графа используется новый интерфейс иамдекодеркапс для проверки поддержки VMR декодера. если это не так, то построитель DVD Graph будет использовать наложение Mixer.
  • При использовании аппаратного декодера декодер не может подключиться к диспетчеру видеопортов (ВПМ). если аппаратный декодер не может использовать впм, то он не может использовать VMR, поэтому построитель DVD Graph попытается построить граф, используя наложение Mixer.
  • Известно, что видеокарта имеет недостаточные ресурсы и (или) возможности для поддержки VMR, но неправильно сообщает об этом в драйвере. (некоторые известные случаи специально исключены из построителя DVD Graph.)
  • Соединение между декодером и VMR завершается сбоем по любой причине, обычно из-за отсутствия видеопамяти для создания необходимых поверхностей. в таких случаях в построителе DVD Graph используется параметр VMR и пытается использовать наложение Mixer для построения графа.

Режим с окнами

в оконном режиме (наложение Mixer или VMR) модуль подготовки отчетов создает собственное окно видео. Чтобы сделать это окно дочерним по отношению к окну приложения, вызовите ивидеовиндов::p UT _ owner с помощью маркера приложения. Также вызовите ивидеовиндов::p UT _ WindowStyle , чтобы установить _ Стили дочернего приложения и WS _ клипсиблингс в окне видео модуля подготовки. Чтобы получить сообщения от мыши из окна видео модуля подготовки, вызовите ивидеовиндов::p UT _ мессажедраин с помощью маркера окна приложения. Этот метод настраивает "стоку сообщений" — видеоокно пересылает все сообщения мыши, полученные в окне "Сток сообщений".

pVideoWindow->put_Owner((OAHWND)hwnd);
pVideoWindow->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS);
pVideoWindow->put_MessageDrain((OAHWND)hwnd) ;

Сток сообщений позволяет немного усложнить выбор кнопок в меню DVD. Предполагая, что окно видео не заполняет всю клиентскую область приложения, некоторые события мыши будут находиться за пределами окна видео. При получении события мыши из окна видео необходимо обработать его для навигации в меню DVD. События мыши вне окна видео не должны обрабатываться. С стоком сообщений невозможно различить эти два. Более того, координаты событий мыши из окна видео зависят от клиентской области окна видео. но события мыши вне окна видео зависят от клиентской области приложения.

Режим без окон

Безоконный режим позволяет избежать проблем с сообщениями мыши. Очистка сообщений не требуется, так как VMR (или Евр) не создает собственное окно в режиме без окон. Вместо этого он непосредственно рисуется в окне приложения. Если размер прямоугольника назначения меньше, чем клиентская область приложения, Навигатор DVD учитывает это при вычислении положения кнопок DVD. Поэтому при получении сообщения с помощью мыши можно передать координаты непосредственно в Навигатор DVD, как описано в разделе Навигация по меню раздела.

DVD-приложения