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

Структура D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION_0082_0 описывает изменения в эталонных рисунках как операции с памятью в виде кортежа идентификатора операции и связанных параметров, необходимых для операции.

Синтаксис

typedef struct D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION_0082_0 {
  UCHAR memory_management_control_operation;
  UINT  difference_of_pic_nums_minus1;
  UINT  long_term_pic_num;
  UINT  long_term_frame_idx;
  UINT  max_long_term_frame_idx_plus1;
} D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION_0082_0;

Члены

memory_management_control_operation

Операция управления, применяемая для влияния на состояние маркировки эталонного рисунка. Ниже приведены допустимые значения операций.

Значение Описание
0 Завершение цикла элементов memory_management_control_operation синтаксиса.
1 Пометьте краткосрочную эталонную картинку как "неиспользуемую для справки".
2 Пометьте долгосрочное эталонное изображение как "неиспользуемое для справки".
3 Пометьте краткосрочную эталонную картинку как "используемую для долгосрочной ссылки" и назначьте ему долгосрочный индекс кадров.
4 Укажите максимальный индекс долгосрочных кадров и пометьте все долгосрочные эталонные изображения с индексами долгосрочных кадров, превышающими максимальное значение, как "неиспользуемые для справки".
5 Пометьте все эталонные рисунки как "неиспользуемые для справки" и задайте для переменной MaxLongTermFrameIdx значение "no long-term frame индексов".
6 Пометьте текущий рисунок как "используемый для долгосрочной ссылки" и назначьте ему индекс долгосрочного кадра.

difference_of_pic_nums_minus1

Этот элемент используется с memory_management_control_operation , равным 3 или 1, чтобы назначить индекс долгосрочного кадра краткосрочному эталону или пометить краткосрочную эталонную картинку как "неиспользуемую для справки". При обработке связанного memory_management_control_operation процессом декодирования результирующий номер рисунка, производный от difference_of_pic_nums_minus1 , должен быть номером рисунка, присвоенным одному из эталонных рисунков, помеченным как "использованные для справки", и не назначенным ранее долгосрочному индексу кадров.

long_term_pic_num

Этот элемент используется с memory_management_control_operation , равным 2, чтобы пометить долгосрочное эталонное изображение как "неиспользуемое для справки". При обработке связанного memory_management_control_operation процессом декодирования long_term_pic_num должен быть равен долгосрочному номеру рисунка, присвоенного одному из эталонных рисунков, который в настоящее время помечен как "используемый для долгосрочной ссылки".

long_term_frame_idx

Этот элемент используется с memory_management_control_operation равным 3 или 6 для назначения долгосрочного индекса кадра рисунку. При обработке связанного memory_management_control_operation процессом декодирования значение long_term_frame_idx должно находиться в диапазоне от 0 до MaxLongTermFrameIdx включительно.

max_long_term_frame_idx_plus1

Значение минус 1 указывает максимальное значение индекса долгосрочного кадра, допустимое для долгосрочных ссылочных изображений (до получения другого значения max_long_term_frame_idx_plus1). Значение max_long_term_frame_idx_plus1 должно находиться в диапазоне от 0 до max_num_ref_frames включительно.

Комментарии

Переменная MaxLongTermFrameIdx является следующей:

  • Если max_long_term_frame_idx_plus1 равно 0, параметр MaxLongTermFrameIdx имеет значение "no long-term frame индексов".
  • Если max_long_term_frame_idx_plus1 больше 0, maxLongTermFrameIdx имеет значение max_long_term_frame_idx_plus1 − 1.

Операция пометки текущего кадра как кратковременной ссылки задается флагом, присутствующим в структуре D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS_0080 , с соответствующими значениями PictureOrderCountNumber и FrameDecodingOrderNumber , указанными в связанной структуре управления рисунком.

Переменная max_num_ref_frames обозначается максимальной емкостью буфера декодированных изображений (DPB).

Обратите внимание, что для маркировки кадра мгновенного обновления декодера (IDR) как долгосрочной ссылки предлагаемый явный механизм заключается в том, чтобы сначала пометить его как краткосрочную ссылку, задав D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_0080_USED_AS_REFERENCE_PICTURE при вызове EncodeFrame для кадра IDR, а затем преобразуя его в долгосрочный опорный кадр с помощью операции управления памятью "3", чтобы пометить краткосрочное эталонное изображение как "используемое для долгосрочной ссылки" и назначить долгосрочный индекс кадров к нему.

Кроме того, при кодировании кадра IDR и установке adaptive_ref_pic_marking_mode_flag = 1 драйвер предполагает, что клиент пытается задать заголовок среза H264 long_term_reference_flag и сделает это в выходном битовом потоке для вызова EncodeFrame .

Дополнительные сведения о процессе маркировки рисунков см. в спецификации H.264, раздел 8.2.5.4 "Процесс маркировки эталонного рисунка с декодированием адаптивного элемента управления памятью".

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

Требования

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

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

D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_0082_0

PFND3D12DDI_VIDEO_ENCODE_FRAME_0082_0