Я ищу масштабирование видео на основе аппаратного ускорения (GPU). Я нашел подробное обсуждение в следующих темах
Как использовать аппаратные видео скейлеры? а также
Аппаратное ускорение масштабирования изображения в Windows с использованием C ++
Я стараюсь придерживаться MFT на основе масштабирования, потому что я также использую H.264 Encoder MFT в моем приложении.
У нас есть два варианта решения на основе MFT-
1. Video Resizer DSP
2. Видеопроцессор MFT
Но оба эти метода используются MF_SA_D3D_AWARE. Как упомянуто ниже:
Видео MFT имеет атрибут MF_SA_D3D_AWARE.aspx, который можно использовать для запроса о том, поддерживает ли он аппаратное ускорение DirectX 3D, и это можно включить, отправив ему сообщение MFT_MESSAGE_SET_D3D_MANAGER.
и MF_SA_D3D_AWARE поддерживается в Windows 8 и далее.
Есть ли их MFT для масштабирования, который использует аппаратное ускорение в Windows 7?
Я не исследовал другие два варианта (MFCreateVideoRenderer и IDirectXVideoProcessor :: VideoProcessBlt), упомянутые в Как использовать аппаратные видео скейлеры? что он будет поддерживать в Windows 7 или нет. Но я активно ищу вариант MFT по приоритету.
Под Windows 7 я рекомендую вам использовать IDXVAHD_VideoProcessor
У вас есть образец здесь: Образец DXVA-HD
Но я думаю, что если вы используете простой DirectXDevice9 с DirectXTexture9, результат масштабирования будет таким же. Нет причин, по которым выделенный процесс масштабирования применяется только к процессу видеофайлов. Я думаю, что они одинаковы для обоих (игра и видео файл).
Единственное, что я видел, это то, что вы можете настроить режим сжатия: DXVAHD_BLT_STATE_CONSTRICTION_DATA , который применяется для уменьшения масштаба, а не для увеличения масштаба.
Других решений пока нет …