Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье содержатся общие сведения для разработчиков драйверов относительно функции кодирования видео Direct3D12. Дополнительные сведения, включая особенности уровня приложения, см. в спецификации кодировки видео D3D.
Сведения о кодировке видео Direct3D 12
До Windows 11 (WDDM 3.0) DirectX 12 предоставил интерфейсы уровня приложений и драйверов (API и DDIs) для поддержки ускорения GPU для нескольких приложений видео, включая декодирование видео, обработку видео и оценку движения.
Начиная с Windows 11 D3D12 добавляет функцию кодирования видео в существующее семейство API видео или DDI. Эта функция предоставляет последовательный набор API-интерфейсов кодирования и DDI, которые соответствуют существующей платформе D3D12 и позволяют разработчикам осуществлять кодирование видео с помощью видео движков с ускорением GPU.
Платформа кодирования видео предоставляет доступ к возможностям аппаратного ускорения кодировщика видео. Его можно использовать в различных сценариях, таких как Интернет вещей (IoT), облако, API мультимедиа, машинное обучение (ML) и потоковая передача игр.
Поддержка кодирования AV1 добавлена в Windows 11 версии 24H2 (WDDM 3.2). Дополнительные сведения см. в статье D3D12 AV1 Video Encoding.
Поддерживаемые кодеки
Начиная с 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 создает фактический объект кодировщика видео, содержащий состояние сеанса кодирования видео.
Создайте объект драйвера, представляющий кучу видеокодировщика:
PFND3D12DDI_CALCPRIVATEVIDEOENCODERHEAPSIZE_0080_2 вычисляет объем памяти, необходимой среде выполнения D3D для объекта драйвера.
PFND3D12DDI_CREATEVIDEOENCODERHEAP_0080_2 создает объект кучи видеокодировщика, содержащий ресурсы драйвера, зависящие от разрешения, и состояние.
Кодирование кадра:
PFND3D12DDI_VIDEO_ENCODE_FRAME_0082_0 записывает операцию кодирования кадра в список команд.
После операции кодирования также необходимо вызвать PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0, чтобы преобразовать выходные метаданные операции кодирования в читаемый формат. Макет разрешенных метаданных драйвера аналогичен примеру, показанном на схеме в спецификации.
Уничтожить кодировщик видео и связанную кучу:
Тестирование
Следующие тесты включены в состав набора для лабораторных испытаний оборудования Windows (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 | Проверяет увеличение объема памяти при увеличении входных аргументов. |
SimpleGOPEncode H264 / HEVC (10 бит) | Транскодирует входное видео с различными разрешениями, шаблонами 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 с низким уровнем.