Выполнение операции транспонирования в поверхностном буфере DirectX - PullRequest
0 голосов
/ 25 сентября 2018

Я использую IMFSourceReader с включенным аппаратным ускорением для декодирования видео и считывания их в свое приложение.После вызова ReadSample я получаю IDirect3DSurface9 из IMFSample.На этом этапе я использую вызов LockRect () для доступа к необработанным байтам и копирую их в буфер моих приложений.

Я хотел бы выполнить дополнительные операции над графическим процессором, такие как транспонирование и возможныйпреобразование данных изображения из основного порядка строки в основной порядок столбца.

Есть ли операция Blt, которую я могу настроить на это?

Я столкнулся с интерфейсом ID3DXBaseEffect, но яЯ не уверен, что это применимо в моем случае.

Буду признателен за любые входные данные.

Динеш

1 Ответ

0 голосов
/ 26 сентября 2018

С IDirect3DSurface9 вы можете использовать шейдер (ID3DXBaseEffect).

Чтобы сделать это непосредственно на GPU, перед тем, как скопировать необработанные байты в ваше приложение, я попробую это:

  • Вызовите IMFSourceReader :: GetServiceForStream, чтобы запросить MR_VIDEO_ACCELERATION_SERVICE и IDirect3DDeviceManager9.
  • , используйте IDirect3DDeviceManager9, чтобы запросить IDirect3DDevice9 (IDirect3DDeviceManager9, IDDD3DDD IDE: * IDD3DD3DD3DD3DD3DD3DD3DD3DDD3DDD3DDD3DD3DD3DD3DDD3DD3DDDD3DD3DD3D!) IDD: IDDD3DD3DD3D! IDDD3S!обычно с Directx.
  • копирует необработанные байты из конечной цели RenderTarget (после применения шейдера).

EDIT

Смотрите здесь: mofo7777 github

В MediaFoundationTransform> MFTDirectxAware> MFTVideoShaderEffect, я покажу концепцию.

...