Как отключить IMFMediaSession / IMFTopologyNode от hwndVideo? - PullRequest
1 голос
/ 07 мая 2020
  • Ссылка Как воспроизводить файлы мультимедиа с помощью Media Foundation .
  • У моего основного потока есть родительское окно. Я создал дочернее окно EVR в рабочем потоке через MFCreateVideoRendererActivate (HWND hwndVideo, IMFActivate ** ppActivate) в качестве видеоплеера. Но теперь проблема в том, что при выходе из родительского окна дочернее окно получит сообщение WM_DESTROY, которое запускает CloseSession, и у игрока есть WaitForSingleObject, ожидающий подтверждения закрытия, может быть несколько секунд зависания .
  • Так что я с нетерпением жду безопасного метода Detach hwndVideo. поэтому после этого рабочий поток не зависит от оконной системы и не влияет на основной поток.
  • Но документы IMFTopologyNode или IMFActivate / IMFMediaSink не сбросили метод интерфейса hwndVideo ,, и я попытался использовать IMFTopology :: RemoveNode для удаления узлов MF_TOPOLOGY_OUTPUT_NODE, и это не дало эффекта

1 Ответ

0 голосов
/ 19 мая 2020

Вероятно, вы могли бы обработать WM_DESTROY в родительском окне и скрыть и отсоединить (SetParent) дочерние элементы, предотвращая их немедленное уничтожение. В любом случае, однако, создание windows из рабочих потоков почти всегда является плохой идеей, приводящей к упомянутым артефактам. Если бы вы могли изменить это поведение, это привело бы к более надежной конструкции.

...