Кодирование видео 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 мультимедиа, машинное обучение и потоковая передача игр.

Поддерживаемые кодеки

Начиная с 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_CALCPRIVATEVIDEOENCODERSIZE_0082_0 вычисляет объем памяти, который среда выполнения D3D должна выделить для объекта драйвера.

    • PFND3D12DDI_CREATEVIDEOENCODER_0082_0 создает фактический объект кодировщика видео, который содержит состояние сеанса кодирования видео.

  • Создайте объект драйвера, представляющий кучу кодировщика видео:

  • Кодирование кадра:

  • Уничтожьте кодировщик видео и связанную кучу:

Тестирование

Следующие тесты входят в состав комплекта Windows Hardware Lab Kit (WHLK). Дополнительные сведения см. в разделе WHLK.

Название проверки Описание
CreateVideoEncoder Проверяет создание VideoEncoder/VideoEncoderHeap на основе зарегистрированных случаев, связанных с CheckFeatureSupport.
SingleEncodeH264/HEVC Тесты на основе QR-кода для базовых проверок структурного изображения. Последовательность входных изображений помечена предопределенным содержимым QR, затем кодируется и декодируется, а затем проверяется, чтобы убедиться, что выходные значения (и в некоторой степени качество) соответствуют ожидаемым значениям.
EncodeProfileLevelSuggestionsH264/HEVC Проверяет, что D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT. Значения SuggestedProfile/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, эти уровни мультимедиа более высокого уровня могут оптимизировать для своих сценариев путем точного контроля за синхронизацией, выделением памяти и местом расположения сеанса кодирования видео, такими как полный контроль над управлением эталонными изображениями и ответственностью за написание заголовков битовых потоков. Такое перемещение обязанностей на уровень выше этого API также позволяет поставщикам оборудования иметь согласованный набор политик кодирования (например, Эвристика DPB, например адаптивная GOP) на уровне мультимедиа, которую можно повторно использовать на разных аппаратных платформах.

Взаимодействие с графикой, вычислениями и машинным обучением D3D

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

Сценарии потоковой передачи игр

API кодирования видео D3D12 позволяет реализовать сценарии потоковой передачи игр, для которых требуется высокопроизводительный НИЗКОуровневый API.