DirectShow-фильтр и окно видеоплеера
От: justicar  
Дата: 25.07.04 21:28
Оценка:
Господа, буду очень признателен, если кто-нибудь поможет решить следующую проблему. Так получилось, что написаному мной DirectShow-фильтру необходимо знать, в какое окно в конце концов попадает идущий через мой фильтр видеопоток (в идеале было бы хорошо получить hwnd окна). Порылся в DirectX-хелпе, но ничего полезного на эту тему не нашел. Кто-нибудь знает, что тут можно сделать?

Заранее благодарен.
Макс.
God is real unless He declared integer...
Re: DirectShow-фильтр и окно видеоплеера
От: romson  
Дата: 25.07.04 22:44
Оценка:
Здравствуйте, justicar, Вы писали:

J>Господа, буду очень признателен, если кто-нибудь поможет решить следующую проблему. Так получилось, что написаному мной DirectShow-фильтру необходимо знать, в какое окно в конце концов попадает идущий через мой фильтр видеопоток (в идеале было бы хорошо получить hwnd окна). Порылся в DirectX-хелпе, но ничего полезного на эту тему не нашел. Кто-нибудь знает, что тут можно сделать?


J>Заранее благодарен.

J>Макс.

Сам не пробовал, но предположительно это делается так:

IVideoWindow *pVidWin = NULL;
m_pGraph->QueryInterface(IID_IVideoWindow, (void**)&pVidWin);
HWND hWndOwner = NULL;
pVidWin->get_Owner((OAHWND)&hWndOwner);
HWND hWndVideo = FindWindowEx(hWndOwner, NULL, "VideoRenderer", NULL);
Re[2]: DirectShow-фильтр и окно видеоплеера
От: Аноним  
Дата: 29.07.04 06:26
Оценка:
Здравствуйте, romson, Вы писали:

R>Здравствуйте, justicar, Вы писали:


J>>Господа, буду очень признателен, если кто-нибудь поможет решить следующую проблему. Так получилось, что написаному мной DirectShow-фильтру необходимо знать, в какое окно в конце концов попадает идущий через мой фильтр видеопоток (в идеале было бы хорошо получить hwnd окна). Порылся в DirectX-хелпе, но ничего полезного на эту тему не нашел. Кто-нибудь знает, что тут можно сделать?


J>>Заранее благодарен.

J>>Макс.

R>Сам не пробовал, но предположительно это делается так:


R>
R>IVideoWindow *pVidWin = NULL;
R>m_pGraph->QueryInterface(IID_IVideoWindow, (void**)&pVidWin);
R>HWND hWndOwner = NULL;
R>pVidWin->get_Owner((OAHWND)&hWndOwner);
R>HWND hWndVideo = FindWindowEx(hWndOwner, NULL, "VideoRenderer", NULL);
R>


Ну да... но так некрасиво. Тем более что окно будет называться ActiveMovie. Нет, раз уж фильтру потребовался hwnd, у меня серьезные подозрения, что вместо этого фильтра должен быть plug-in presenter. Если это очень прикладной фильтр (т.е. не требуется, чтобы graphedt автоматически все в нем настраивал), и если он применяется конкретной программой, тогда нужно:
1. Инициализировать VMR в windowless mode (когда окно видеовывода принадлежит и управляется клиентским приложением)
2. Фильтр должен имлементировать какой нибудь свой интерфейс (что-нибудь вроде IMyFilterConfig с методом SetWindowHandle)

а вот лезть напрямую к handle окна, особенно если это спрятанное окно VMR -- не нужно, последствия непредсказуемы.

Что делает Ваш фильтр?

Dennis Evseev
SDE @ WMDG Windows Media
Microsoft corp.
Note: this message is a private opinion of a sender and not the one of Microsoft corp. This message tranfers no rights and bears no responsibility. Бла бла.
Re[3]: DirectShow-фильтр и окно видеоплеера
От: romson  
Дата: 29.07.04 11:27
Оценка:
Здравствуйте, Аноним, Вы писали:

А> окно будет называться ActiveMovie


1. Окно будет называться "ActiveMovie Window", а в FindWindowEx поиск производится по имени класа окна — "VideoRenderer".
2. Автору темы требовалось только найти это окно, а про манипуляции им ничего не говорилось.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.