Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция кодирования видео Direct3D12 расширена для поддержки кодирования AV1, начиная с Windows 11 версии 24H2 (WDDM 3.2). В этой статье описываются точки расширения, где существующий DDI видеокодирования D3D12 нуждается в изменениях и новых структурах для поддержки кодирования AV1. Дополнительные сведения, включая особенности уровня приложения, см. в спецификации кодирования видео AV1 D3D12.
Расширения для управления скоростью
Следующие существующие перечисления обновляются с помощью расширений для контроля пропускной способности и поддержки контроля пропускной способности.
Флаги поддержки управления скоростью добавлены в D3D12DDI_VIDEO_ENCODER_SUPPORT_FLAGS_0083_0
Флаги управления скоростью добавляются в D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAGS_0080
Добавлены следующие расширенные структуры (расширение 1) D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_XXX1, и D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS обновляется, чтобы включить их. QualityVsSpeed добавляется ко всем режимам, а VBVCapacity и InitialVVVFullness добавляются в _QVBR1 кроме того.
Когда D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAG_0096_ENABLE_EXTENSION1_SUPPORT включен, в D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS_0080_2.pConfiguration_XXX используются структуры расширенного управления скоростью; в противном случае используются устаревшие структуры, как указано в таблице, описанной на странице справки D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAGS_0080.
Расширения поддержки кодирования видео
Существующая платформа, связанная с видео, расширена, чтобы разрешить драйверам сообщать о поддержке и возможностях кодирования видео AV1. В этом разделе перечислены добавленные или обновленные структуры и перечисления, используемые для запроса и отправки отчетов о поддержке кодирования видео AV1.
D3D12DDI_FEATURE_VERSION_VIDEO_0095_0 — это номер версии, определяющий минимальную реализацию всех вех видеокодированных видео D3D12, представленных в Windows 11 версии 24H2 (WDDM 3.2)
Перечисление D3D12DDICAPS_TYPE_VIDEO_0020 было расширено, чтобы включить следующие значения поддержки кодирования видео:
- D3D12DDICAPS_TYPE_VIDEO_0095_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG
- D3D12DDICAPS_TYPE_VIDEO_0096_ENCODER_SUPPORT1
D3D12DDI_VIDEO_ENCODER_CODEC_0095_AV1 добавляется в D3D12DDI_VIDEO_ENCODER_CODEC_0080
Перечисление D3D12DDI_VIDEO_ENCODER_AV1_PROFILE_0095 было добавлено для определения профилей AV1, поддерживаемых драйвером. Драйвер использует D3D12DDICAPS_VIDEO_ENCODER_INPUT_FORMAT_DATA_0080_2, чтобы сообщить о опционально поддерживаемых форматах для заданного D3D12DDI_VIDEO_ENCODER_AV1_PROFILE_0095 входа для запроса.
D3D12DDI_VIDEO_ENCODER_PROFILE_DESC_0080_2 обновляется, чтобы включить профиль AV1 (pAV1Profile).
Для поддержки кодирования AV1 добавляются или расширены следующие структуры и перечисления:
D3D12DDI_VIDEO_ENCODER_AV1_LEVEL_TIER_CONSTRAINTS_0095 (pAV1LevelSetting добавляется в D3D12DDI_VIDEO_ENCODER_LEVEL_SETTING_0080_2)
D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_0080 расширено для включения D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_0095_UNIFORM_GRID_PARTITION и D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_0095_CONFIGURABLE_GRID_PARTITION.
D3D12DDI_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_EIGHTH_PIXEL_0095 добавляется в D3D12DDI_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_0080
D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095 и D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095_FLAGS
D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095 и D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095_FLAGS
D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_0095 и D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_0095_FLAGS
D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_0095 и D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_0095_FLAGS
D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT с pAV1Support добавлен в D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_0083_0
D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095 и D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_FLAGS
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_PICTURE_CONTROL_SUPPORT_0095, с добавлением pAV1Support в D3D12DDI_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_0080_2
D3D12DDI_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT_0095 и D3D12DDI_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_0095_FLAGS
D3D12DDI_FEATURE_DATA_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG_0095 и D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT_0095
pAV1Config добавляется в D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_0082_0
Флаг D3D12DDI_VIDEO_ENCODER_VALIDATION_FLAG_0080_SUBREGION_LAYOUT_MODE_NOT_SUPPORTED добавляется в D3D12DDI_VIDEO_ENCODER_VALIDATION_FLAGS_0080 для использования с расширенной возможностью запроса D3D12DDICAPS_TYPE_VIDEO_0096_ENCODER_SUPPORT1.
D3D12DDICAPS_VIDEO_ENCODER_SUPPORT1_DATA_0096 добавляется для расширения предыдущего запроса D3D12DDICAPS_VIDEO_ENCODER_SUPPORT_DATA_0083_0 с параметрами, добавленными в нижней части структуры. Этот расширенный запрос можно использовать со всеми кодеками H264, HEVC и AV1, и он должен точно соответствовать семантике D3D12_FEATURE_VIDEO_ENCODER_SUPPORT.
Семантика для элементов MaxSubregionsNumber, SubregionBlockPixelsSize и QPMapRegionPixelsSizeD3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2 обновляются для AV1.
_D3D12DDI_VIDEO_ENCODER_AV1_SEQUENCE_STRUCTURE_0095 добавлен, а pAV1SequenceStructure включен в D3D12DDI_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_0082_0.
Операция кодирования
Ожидаемые значения заголовка битового потока для AV1
Обязанности по кодированию заголовков драйвера и хоста
Учитывая закодированный кадр с плитками K, драйвер записывает элементы синтаксиса K decode_tile() AV1 в сжатый битовый поток, соответствующий запрошенным плиткам в аргументах EncodeFrame .
Затем клиент API создает элементы синтаксиса AV1 tile_group_obu() с элементами tile_start_and_end_present_flag/tg_start/tg_end, чтобы упорядочить плитки в группы плиток по желанию с условием, что плитки помещаются последовательно. Элемент tile_size_minus_1 кодируется из связанных сведений D3D12_VIDEO_ENCODER_FRAME_SUBREGION_METADATA, а элемент decode_tile() копируется из сжатого буфера битового потока. Наконец, каждый tile_group_obu() окружён элементами open_bitstream_unit типа OBU_TILE_GROUP и к нему добавляется в начале OBU_FRAME_HEADER. Для одной группы плиток вместо этого можно использовать тип OBU_FRAME.
Клиент API отвечает за вывод obu_extension_flag как !(TemporalLayerIndexPlus1 || SpatialLayerIndexPlus1)
для текущего кадра, а также за кодирование при необходимости temporal_id и spatial_id в open_bitstream_unit().
Отправки EncodeFrame находятся в порядке кодирования, как и другие кодеки, реализованные в API кодирования D3D12.
Изменения в разрешении и пространственной масштабируемости
Если драйвер сообщает D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RESOLUTION_RECONFIGURATION_AVAILABLE, он все еще применяется только к изменениям разрешения в ключевом кадре.
Заголовок активной последовательности должен иметь синтаксис max_frame_*_minus_1, установленный на максимальное разрешение, присутствующее в используемом ID3D12VideoEncoderHeap. Различные кадры с разрешениями, которые также имеют место в связанном идентификаторе ID3D12VideoEncoderHeap, могут использовать флаг синтаксиса AV1 frame_size_override_flag в frame_size() для передачи изменения разрешения.
Если D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_SWITCH_FRAME поддерживается:
- Ссылочные кадры должны указывать на более высокое или равное разрешение, чем закодированный текущий кадр коммутатора.
- Различные разрешения должны присутствовать в соответствующем используемом объекте ID3D12VideoEncoderHeap.
Аналогичным образом, если поддерживается пространственная масштабируемость, все различные разрешения эталонных кадров должны присутствовать в используемой куче ID3D12VideoEncoderHeap.
Заметки по управлению скоростью
Допустимый диапазон для D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_QVBR1_0096.ConstantQualityTarget равен [0..63]. Наименьшее значение дает наивысшее качество.
Как правило, D3D12DDI_VIDEO_ENCODER_SUPPORT_FLAG_0083_0_RATE_CONTROL_RECONFIGURATION_AVAILABLE применяется к настройке качества относительно скорости и следующим параметрам управления скоростью различных режимов управления скоростью: QP в постоянном QP, скорости и уровнях качества в CBR, VBR и QVBR. Драйвер может возвращать D3D12DDI_VIDEO_ENCODER_ENCODE_ERROR_FLAG_0082_0_RECONFIGURATION_REQUEST_NOT_SUPPORTED в D3D12DDI_VIDEO_ENCODER_OUTPUT_METADATA_0083_0.EncodeErrorFlags для других неподдерживаемых запросов переконфигурации параметров управления скоростью.
API операций кодирования
Следующие структуры и перечисления добавляются или обновляются с расширениями для поддержки операции кодирования AV1:
D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO_0095
D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG_0095
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG_0095
PAV1PicData добавляется в D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_0082_0
D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES_0095
pTilesPartition_AV1 добавлен в D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_0080_2
Кроме того, существующий обратный вызов PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0 драйвера необходимо обновить, чтобы обрабатывать специфический для AV1 разрешенный макет буфера, добавленный для кодирования AV1.