Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > DMO-фильтр DirectShow


Автор: AndreySol 14.8.2006, 23:26
Такая хрень:
создаю DMO-фильтр
Код

CoCreateInstance(CLSID_DMOWrapperFilter, NULL, CLSCTX_INPROC, IID_IBaseFilter, (void **)&pDMOFilter1);

подключаю интерфейс IDMOWrapperFilter
Код

pDMOFilter1->QueryInterface(IID_IDMOWrapperFilter, (void **)&pWrap);

и устанавливаю через его единственный метод нужный мне єффект - эквалайзер
Код

pWrap->Init((REFCLSID)pCLSID, DMOCATEGORY_AUDIO_EFFECT);

Эквалайзер нормально работает, но с одной оговоркой - он принимает РСМ с частотой 44 кГц.
Нашел в DXSDK интерфейс IMediaObject, написано вроде как специально для работы с DMO-объектами. У него есть метод SetInputType, который может протестировать и установить тип сигнала.
Ну естественно решил попробовать и получилось следующее: если пробую подключить интерфейс после инициализации фильтра нужным ээфектом, то на вызове метода SetInputType - получаю ошибку "Действие не может быть выполнено, т.к. фильтр уже используется". Если же пробую подключить интерфейс до инициализации то ошибка уже на подключении интерфейса - "Интерфейс не поддерживается".
Как с этим бороться ?
А если бороться бесполезно, то может кто знает как заставить фильтр принять любые другие форматы РСМ.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)