структура D3D12DDI_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC_0082_0 (d3d12umddi.h)

Структура D3D12DDI_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC_0082_0 содержит параметры уровня последовательности для входных данных операции кодирования видео.

Синтаксис

typedef struct D3D12DDI_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC_0082_0 {
  D3D12DDI_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS_0082_0                 Flags;
  D3D12DDI_VIDEO_ENCODER_INTRA_REFRESH_0080                            IntraRefreshConfig;
  D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_0080_2                           RateControl;
  D3D12DDI_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC_0080                  PictureTargetResolution;
  D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_0080              SelectedLayoutMode;
  D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_0080_2 FrameSubregionsLayoutData;
  D3D12DDI_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_0082_0                 CodecGopSequence;
} D3D12DDI_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC_0082_0;

Члены

Flags

Значение D3D12DDI_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS_0082_0 , указывающее флаги дескриптора элемента управления последовательностью для текущей операции кодирования кадра.

IntraRefreshConfig

Структура D3D12DDI_VIDEO_ENCODER_INTRA_REFRESH_0080 , указывающая параметры режима внутри обновления, который следует использовать при запуске сеансов внутри обновления. Дополнительные сведения об использовании внутри свежих см. в примечаниях.

RateControl

Структура D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_0080_2 , задающая конфигурацию управления скоростью.

Проверьте флаг D3D12_VIDEO_ENCODER_SUPPORT_FLAG_0083_0_RATE_CONTROL_RECONFIGURATION_AVAILABLE , чтобы определить, поддерживается ли динамическая перенастройка управления скоростью:

  • Если это поддерживается, измененный RateControl приводит к перезапуску алгоритма управления скоростью, при этом новая конфигурация начинается с выполнения связанной команды EncodeFrame .
  • Если параметр RateControl не поддерживается, он должен быть задан в начале сеанса кодирования и не должен изменяться во время сеанса.

PictureTargetResolution

Структура D3D12DDI_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC_0080 , описывающая разрешение, используемое при кодировании этого кадра. Целевое разрешение должно быть задано на основе списка разрешений, указанных при создании связанной кучи кодировщика для этой операции.

Проверьте флаг D3D12_VIDEO_ENCODER_SUPPORT_FLAG_0083_0_RESOLUTION_RECONFIGURATION_AVAILABLE , чтобы определить, поддерживается ли динамическая перенастройка для разрешения:

  • Если она поддерживается, PictureTargetResolution указывает разрешение, используемое для связанной команды EncodeFrame . В некоторых кодеках изменение разрешения в середине сеанса кодирования может потребовать сброса GOP с возможным принудительным запросом кадра IDR/Key, а также сброса буфера декодированного буфера изображений (DPB) и алгоритмов управления кадрами.
  • Если оно не поддерживается, PictureTargetResolution указывает целевое разрешение для всего сеанса кодирования и не должно изменяться во время сеанса.

SelectedLayoutMode

Значение D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_0080 , указывающее, какой режим макета используется и, следовательно, какие члены объединения следует использовать в FrameSubregionsLayoutData.

Проверьте флаг D3D12_VIDEO_ENCODER_SUPPORT_FLAG_0083_0_SUBREGION_LAYOUT_RECONFIGURATION_AVAILABLE , чтобы определить, поддерживается ли динамическая перенастройка в регионе:

  • Если он поддерживается, SelectedLayoutMode указывает режим секционирования подобласти, используемый для связанной команды EncodeFrame .
  • Если параметр *SelectedLayoutMode не поддерживается, указывает целевой режим подобласти полного сеанса кодирования и не должен изменяться во время сеанса кодирования.

FrameSubregionsLayoutData

Структура D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_0080_2 , которая содержит дополнительные данные, относящиеся к кодеку, макет структуры рисунков. Если SelectedLayoutMode указывает, что подобласти отсутствуют, этот элемент должен иметь значение NULL.

CodecGopSequence

Структура D3D12DDI_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_0082_0 , указывающая текущую GOP, используемую в последовательности видео, в порядке отображения. Вызовы EncodeFrame должны следовать этому GOP, но в последовательном порядке после изменения порядка B-кадров.

Проверьте флаг D3D12_VIDEO_ENCODER_SUPPORT_FLAG__0083_0_SEQUENCE_GOP_RECONFIGURATION_AVAILABLE , чтобы определить, поддерживается ли динамическая перенастройка GOP:

  • Если он поддерживается, CodecGopSequence указывает новый режим подобласти GOP, используемый начиная с связанной команды EncodeFrame .
  • Если он не поддерживается, CodecGopSequence указывает целевой шаблон GOP (в порядке отображения) полного сеанса кодирования и не должен изменяться во время сеанса кодирования.

Комментарии

Общие сведения см. в разделе Кодировка видео D3D12 .

Использование внутреннего обновления

Использование двунаправленных опорных кадров (B-кадров) является взаимоисключающим с внутриобновлением. Вызывающий объект должен проверка, что структура CodecGopSequence не содержит кадров B, если активны режимы внутриобновления. При запросе D3D12DDICAPS_VIDEO_ENCODER_SUPPORT_DATA в режиме внутриобновления, отличном от D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_NONE, набор CodecGopSequence не должен содержать кадры B, иначе запрос не возвращает поддержку.

Использование бесконечного внутриобновления возможно путем периодического запроса новой волны внутриобновления после завершения каждого из них.

При запуске внутриобновления N кадров длительности узел выполняет следующие действия:

  • Задает соответствующий флаг элемента управления изображением для запуска внутривысхранного обновления;
  • Управляет индексом кадра между [0..N) в структуре элемента управления изображением, чтобы указать драйверу ход выполнения сеанса внутри сеанса обновления.

Ожидаемое поведение при явном запросе волны внутриобновления с длительностью N кадров:

  • Если запрос на внутриобновление происходит в начале GOP, то внутриобновление выполняется для N кадров, а затем запускается новая GOP с I-кадром.

  • Если запрос на внутриобновление происходит в середине GOP, группа изображений будет завершена до последней отправленной команды EncodeFrame и перезапущена после сеанса внутриобновления с новой GOP, начинающейся с I-кадра. Например, если GOP имеет значение IPPPP... IPPPP..., если при частичной отправке GOP "IPP" запрашивается запуск внутри обновления, последние два P-кадра этой GOP будут игнорироваться, сеанс внутри обновления будет выдан для N следующих кадров, а затем ожидается новый ключевой кадр, который перезапускает структуру GOP.

Для внутреннего обновления на основе строк:

  • Настроенную структуру GOP необходимо перенастроить на Infinite IPPP... P... GOP (GOPLength = 0u и PPicturePeriod = 1u) в течение сеанса внутри обновления. Затем его можно перенастроить после завершения волны внутриобновленного обновления.

  • Настроенный режим секционирования подобласти будет перенастроен в соответствии с N однородным секционированием срезов на кадр в течение N команд EncodeFrame . Это особенно важно, когда секционирование подобласти настроено в режиме, несовместимом с требованиями внутри обновления, например, если строка внутри закодированных единиц в срезе нарушает ограничение, установленное в байтах на срез. Ожидается, что результирующий фрейм содержит N срезов, все Срезы P, за исключением текущего среза строки внутри обновления, который должен быть Срезом I.

Требования

Требование Значение
Минимальная версия клиента Windows 11 (WDDM 3.0)
Верхняя часть d3d12umddi.h

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

D3D12DDI_VIDEO_ENCODER_ENCODEFRAME_INPUT_STREAM_ARGUMENTS_0082_0

D3D12DDI_VIDEO_ENCODER_SUPPORT_FLAGS_0083_0

PFND3D12DDI_VIDEO_ENCODE_FRAME_0082_0

PFND3D12DDI_CREATEVIDEOENCODERHEAP_0080_2