Аппаратное ускорение декодирования H264 с использованием DirectX11 в плагине Unity для UWP - PullRequest
0 голосов
/ 20 сентября 2018

Я создал плагин Unity для своего приложения UWP, который преобразует необработанные пакеты h264 в данные RGB и отображает их в виде текстуры.Я использовал FFMPEG для этого, и он отлично работает.

int framefinished = avcodec_send_packet(m_pCodecCtx, &packet);
framefinished = avcodec_receive_frame(m_pCodecCtx, m_pFrame);
// YUV to RGB conversion and render to texture after this

Теперь я пытаюсь перейти на аппаратное декодирование с использованием DirectX11 DXVA2.0.

Используя это: https://docs.microsoft.com/en-us/windows/desktop/medfound/supporting-direct3d-11-video-decoding-in-media-foundation

Мне удалось создать декодер (ID3D11VideoDecoder), но я не знаю, как передать ему необработанные пакеты H264 и получить данные YUV или NV12 в качестве вывода.(Или, если возможно, визуализировать вывод непосредственно в текстуру, поскольку я могу получить указатель ID3D11Texture2D)

, поэтому мой вопрос: как вы отправляете необработанные пакеты h264 в этот декодер и получаете выходные данные из него?

Кроме того, это для работы в реальном времени, поэтому я пытаюсь достичь минимальной задержки.

Заранее спасибо!

1 Ответ

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

Поскольку вы уже сделали это с помощью FFMPEG, я хотел бы предложить вам использовать аппаратное декодирование dx11 от FFMPEG напрямую.

Проверьте пример HF декодирования FFMPEG для подробностей: github.com / FFmpeg / FFmpeg / blob / master / doc / examples / hw_decode.‌ c

...