Как мне установить владельца рендерера FilterGraph? - PullRequest
1 голос
/ 15 января 2009

У меня есть 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 (август '06). Я скомпилировал / связал с материалом DirectShow, упакованным вместе с Vista SDK, и ... без косточек.

1 Ответ

1 голос
/ 16 января 2009

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

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

...