Как я могу напрямую встроить фильтр DirectShow Push Source в EXE? - PullRequest
2 голосов
/ 10 октября 2011

У меня есть программа Delphi 6, которая получает звук от внешней программы через сокет. Теперь я хочу передать этот звук в граф фильтра DirectShow, который я создаю и который направляет этот звук в различные выходные фильтры на ПК. Я использую DSPACK для моей работы с графиком фильтра DirectShow. Я буду использовать один из примеров DSPACK, который показывает, как создать Push Source Filter в качестве отправной точки.

Можно ли встроить фильтр DirectShow непосредственно в мой основной EXE-файл или мне нужно создать внешний файл DLL или AX и запустить на нем regsvr32? Я хотел бы избежать создания внешнего модуля, в противном случае мне придется создать параметр и мост для передачи данных между ним и моей основной программой, и я бы предпочел исключить эту работу. Мне интересно, есть ли способ просто включить исходный фильтр-фильтр в мою основную программу и заставить Windows работать с ним как фильтр DirectShow, если это вообще возможно.

Ответы [ 2 ]

5 голосов
/ 10 октября 2011

Фильтры не нужно помещать в библиотеки (DLL), и они не должны быть даже зарегистрированными COM-объектами, нет.Как уже упоминалось, единственная причина сделать это - сделать фильтр доступным для приложений через CoCreateInstance и / или путем перечисления категорий DirectShow.IFilterGraph::AddFilter вы попадете в график.Преимущество частной фильтрации состоит в том, что вам не нужно реализовывать связь между приложением и фильтром через интерфейс COM, и вы можете использовать собственные / прямые указатели.

См. Также сообщение Geraint Использование фильтров безРегистрация .

3 голосов
/ 10 октября 2011

Я думаю, что единственная причина поместить ваши фильтры в DLL - это возможность использовать их в нескольких программах.С другой стороны, если вы поместите свои фильтры в DLL, вы всегда сможете реализовать в них интерфейс, который вы проверяете, когда вам это нужно.

В моей работе мне приходилось воспроизводить фильмы, которые были сохраненыв проприетарном архивном файле.Я сделал источник с выходным контактом, который правильно описывал формат мультимедиа, а остальные работали автоматически, если я этого хотел.Мне также нужно было использовать собственный рендерер для видео.Все эти вещи были встроены в .exe, который был написан на C ++

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...