структура D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 (d3d12umddi.h)
Структура D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 — это комплексная структура конфигурации, содержащая все необходимые параметры для управления кодировкой изображения (фрейма) AV1.
Синтаксис
typedef struct D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 {
D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAGS Flags;
D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095 FrameType;
D3D12DDI_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_0095 CompoundPredictionType;
D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095 InterpolationFilter;
D3D12DDI_VIDEO_ENCODER_AV1_RESTORATION_CONFIG_0095 FrameRestorationConfig;
D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095 TxMode;
UINT SuperResDenominator;
UINT OrderHint;
UINT PictureIndex;
UINT TemporalLayerIndexPlus1;
UINT SpatialLayerIndexPlus1;
D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095 ReferenceFramesReconPictureDescriptors[8];
UINT ReferenceIndices[7];
UINT PrimaryRefFrame;
UINT RefreshFrameFlags;
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG_0095 LoopFilter;
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG_0095 LoopFilterDelta;
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG_0095 Quantization;
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG_0095 QuantizationDelta;
D3D12DDI_VIDEO_ENCODER_AV1_CDEF_CONFIG_0095 CDEF;
UINT QPMapValuesCount;
INT16 *pRateControlQPMap;
D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG_0095 CustomSegmentation;
D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MAP_0095 CustomSegmentsMap;
} D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095;
Члены
Flags
Перечисление D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAGS , указывающее флаги для закодированного кадра.
FrameType
Перечисление D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095 , указывающее кодируемый тип кадра.
CompoundPredictionType
Перечисление D3D12DDI_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_0095 , указывающее используемый тип составного прогнозирования. Связанные с синтаксисом AV1 reference_select.
InterpolationFilter
Перечисление D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095 , указывающее фильтр интерполяции, используемый для прогнозирования взаимодействия в текущем кадре. Связанные с синтаксисом interpolation_filter.
FrameRestorationConfig
Структура D3D12DDI_VIDEO_ENCODER_AV1_RESTORATION_CONFIG_0095 , указывающая используемую конфигурацию восстановления кадра.
TxMode
Перечисление D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095 , указывающее используемый режим преобразования.
SuperResDenominator
Указывает конфигурацию для супер-разрешения. Значение должно быть больше или равно D3D12_VIDEO_ENCODER_AV1_SUPERRES_DENOM_MIN (как определено стандартом кодека AV1), если включено супер разрешение.
OrderHint
Синтаксис текущего кадра order_hint AV1. OrderHint всегда должен передаваться, даже если указание порядка не задано в битовом потоке AV1, и оно должно отражать порядок отображения кадра.
PictureIndex
Уникальный индекс изображения для этого кадра, который будет использоваться для его уникальной идентификации в качестве ссылки на будущие кадры. Этот параметр никак не связан со стандартным синтаксисом AV1, а просто используется для отслеживания реализации клиента API D3D.
Клиент API должен инициализировать это значение с 0 для первого D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME и увеличивать его на единицу для каждого последующего кадра до следующего D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME, когда оно должно быть сброшено до нуля и следовать тому же процессу.
OrderHint нельзя использовать для этой цели, так как он имеет максимальный [0..2^(OrderHintBitsMinus1+1)]
диапазон , который может обтекать и не работать в качестве уникального идентификатора кадров и их ссылок.
TemporalLayerIndexPlus1
Индекс темпорального слоя рисунка плюс один. Нулевое значение указывает на то, что временная масштабируемость не используется. Это значение должно находиться в диапазоне [0..D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095. MaxTemporalLayers].
SpatialLayerIndexPlus1
Индекс пространственного слоя рисунка плюс один. Нулевое значение указывает, что пространственная масштабируемость не используется. Это значение должно находиться в диапазоне [0..D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095.MaxSpatialLayers].
ReferenceFramesReconPictureDescriptors[8]
Массив D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095 структур, описывающих текущий моментальный снимок состояния полного (т. е. включая кадры, которые не используются текущим кадром, но используются будущими кадрами и т. д.) буфера DPB, хранящиеся в D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_DESC_0082_0. ReferenceFrames. Индексы ссылок (т. е. last, altref и т. д.) сопоставляют с прошлыми и будущими ссылками в этот массив дескрипторов. Кодек AV1 допускает до 8 ссылок в DPB.
Этот массив дескрипторов, в свою очередь, сопоставляет эталонный рисунок для этого кадра с индексом ресурсов в восстановленном массиве изображений D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_DESC_0082_0.ReferenceFrames.
Размер этого массива всегда соответствует D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames.NumTextures для связанной команды EncodeFrame .
ReferenceIndices[7]
Соответствует синтаксису ref_frame_idx[i] AV1. Для ссылочного типа i ReferenceIndices[i] указывает индекс между [0..7] в ReferenceFramesReconPictureDescriptors , где текущий опорный тип кадра i хранится в DPB. Другими словами , ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]] содержит дескриптор DPB для ссылочного типа i.
I-ая запись ReferenceIndices[] соответствует каждому ссылочного типа, как показано ниже.
Индекс i | Тип справочной ссылки | ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]] |
---|---|---|
0 | Последний | Дескриптор DPB для последнего |
1 | Последнее2 | Дескриптор DPB для Last2 |
2 | Последняя3 | Дескриптор DPB для Last3 |
3 | Золотой | Дескриптор DPB для Golden |
4 | Bwdref | Дескриптор DPB для Bwdref |
5 | Altref | Дескриптор DPB для Altref |
6 | Altref2 | Дескриптор DPB для Altref2 |
PrimaryRefFrame
Соответствует синтаксису элемента AV1 primary_ref_frame в uncompressed_header(). Указывает, какая опорная рамка содержит значения CDF и другое состояние, которое должно быть загружено в начале кадра. Допустимый диапазон — [0..7], а значения соответствуют следующим образом:
Значение PrimaryRefFrame | Значение синтаксиса AV1 (primary_ref_frame) | Выбрана опорная рамка |
---|---|---|
0 | 0 | Последний |
1 | 1 | Последнее2 |
2 | 2 | Последняя3 |
3 | 3 | Золотой |
4 | 4 | Bwdref |
5 | 5 | Altref |
6 | 6 | Altref2 |
7 | 7 (PRIMARY_REF_NONE) | None |
RefreshFrameFlags
Соответствует элементу синтаксиса refresh_frame_flags AV1.
LoopFilter
Структура D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG_0095 , указывающая используемые параметры фильтра цикла.
LoopFilterDelta
Структура D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG_0095 , указывающая используемые параметры разностного фильтра цикла.
Quantization
Структура D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG_0095 , указывающая используемые параметры квантования.
QuantizationDelta
Структура D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG_0095 , указывающая используемые параметры разностной квантации.
CDEF
Структура D3D12DDI_VIDEO_ENCODER_AV1_CDEF_CONFIG_0095 , указывающая используемые параметры фильтрации ограниченного расширения направления (CDEF).
QPMapValuesCount
Содержит количество элементов, присутствующих в pRateControlQPMap. Это значение должно соответствовать количеству блоков кодирования в кадре, округляя разрешение кадра до ближайших выровненных значений.
pRateControlQPMap
Массив, содержащий в порядке сканирования строк или столбцов значения сопоставления QP для использования в каждой квадратной области для этого кадра. Измерения карты QP можно вычислить с помощью текущего разрешения и D3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2. QPMapRegionPixelsSize, передавая размеры квадратной области. Диапазон для разностных значений QP — [-255; 255].
CustomSegmentation
Структура D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG_0095 , указывающая используемые пользовательские параметры сегментации. Используется только при установке D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM для текущего кадра.
CustomSegmentsMap
Используется только при установке D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM для текущего кадра. Структура D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MAP_0095 , указывающая настраиваемую карту сегментации, используемую при настройке CustomSegmentation.UpdateMap . В противном случае схема сегментов наследуется от опорной рамки.
Комментарии
Ожидания управления DPB
Ниже приведен контракт, который должен соответствовать клиенту API и драйверу при использовании этого API:
При кодировании D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME:
- Значение PrimaryRefFrame должно иметь значение 7 (PRIMARY_REF_NONE)
- RefreshFrameFlags должен быть 0xFF (в соответствии со стандартным синтаксисом битового потока кодека AV1)
- Для всех записей массива в ReferenceFramesReconPictureDescriptorsпараметру ReconstructedPictureResourceIndex необходимо задать значение D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
- Значения в ReferenceIndices[7] нечетки, так как любое значение [0..7] будет указывать на неиспользуемый слот DPB в ReferenceFramesReconPictureDescriptors , как указано выше.
- D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0082_0 будет заполнен следующим образом:
- NumTexture2Ds = 0
- ppTexture2Ds = NULL
- pSubresources = NULL
При кодировании типа кадра с помощью ссылок (т. е. SWITCH/INTER):
PrimaryRefFrame указывает, какой опорный кадр содержит значения CDF и другое состояние, которое должно быть загружено в начале кадра.
RefreshFrameFlags необходимо задать соответствующим образом, чтобы указать, в каких слотах DPB ReferenceFramesReconPictureDescriptors будет размещаться текущий закодированный рисунок после выполнения кодирования. Это значение должно точно соответствовать коду клиента API для refresh_frame_flags синтаксического элемента AV1 в связанном заголовке рисунка для текущего кадра.
Записи массива в ReferenceFramesReconPictureDescriptors для текущего кадра будут точно соответствовать значениям RefreshFrameFlags , указанным для предыдущего кадра.
Например, если RefreshFrameFlags указывает, что текущий кадр N будет помещен в слоты 2, 3 и 6, а затем в следующем вызове EncodeFrame для кадра N+1 параметр ReconstructedPictureResourceIndex в параметрах ReferenceFramesReconPictureDescriptors[1], ReferenceFramesReconPictureDescriptors[2], ReferenceFramesReconPictureDescriptors[5] должен указывать на кадр N восстановленного рисунка в D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_ 0080.
Обратите внимание на то, что для D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME также следует учитывать RefreshFrameFlags=0xFF, помечая все записи ReferenceFramesReconPictureDescriptors, указывающие на восстановленный рисунок с ключевым кадром.
Если рисунок (не ключевой кадр) не помечается с помощью D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_0080_USED_AS_REFERENCE_PICTURE, для указания на это должно быть значение RefreshFrameFlags должно быть равно нулю.
Значения в ReferenceIndices[7] находятся в пределах [0..7] и указывают на слоты DPB в ReferenceFramesReconPictureDescriptors.
Значения ReferenceIndices[7] должны точно совпадать с кодами клиента API в заголовке рисунка для ref_frame_idx.
Согласно определению синтаксиса AV1 ref_frame_idx не требуется, чтобы входные значения массива были уникальными.
If ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]. ReconstructedPictureResourceIndex == D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
- Это означает, что эталонный рисунок i-й не будет использоваться для текущего кадра и должен быть проигнорирован.
В противном случае ( допустимые ссылочные кадрыReconPictureDescriptors[ReferenceIndices[i]]]). ReconstructedPictureResourceIndex)
- Это означает, что i-й ссылки будет указывать на слот DPB ReferenceIndices[i], а реконструированный рисунок, который будет использоваться , D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080. ppTexture2Ds[ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]].РеконструированнаяPictureResourceIndex]
D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 будет заполнено следующим образом:
- NumTexture2Ds = {количество уникальных значений ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX для j в {0..7} }
- ppTexture2Ds = { компактный массив (без пустых записей), содержащий восстановленный рисунок из ранее закодированных кадров, которые будут использоваться в качестве ссылок }
- [Только в режиме массива текстур] pSubresources = { компактный массив (без пустых записей), содержащий индекс подресурса массива текстур из ранее закодированных кадров, которые будут использоваться в качестве ссылок }
При кодировании типа кадра без ссылок, но без очистки DPB (т. е. INTRA_ONLY)
Значение PrimaryRefFrame должно иметь значение 7 (PRIMARY_REF_NONE)
RefreshFrameFlags необходимо задать соответствующим образом, чтобы указать, в каких слотах DPB ReferenceFramesReconPictureDescriptors будет размещаться текущий закодированный рисунок после выполнения кодирования. Это значение должно точно соответствовать коду клиента API для refresh_frame_flags синтаксического элемента AV1 в связанном заголовке рисунка для текущего кадра.
Записи массива в ReferenceFramesReconPictureDescriptors для текущего кадра будут точно соответствовать значениям RefreshFrameFlags, указанным для предыдущего кадра.
Значения в ReferenceIndices[7] игнорируются, так как фрейм внутри не использует никаких ссылок.
D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 содержит моментальный снимок DPB и будет заполнен следующим образом:
- NumTexture2Ds = {количество уникальных значений ReferenceFramesReconPictureDescriptors.РеконструированнаяPictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX для j в {0..7} }
- ppTexture2Ds = { компактный массив (без записей NULL), содержащий восстановленный рисунок из ранее закодированных кадров, на которые ссылается ReferenceFramesReconPictureDescriptors.РеконструированнаяPictureResourceIndex[j] для j в {0..7} }
- [Только в режиме массива текстур] pSubresources = { компактный массив (без записей NULL), содержащий индекс подресурса массива текстур из ранее закодированных кадров, на которые ссылается ReferenceFramesReconPictureDescriptors.РеконструированнаяPictureResourceIndex[j] для j в {0..7} }
Дополнительные сведения см. в разделе Кодирование видео D3D12 AV1 .
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 11 версии 24H2 (WDDM 3.2) |
Верхняя часть | d3d12umddi.h |