Windows: Replace IMFMediaSession/EVR backend with IMFMediaEngine
Replace the legacy Windows media player backend built on
IMFMediaSession, IMFTopology, SourceResolver and EVR Custom Presenter
(D3D9/DXVA2) with a modern implementation based on IMFMediaEngine and
D3D11.
Key advantages of the new implementation:
- Simplified architecture: the entire pipeline (source resolution,
decoding, rendering) is handled by a single IMFMediaEngine instance,
eliminating manual topology construction, EVR activation objects
and the custom presenter (~4200 net lines removed).
- D3D11 instead of D3D9: native compatibility with Qt RHI, enabling
zero-copy texture sharing between the media engine and the rendering
backend via shared D3D11 textures with keyed mutex synchronization,
reusing QtMultimediaPrivate::QWindowsD3D11TextureBridge.
- Multiple RHI backend support, shared with the FFmpeg backend
Requires Windows 10 or later.
[ChangeLog][Platform Specific Changes][Windows] Replaced the Windows
media player backend from IMFMediaSession/EVR/D3D9 to
IMFMediaEngine/D3D11, providing a simpler architecture, native Qt RHI
compatibility with zero-copy texture paths, and improved resource
management.
Change-Id: I7d0eaae014b0e4044175d0edc4fcf93d349e56a5
Reviewed-by: Tim Blechmann <tim.blechmann@qt.io>
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
| commit | b422152f109e80b8f3e5890398ee881ad6a7c1a9 |
| parent | 16f3302388fefbd11af278badbe4a4cad8256fa9 |
| author | Vladimir Belyavsky <belyavskyv@gmail.com> |
| committer | Tim Blechmann <tim.blechmann@qt.io> |
| commit time | Wed, 14 Oct 2026 13:17:19 +0000 |
- M src/plugins/multimedia/windows/CMakeLists.txt
- D src/plugins/multimedia/windows/evr/evrcustompresenter.cpp
- D src/plugins/multimedia/windows/evr/evrcustompresenter_p.h
- D src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp
- D src/plugins/multimedia/windows/evr/evrd3dpresentengine_p.h
- D src/plugins/multimedia/windows/evr/evrhelpers.cpp
- D src/plugins/multimedia/windows/evr/evrhelpers_p.h
- D src/plugins/multimedia/windows/evr/evrvideowindowcontrol.cpp
- D src/plugins/multimedia/windows/evr/evrvideowindowcontrol_p.h
- M src/plugins/multimedia/windows/mfstream.cpp
- M src/plugins/multimedia/windows/mfstream_p.h
- D src/plugins/multimedia/windows/player/mfactivate.cpp
- D src/plugins/multimedia/windows/player/mfactivate_p.h
- D src/plugins/multimedia/windows/player/mfevrvideowindowcontrol.cpp
- D src/plugins/multimedia/windows/player/mfevrvideowindowcontrol_p.h
- D src/plugins/multimedia/windows/player/mfplayercontrol.cpp
- D src/plugins/multimedia/windows/player/mfplayercontrol_p.h
- D src/plugins/multimedia/windows/player/mfplayersession.cpp
- D src/plugins/multimedia/windows/player/mfplayersession_p.h
- D src/plugins/multimedia/windows/player/mfvideorenderercontrol.cpp
- D src/plugins/multimedia/windows/player/mfvideorenderercontrol_p.h
- A src/plugins/multimedia/windows/player/qmediaenginenotify.cpp
- A src/plugins/multimedia/windows/player/qmediaenginenotify_p.h
- A src/plugins/multimedia/windows/player/qmediaengineplayer.cpp
- A src/plugins/multimedia/windows/player/qmediaengineplayer_p.h
- A src/plugins/multimedia/windows/player/qmediaenginetimedtextnotify.cpp
- A src/plugins/multimedia/windows/player/qmediaenginetimedtextnotify_p.h
- A src/plugins/multimedia/windows/player/qmediaenginevideobuffer.cpp
- A src/plugins/multimedia/windows/player/qmediaenginevideobuffer_p.h
- A src/plugins/multimedia/windows/qmediaenginevideosink.cpp
- A src/plugins/multimedia/windows/qmediaenginevideosink_p.h
- M src/plugins/multimedia/windows/qwindowsintegration.cpp
- A src/plugins/multimedia/windows/qwindowsmfdefs_p.h
- M tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp