directx - 在 DirectX 表面缓冲区上执行转置操作
问题描述
我正在使用启用了硬件加速的 IMFSourceReader 来解码视频并将它们读入我的应用程序。在调用 ReadSample 之后,我从 IMFSample 中获得了 IDirect3DSurface9。此时,我使用 LockRect() 调用来访问原始字节并将它们复制到我的应用程序缓冲区中。
我想在 GPU 上执行其他操作,例如转置以及可能将图像数据从行优先顺序转换为列优先顺序。
我可以为此设置 Blt 操作吗?
我遇到了 ID3DXBaseEffect 界面,但我不确定这是否适用于我的情况。
将不胜感激任何投入。
迪内什
解决方案
使用 IDirect3DSurface9,您可以使用着色器 (ID3DXBaseEffect)。
要直接在 GPU 上执行此操作,在将原始字节复制到您的应用程序之前,我将尝试以下操作:
- 调用 IMFSourceReader::GetServiceForStream 查询 MR_VIDEO_ACCELERATION_SERVICE 和 IDirect3DDeviceManager9。
- 使用 IDirect3DDeviceManager9 查询 IDirect3DDevice9 (IDirect3DDeviceManager9::LockDevice)。
- 使用 IDirect3DDevice9、IDirect3DSurface9、新的 RenderTarget、着色器,与 Directx 一样。
- 从最终的 RenderTarget 复制原始字节(在着色器应用之后)。
编辑
见这里:mofo7777 github
在 MediaFoundationTransform > MFTDirectxAware > MFTVideoShaderEffect 下,我将展示这个概念。
推荐阅读
- php - 在 Laravel Eloquent 中更新 JSON 嵌套值
- javascript - 地图内的函数被调用的次数超过了 React JS 的调用次数
- r - 如何为调查包中的 svyttest 函数使用 for 循环?
- android - ConstraintWidth_percent 在设计选项卡和实践中看起来不同
- twilio - 尝试在 GoHighLevel 中获取入站文本响应
- laravel - Laravel Valet 将不正确的证书与安全链接相关联
- pdf - 在 Pdf 中编辑 FDF 字段的名称
- python - 符合函数重载的 Python 对象?
- json - 外部访问该类时,Collection 为空
- python - 进度条显示不正确