Как установить владельца средства визуализации FilterGraph?

У меня есть CView, в котором я хотел бы разместить средство визуализации DirectShow.

Я не писал исходный код, я просто подчищаю и переношу код в VS2005. Это потребовало обновления некоторых сторонних инструментов, поэтому я пытаюсь немного изменить код, не имея полного представления о DX/DirectShow.

Проблема в том, что мое приложение зависает, когда я запускаю

hr = gcap.pFg->QueryInterface(IID_IVideoWindow, (void **)&gcap.pVW);
[trimmed some code]
gcap.pVW->put_Owner((OAHWND) m_pDockWnd->GetSafeHwnd());    // We own the window now

m_pDockWnd — это CView. Я могу сделать это в режиме предварительного просмотра, но не в режиме захвата. В режиме захвата приложение зависает.

Если у меня нет окна рендеринга, проблем нет (хотя окно захвата принадлежит рабочему столу, что мне не подходит).

Кроме того, в окне захвата отображается занятый курсор, когда он принадлежит рабочему столу — возможно, тогда он тоже не работает, но, по крайней мере, не зависает приложение. Под зависанием я подразумеваю, что приложение не отвечает на ввод данных пользователем, но фоновые потоки продолжают работать.

Обновление: мы использовали старую версию DirectX (август 2006 г.). Я скомпилировал / связал материал DirectShow, упакованный с Vista SDK, и ... без игры в кости.


person Nick    schedule 15.01.2009    source источник


Ответы (1)


У меня есть разрешение на это.

Видеопоток начинался из потока без перекачки сообщений, из-за чего окно видео переставало отвечать на запросы. (Думаю, XP была более терпима к этому, возможно, новая модель драйвера дисплея в Vista все испортила.) В любом случае, как только я отправил сообщение SendMessage в главное окно приложения и запустил оттуда захват видео, все, кажется, работает!

person Nick    schedule 16.01.2009