Media Foundation: заставить устройство захвата предоставлять поверхности DirectX в топологии
контекст
Я написал MFT, который использует DXVA. Это требует, чтобы входные образцы имели IDirect3DSurface9
поверхность.
Я использую этот MFT в топологии из 3 узлов:
- узел источника, который оборачивает источник мультимедиа, созданный из активатора устройства захвата,
- узел преобразования, который содержит экземпляр моего MFT,
- выходной узел, который содержит EVR.
Я установил MF_TOPOLOGY_DXVA_MODE
приписывать MFTOPOLOGY_DXVA_FULL
а также MF_TOPOLOGY_HARDWARE_MODE
в MFTOPOLOGY_HWMODE_USE_HARDWARE
в топологии, и когда я начинаю сеанс мультимедиа, я получаю D3DDeviceManager изнутри моего MFT.
Эта проблема
Когда входные сэмплы поступают на MFT изнутри топологии, к ним не прикрепляется поверхность D3D (MFGetService
с MR_BUFFER_SERVICE
терпит неудачу).
Если я вообще не использую топологию и создаю Source Reader из того же источника мультимедиа с действительным MF_SOURCE_READER_D3D_MANAGER
, тогда образцы, предоставленные Source Reader, имеют поверхность D3D.
Вопрос
Можно ли заставить исходный узел / источник медиа захвата в топологии создавать образцы с поверхностями D3D?