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


Изменения динамического формата

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

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

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

  • Если граф остановлен, контакты могут повторно подключиться и перезаключить тип носителя. Дополнительные сведения см. в разделе Повторное подключение контактов.
  • Некоторые фильтры могут повторно подключаться, даже если граф активен (выполняется или приостановлен). Дополнительные сведения об этом механизме см. в динамическом повторном подключении.

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

  • QueryAccept (Downstream) используется, если выходной пин-код предлагает изменение формата на его подчиненный одноранговый узел, но только если новый формат не требует большего буфера.
  • QueryAccept (Upstream) используется, когда входной пин-код предлагает изменение формата на его вышестоящий одноранговый узел. Новый формат может быть одинаковым или может быть больше.
  • ReceiveConnection используется, когда выходной пин-код предлагает изменение формата на подчиненный одноранговый узел, а новый формат требует большего буфера.

обработка изменений формата из отрисовщика видео