在DirectX表面缓冲区上执行转置操作

在DirectX表面缓冲区上执行转置操作,directx,video-processing,direct3d,ms-media-foundation,Directx,Video Processing,Direct3d,Ms Media Foundation,我正在使用IMFSourceReader,它启用了硬件加速功能,可以解码视频并将其读入我的应用程序。在ReadSample调用之后,我从IMFSample获得IDirect3DSurface9。此时,我使用LockRect()调用来访问原始字节,并将它们复制到应用程序缓冲区中 我想在GPU上执行其他操作,如转置和可能的图像数据从行主顺序到列主顺序的转换。 是否有Blt操作可供我设置 我遇到了ID3DXBaseEffect接口,但我不确定它是否适用于我的情况 如有任何意见,我们将不胜感激 Dine

我正在使用IMFSourceReader,它启用了硬件加速功能,可以解码视频并将其读入我的应用程序。在ReadSample调用之后,我从IMFSample获得IDirect3DSurface9。此时,我使用LockRect()调用来访问原始字节,并将它们复制到应用程序缓冲区中

我想在GPU上执行其他操作,如转置和可能的图像数据从行主顺序到列主顺序的转换。

是否有Blt操作可供我设置

我遇到了ID3DXBaseEffect接口,但我不确定它是否适用于我的情况

如有任何意见,我们将不胜感激


Dinesh

使用IDirect3DSurface9,可以使用着色器(ID3DXBaseEffect)

要直接在GPU上执行此操作,在将原始字节复制到应用程序之前,我将尝试以下方法:

  • 调用IMFSourceReader::GetServiceForStream查询MR_视频_加速_服务和IDirect3DDeviceManager 9
  • 使用IDirect3DDeviceManager 9查询IDirect3DDevice9(IDirect3DDeviceManager 9::LockDevice)
  • 与Directx一样,使用IDirect3DDevice9、IDirect3DSurface9、新的渲染目标着色器
  • 从最终渲染目标复制原始字节(在应用着色器之后)
编辑

请看这里:

在MediaFoundationTransform>MFTDirectxAware>MFTVideoShaderEffect下,我将展示这个概念