Поделиться через


структура 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:

  1. При кодировании 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
  2. При кодировании типа кадра с помощью ссылок (т. е. 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 = { компактный массив (без пустых записей), содержащий индекс подресурса массива текстур из ранее закодированных кадров, которые будут использоваться в качестве ссылок }
  3. При кодировании типа кадра без ссылок, но без очистки 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

См. также раздел

D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_0082_0