Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Свой фильтр и свой интерфейс DirectShow, Два вопроса. 
V
    Опции темы
AndreySol
Дата 28.6.2006, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: нет
Всего: 1



Вопрос первый: если я состряпал свой фильтр DirectShow, мне его в системе надо зарегистрировать. В примере "WavDest"-фильтр из DXSDK для фильтра задан GUID
Код

// {3C78B8E2-6C4D-11d1-ADE2-0000F8754B99}
static const GUID CLSID_WavDest =
{ 0x3c78b8e2, 0x6c4d, 0x11d1, { 0xad, 0xe2, 0x0, 0x0, 0xf8, 0x75, 0x4b, 0x99 } };

Мне я так понимаю надо сделать так-же - а как (или где) мне получить этот уникальный ID ?
Вопрос второй: если мне надо как-то управлять этим своим фильтром, как мне создать и пришить к нему свой интерфейс (ну например типа IFileSinkFilter, который имеет всего 2 своих метода) ? Знаю что все интерфейсы имеют родителем IUnknown, а дальше ... Соображаю, примерно, что интерфейс то-же надо зарегистрировать - толи глобально в системе, толи как-то динамически при подключении фильтра в граф ? А может я и не прав.
Помогите. 
PM MAIL   Вверх
AndreySol
Дата 23.7.2006, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: нет
Всего: 1



В общем я с этим немного поразобрался, однако одна проблема всеже осталась: не могу заставить работать созданный мною интерфейс.
Может кто знает ресурсы, где можно почитать на русском языке о работе с DirectShow ? 
PM MAIL   Вверх
Helene
Дата 24.7.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.2.2006
Где: Киев

Репутация: нет
Всего: нет



Для создания GUID удобно использовать утилитную программку GUIDGen (от Microsoft).

Для регистрации фильтра используется приложение regsvr32. Для работы с ним ты должен прописать в своей динамической библиотеке некоторые функции. Вот, почитай тут. Там просто и по-русски расписано что и как нужно сделать. 
PM ICQ   Вверх
AndreySol
Дата 25.7.2006, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: нет
Всего: 1



Спасибо, почитаю, вроде неплохая статья.
 
PM MAIL   Вверх
AndreySol
Дата 27.7.2006, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: нет
Всего: 1



Наконец-то разобрался я с интерфейсом и фильтром.
Делать надо было так:
 - объявить интерфейс
Код

#ifndef __IMYINTERFACE__
#define __IMYINTERFACE__
#ifdef __cplusplus
extern "C" {
#endif

    // Interface IIDs
    // {B8135A36-71CA-465c-AB45-9E0346E90344}
    static const GUID IID_IMyInterface = 
        { 0xb8135a36, 0x71ca, 0x465c, { 0xab, 0x45, 0x9e, 0x3, 0x46, 0xe9, 0x3, 0x44 } };

    DECLARE_INTERFACE_(IMyInterface, IUnknown)
    {
        STDMETHOD(SetParam) (THIS_ BOOL bSet) PURE;
    };

#ifdef __cplusplus
}
#endif
#endif // __IMYINTERFACE__

 - добавить его в ролители класса фильтра
Код

class CMyFilter : public CTransformFilter,
          public IMyInterface

 - для того чтобы фильтр мог вернуть интерфейс, объявить
Код

STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void ** ppv);

и реализация
Код

STDMETHODIMP CMyFilter::NonDelegatingQueryInterface(REFIID riid, void **ppv)
{
    CheckPointer(ppv,E_POINTER);
    
    if(riid == IID_IMyInterface)
        return GetInterface((IMyInterface *) this, ppv);
    else
        return CTransformFilter::NonDelegatingQueryInterface(riid, ppv);
}

 - ну и сам метод интерфейса, объявить
Код

STDMETHODIMP SetParam(BOOL bSet);

и реализация
Код

STDMETHODIMP CMyFilter::SetParam(BOOL bSet)
{
.....
}
 
PM MAIL   Вверх
atavinta
Дата 31.1.2008, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 31.1.2008
Где: Москва

Репутация: нет
Всего: нет



Id получи или в GUIDGen, или сразу в мелкосовте, а на счет интерфеса не знаю.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0713 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.