2016-03-29 8 views
2

Я работаю над проектом, который захватывает экран и кодирует его. Я уже могу захватить экран с помощью API дублирования рабочего стола (Win8 +). Используя API, я могу получить ID3D11Texture2D текстуры и перенести их с GPU на CPU, а затем использовать libx264 для их кодирования.Аппаратное обеспечение H264 кодировка ID3D11Texture2D с Media Foundation

Однако, вытягивание текстур с GPU на CPU может быть горлом бутылки, который потенциально может уменьшить fps. Также libx264 обрабатывает циклы процессора (в зависимости от качества) для кодирования кадров. Я ищу кодировку ID3D11Texture2D текстур в самом графическом процессоре вместо того, чтобы использовать CPU для кодирования в качестве оптимизации.

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

ответ

2

Видеокодеры, аппаратное и программное обеспечение могут быть доступны в разных формфакторах. Сама Windows предлагает расширяемые API-интерфейсы с выбором кодировщиков, а затем дополнительные кодеры могут быть доступны в виде библиотек и SDK. Вы уже используете одну из таких библиотек (x264). Аппаратные кодеры обычно зависят от поставщика и зависят от доступного оборудования, которое непосредственно связано с процессом кодирования. Если вас интересует решение для конкретного оборудования, может возникнуть смысл проверить соответствующий SDK.

В противном случае типичный общий интерфейс для аппаратного резервного кодирования видео в Windows - Media Foundation Transform (MFT). Microsoft предоставляет программное обеспечение для программного обеспечения только для H.264, что вряд ли даст преимущество перед x264, за исключением того факта, что он имеет интерфейс MFT с другими вариантами. Однако драйверы видеотехники часто устанавливают дополнительные MFT для имеющегося оборудования, которые добавляют больше MFT, поддерживаемых аппаратной реализацией. Примерами таких являются:

  • Intel® Quick Sync Video H.264 энкодер MFT
  • NVIDIA H.264 энкодер MFT
  • AMDh264Encoder

Предлагаемые различными поставщиками, они имеют схожую функциональность и использование этих MFT для кодирования H.264 - это хороший способ использовать аппаратное кодирование видео с широким спектром аппаратного обеспечения.

Смотрите также:

0

Вы должны проверить, если обмен текстуры между энкодером GPU и DirectX возможно.

Я знаю, что можно обмениваться текстурой между Nvidia Decoder и DirectX, потому что я сделал это успешно. Nvidia имеет несколько возможностей взаимодействия, поэтому сначала посмотрите, можете ли вы поделиться текстурой, чтобы делать все на GPU.

С Nvidia вы можете сделать это: Nvidia Decoding-> DirectX Display в GPU.

Проверьте DirectX Экран-> Nvidia Enconding можно (зная, NVIDIA предлагает Interop)

Для Intel и ATI, я не знаю, если они обеспечивают Interop с DirectX.

Главное, чтобы знать, можете ли вы объединить текстуру DirectX с текстурой кодировщика графического процессора.

 Смежные вопросы

  • Нет связанных вопросов^_^