DirectShow - как отлаживать ошибки подключения пин-кода - PullRequest
3 голосов
/ 28 января 2010

Я использую IGraphBuilder для рендеринга устройства захвата видео на экран. Процесс включает в себя добавление фильтра захвата к графику, затем добавление VideoMixingRenderer к графику (который использует пользовательский распределитель) и, наконец, вызов Graph.Render () для использования Intelligent Connect для подключения выводов. При некоторых обстоятельствах это работает хорошо, и мой пользовательский распределитель загружается правильно (и вызывается InitializeDevice), но в других случаях пользовательский распределитель не используется, и я получаю окно ActiveMovie, отображающее устройство захвата вместо моего VMR, который был добавлен в график , Похоже, что интеллектуальное соединение не хочет подключать фильтр устройства захвата к VMR и вместо этого создает свой собственный рендерер. Существуют ли какие-либо инструменты или методы для устранения этого? Вызов graph.Render () завершается успешно с HR, равным 0, поэтому я не получаю никакой информации от DirectShow о сбое подключения. Надеюсь, что существует диагностический инструмент, который поможет мне лучше понять, что происходит в DirectShow.

1 Ответ

7 голосов
/ 28 января 2010

Логика интеллектуального подключения создаст файл журнала, который вы можете использовать для отслеживания ошибок. Используйте IGraphBuilder :: SetLogFile (или пункт меню graphedt). Это регистрирует всю активность во время построения графика.

Самая распространенная причина сбоя подключения к vmr состоит в том, что восходящий фильтр настаивает на использовании своего собственного распределителя, как и vmr. Возможно, что в некоторых случаях вы получаете преобразование (например, преобразование цветового пространства) между ними, и это копирует буферы и поэтому будет использовать распределитель vmr. Нечто подобное, так или иначе, является возможным объяснением.

G

...