Кодировка видео D3D12
В этой статье содержатся общие сведения для разработчиков драйверов относительно функции кодирования видео Direct3D12. Дополнительные сведения, включая особенности уровня приложения, см. в спецификации кодировки видео D3D.
Сведения о кодировке видео Direct3D 12
До Windows 11 (WDDM 3.0) DirectX 12 предоставил интерфейсы уровня приложений и драйверов (API и DDIs) для поддержки ускорения GPU для нескольких приложений видео, включая декодирование видео, обработку видео и оценку движения.
Начиная с Windows 11 D3D12 добавляет функцию кодирования видео в существующее семейство API видео или DDI. Эта функция предоставляет последовательный набор интерфейсов API-интерфейсов кодирования и DDIs, которые соответствуют существующей платформе D3D12 и позволяют разработчикам выполнять кодировку видео с помощью обработчиков видео с ускорением GPU.
Платформа видеокодировщика предоставляет доступ к возможностям аппаратного ускорения видеокода для различных сценариев, таких как Интернет вещей (IoT), облачные интерфейсы, API мультимедиа, машинное обучение и потоковая передача игр.
Поддержка кодирования AV1 добавлена в Windows 11 версии 24H2 (WDDM 3.2). Дополнительные сведения см. в кодировке видео D3D12 AV1.
Поддерживаемые кодеки
Начиная с Windows 11 поддерживаемые кодеки — H.264 и HEVC, хотя платформа кодирования видео D3D12 обеспечивает открытую расширяемость для новых кодеков, таких как AV1.
Специфические для кодека аспекты интерфейса платформы делегированы структурам, зависящим от кодека, и их доступ к типам объединения. Например, структура D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_0082_0 содержит объединение с указателями на определенные кодеки D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_0082_0 и D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_0082_0 структуры, содержащие сведения о конфигурации кодека.
Чтобы сохранить совместимость двоичного интерфейса с расширяемостью, типы объединения всегда содержат указатели на структуры, относящиеся к кодеку. Типы объединения имеют постоянный размер на основе размера указателя архитектуры узла. Это решение также запрещает структурам, содержащим члены (или содержащие анонимные) типы объединения, изменять их размеры при расширении интерфейса. Некоторые из профсоюзов содержат только указатели на типы перечислений; Для согласованности эти типы перечисления также ссылаются в качестве указателей в случае нового кодека требует более сложного типа, чем перечисление для представления этих понятий.
Поддержка и возможности кодирования видео отчетов
Существующая платформа, связанная с видео, была расширена, чтобы позволить водителям сообщать о поддержке и возможностях кодирования видео.
D3D12DDI_FEATURE_VERSION_VIDEO_0083_0 — это номер версии, определяющий первую полную реализацию всех вех кодированных видео D3D12, представленных в Windows 11.
Перечисление D3D12DDICAPS_TYPE_VIDEO_0020 было расширено, чтобы включить следующие значения поддержки кодирования видео:
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_CODEC = 31,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_PROFILE_LEVEL = 32,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_OUTPUT_RESOLUTION_RATIOS_COUNT = 33,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_OUTPUT_RESOLUTION = 34,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_INPUT_FORMAT = 35,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_RATE_CONTROL_MODE = 36,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_INTRA_REFRESH_MODE = 37,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_FRAME_SUBREGION_LAYOUT_MODE = 38,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_HEAP_SIZE = 39,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_CODEC_CONFIGURATION_SUPPORT = 40,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_SUPPORT = 41,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT = 42,
- D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_RESOURCE_REQUIREMENTS = 43
Среда выполнения D3D вызывает обратный вызов драйвера PFND3D12DDI_VIDEO_GETCAPS для запроса поддержки кодирования видео.
Драйвер, поддерживающий кодировку видео, предоставляет среду выполнения D3D с указателями на функции обратного вызова видеокодирования в структуре D3D12DDI_DEVICE_FUNCS_VIDEO_0082_0.
Функции обратного вызова видеокодирования D3D12
Драйвер реализует следующие функции обратного вызова для поддержки кодирования видео D3D12.
Создайте объект драйвера, представляющий кодировщик видео:
Создайте объект драйвера, представляющий кучу видеокодировщика:
Кодирование кадра:
PFND3D12DDI_VIDEO_ENCODE_FRAME_0082_0 записывает операцию закодированного кадра в список команд.
После операции кодирования необходимо также вызвать PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0 для разрешения выходных метаданных операции кодирования в доступный для чтения формат. Макет разрешенных метаданных драйвера аналогичен примеру, показанном на схеме в спецификации.
Уничтожить кодировщик видео и связанную кучу:
Тестирование
Следующие тесты включены в состав комплекта лабораторий оборудования Windows (WHLK). Дополнительные сведения см. в WHLK.
Название проверки | Description |
---|---|
CreateVideoEncoder | Проверяет создание VideoEncoder/VideoEncoderHeap на основе сообщаемых случаев CheckFeatureSupport. |
SingleEncodeH264/HEVC | Тесты на основе QR-кода для базовых проверка структурного изображения. Последовательность входных изображений помечена предопределенным QR-содержимым, а затем закодирована и декодирована, а затем проверка, чтобы гарантировать, что выходные значения (и в некоторой степени, качество), являются ожидаемыми. |
EncodeProfileLevelSuggestionsH264/HEVC | Проверяет, что D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT. Предлагаемые значенияProfile/Level должным образом основаны на спецификациях H.264/HEVC и конфигурациях, передаваемых в качестве входных данных в D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT. |
EncodeHeapSizeCap | Проверяет увеличение объема памяти с различными входными аргументами. |
SimpleGOPEncodeH264/HEVC(10bit) | Транскодирует входное видео с помощью различных разрешений, шаблонов GOP, режимов среза и других конфигураций кодека и проверяет выходное видео с разницей входного видеопотока. Это сравнение выполняется с помощью пикового сигнала к коэффициенту шума (PSNR). |
EncodeSubregions/ResolutionReconfiguration | Проверяет перенастройки во время полета. |
EncodeH264LongTermReferences | Проверяет использование долгосрочных ссылок на рисунки. |
EncodeIntraRefresh | Проверяет простой сценарий внутри обновления с помощью открытого IPP... P... P... GOP. |
VideoEncodeCommandListFeatures | Проверяет предикаты и маркеры для списков команд кодирования видео. |
VideoEncodeTimestamps | Проверяет метки времени для списков команд кодирования видео. |
Сценарии кодирования видео
OneCore
Поддержка кодирования видео D3D12 обеспечивает переносимое аппаратно-ускоренное видеокодирование на платформах, где доступно только D3D12. Сюда входят различные номера SKU OneCore, используемые облачными вычислительными ресурсами и платформами Интернета вещей. Ускорение кодирования видео доступно в этих сценариях без необходимости использования решений для конкретной платформы.
API мультимедиа
Возможности кодирования видео на низком уровне и переносимом доступны для всех поставщиков оборудования. Это позволяет более высокому уровню API мультимедиа (например, Media Foundation) создавать свои уровни мультимедиа на основе этого API, который заботится о абстрагации различных аппаратных платформ. Учитывая низкоуровневую структуру API, эти уровни мультимедиа более высокого уровня могут оптимизироваться для своих сценариев, имея точный контроль над синхронизацией и распределением памяти или местом размещения сеанса видеокодирования, например полный контроль над управлением эталонными изображениями и заголовками bitstream, которые записывают обязанности. Эта смена обязанностей на уровень, сидящий над этим API, также позволяет поставщикам оборудования иметь согласованный набор политик кодирования (например. Эвристики DPB, такие как адаптивный GOP) на уровне мультимедиа, который можно повторно использовать на разных аппаратных платформах.
Взаимодействие с графикой D3D, вычислениями и машинным обучением
API кодирования видео D3D12 позволяет эффективно взаимодействовать между видеокодированием D3D12 и графикой D3D12, вычислениями и сценариями машинного обучения, которые интересны для таких сценариев, как выполнение вывода машинного обучения по потоку камеры.
Сценарии потоковой передачи игр
API кодирования видео D3D12 позволяет сценариям потоковой передачи игр, требующим высокопроизводительного API низкого уровня.