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


структура DXVA_MBctrl_P_OffHostIDCT_1 (dxva.h)

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

Синтаксис

typedef struct _DXVA_MBctrl_P_OffHostIDCT_1 {
  WORD         wMBaddress;
  WORD         wMBtype;
  DWORD        dwMB_SNL;
  WORD         wPatternCode;
  BYTE         bNumCoef[DXVA_NumBlocksPerMB_420];
  DXVA_MVvalue MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off];
} DXVA_MBctrl_P_OffHostIDCT_1;

Члены

wMBaddress

Указывает адрес текущего макроблока в порядке сканирования растра. Примеры адресов макроблоков см. в разделе Адреса макроблоков.

wMBtype

Указывает тип обрабатываемого макроблока. Следующие биты определяют обработку макроблока.

Биты Описание
от 15 до 12 MvertFieldSel_3 (бит 15 — самый значительный бит) до MvertFieldSel_0 (бит 12)
Задает выбор вертикального поля для соответствующих векторов движения, отправленных позже в команде управления макроблоком. Для движения на основе кадров со структурой изображения рамки (например, для H.261 и H.263) эти биты должны быть равны нулю. Эти биты используются так же, как и для соответствующих битов в разделе 6.3.17.2 в MPEG-2.
11 Зарезервированный бит
Должен равняться нулю.
10 HostResidDiff
Указывает, отправляются ли декодированные блоки остатка пространственного домена или коэффициенты преобразования для idCT вне узла для текущего макроблока.
Этот флаг должен быть равен нулю, если параметр bConfigResidDiffHost равен нулю. Этот флаг должен иметь значение 1, если параметр bConfigResidDiffAccelerator равен нулю. Этот флаг всегда равен нулю в DXVA_MBctrl_P_OffHostIDCT_1.
9 и 8 MotionType
Указывает тип движения на рисунке. Например, для движения на основе кадра со структурой изображения рамки (как в H.261) бит 9 должен иметь значение 1, а бит 8 — ноль.
Использование этих битов напрямую соответствует использованию frame_motion_type или field_motion_type битов в MPEG-2, если эти биты присутствуют в MPEG-2. Использование этих битов подробно описано в следующем разделе примечаний.
7 и 6 MBscanMethod
Указывает используемый метод сканирования.
Значение должно быть равно bPicScanMethod, если значение bPicScanFixed равно 1.
Если значение bConfigHostInverseScan равно нулю, MBscanMethod должно иметь одно из следующих значений:
  • Бит 6 равен нулю, а бит 7 — нуль для зигзагообразного сканирования (MPEG-2 рис. 7-2).
  • Бит 6 равен 1, а бит 7 равен нулю для альтернативной вертикальной проверки.
  • Бит 6 равен нулю, а бит 7 — 1 для альтернативного горизонтального сканирования.
Если значение bConfigHostInverseScan равно 1, MBscanMethod должно быть равно следующему значению:
  • Бит 6 равен 1, а бит 7 — 1 для произвольного сканирования с адресом абсолютного коэффициента.
BPicScanMethod и bPicScanFixed являются членами DXVA_PictureParameters . bConfigHostInverseScan является членом DXVA_ConfigPictureDecode.
5 FieldResidual
Указывает, используют ли остаточные разности блоки структуру IDCT поля, как указано в MPEG-2.
Этот флаг должен иметь значение 1, если элемент bPicStructure DXVA_PictureParameters равен 1 или 2.
При использовании для MPEG-2 параметр FieldResidual должен иметь значение ноль, если флаг frame_pred_frame_DCT в синтаксисе MPEG-2 равен 1, и должен быть равен элементу dct_type синтаксиса MPEG-2, если dct_type присутствует для макроблока.
4 H261LoopFilter
Указывает, активен ли фильтр цикла H.261 (раздел 3.2.3 из H.261) для текущего прогнозирования макроблока. Фильтр цикла H.261 — это отдельный фильтр Â1/4, Â1/2, Â1/4, применяемый как по горизонтали, так и по вертикали ко всем шести блокам в макроблоке H.261, за исключением краев блока, где один из касаний будет выходить за пределы блока. В таких случаях фильтр изменяется на коэффициенты 0, 1, 0. Полная арифметическая точность сохраняется с округлением до 8-разрядных целых чисел в выходных данных процесса двухмерного фильтра (округляется полу целое число или более высокие значения).
3 Motion4MV
Указывает, что движение вперед использует отдельный вектор движения для каждого из четырех блоков яркости в макроблоке, как используется в приложениях H.263 F и J.Motion4MV должно быть равно нулю, если MotionForward равно нулю или если элемент bPic4MVallowed DXVA_PictureParameters равен нулю.
2 MotionBackward
Используется как указано для соответствующего macroblock_motion_backwardparameter в MPEG-2. Если элемент bPicBackwardPrediction DXVA_PictureParameters равен нулю, то MotionBackward должен быть равен нулю. Использование этого бита подробно описано в следующем разделе Примечаний.
1 MotionForward
Используется как указано для соответствующего macroblock_motion_forward в MPEG-2. Использование этого бита подробно описано в следующем разделе Примечаний.
0 IntraMacroblock
Указывает, что макроблок закодирован как внутри и для текущего макроблока не используются векторы движения. Соответствует macroblock_intrain MPEG-2. Использование этого бита подробно описано в следующем разделе Примечаний.

dwMB_SNL

Указывает количество пропущенных макроблоков, которые должны быть созданы после текущего макроблока, и указывает расположение данных остаточной разницы для блоков текущего макроблока. Этот элемент содержит две переменные: MBskipsFollowing в наиболее значимых 8 битах и MBdataLocation в наименее значимых 24 битах. MBskipsFollowing указывает количество пропущенных макроблоков, которые должны быть созданы после текущего макроблока. MBdataLocation — это индекс в буфере данных блока остаточной разницы IDCT. Этот индекс указывает расположение данных остаточной разницы для блоков текущего макроблока, выраженное как кратное 32 битам.

wPatternCode

Указывает, отправляются ли данные остаточной разницы для каждого блока в макроблоке.

Бит (11–i) wPatternCode (где i — индекс блока в макроблоке, а бит 0 представляет наименьший значимый бит) указывает, отправляются ли данные остаточной разницы для блока i (дополнительные сведения см. в разделе Макроблок-ориентированное декодирование рисунков). Значение i — это индекс блока в макроблоке, как указано в MPEG-2, рис. 6-10. 6-11, и 6-12 (порядок растрового сканирования для Y, за ним следуют 4:2:0 блоки Cb в порядке сканирования растра, затем 4:2:0 блоки Cr, 4:2:2 блоки Cb, 4:2:2 блоки Cr, а затем 4:4:4 блоков Cb, за которым следуют блоки Cr 4:4:4). Данные для закодированных блоков (блоки с битом (11-i) равны 1) находятся в буфере кодирования остатков в том же порядке индексирования (увеличение i). Для данных MPEG-2 4:2:0 значение wPatternCode соответствует смещению декодированного значения CBP влево на шесть битовых позиций (нижние позиции бита, используемые для форматов хрома 4:2:2 и 4:4:4).

Если элемент bConfigSpatialResidInterleaved DXVA_ConfigPictureDecode равен 1, остаточные различия на основе узла отправляются в форме с чередованием хрома, соответствующей используемому формату пикселей YUV. В этом случае каждая пара блоков Cb и пространственно соответствующая пара блоков Cr обрабатывается как единая единица структуры данных остаточной разницы. Это не изменяет значение или значение wPatternCode, но подразумевает, что оба члена каждой пары блоков данных Cb и Cr отправляются всякий раз, когда любой из этих блоков данных имеет соответствующий бит, заданный в wPatternCode. Если бит в wPatternCode для определенного блока данных равен нулю, соответствующие значения остаточной разницы данных должны отправляться в виде нуля, когда для этого связывания требуется отправить блок данных остаточной разницы для блока с битом wPatternCode , равным нулю.

bNumCoef[DXVA_NumBlocksPerMB_420]

Каждое значение в массиве bNumCoef указывает количество коэффициентов в буфере данных остаточной разницы для каждого блока i макроблока.

Индекс массива i — это индекс блока в макроблоке, как указано в видео MPEG-2 Рис. 6-10, 6-11 и 6-12 (порядок растрового сканирования для Y, за которым следует Cb и Cr).

Этот элемент используется только в том случае, если флаг HostResidDiff (бит 10 в wMBtype) равен нулю, а bChromaFormat равен 1 (4:2:0). При использовании в форматах 4:2:2 или 4:4:4 размер типичных команд управления макроблоком будет увеличиваться после критической границы выравнивания памяти. В результате бит TCoefEOB в структуре DXVA_TCoefSingle используется для определения количества коэффициентов в каждом блоке в случаях, отличных от 4:2:0.

Цель bNumCoef — указать количество данных, присутствующих для каждого блока в буфере данных остаточной разницы, выраженное как количество имеющихся коэффициентов. Если элемент bConfig4GroupedCoefsструктуры DXVA_ConfigPictureDecode равен 1, bNumCoef может содержать либо фактическое число коэффициентов, отправленных для блока, либо значение, округленное до кратного четырем. Данные для этих коэффициентов находятся в буфере остаточной разницы в том же порядке.

MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off]

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

Комментарии

Каждый пропущенный макроблок, заданный MBskipsFollowing , должен быть создан математически эквивалентно приращению значения wMBaddress и последующему повтору той же команды управления макроблоком. Любая команда управления макроблоком с ненулевым значением для MBskipsFollowing указывает, как будет выполняться прогнозирование с компенсацией движения для каждого пропускаемого макроблока, и эквивалентна (за исключением значения MBskipsFollowing) явной спецификации nonskip создания первого из серии пропущенных макроблоков. Таким образом, если MBskipsFollowing не равно нулю , все значения должны быть равны нулю: Motion4MV, IntraMacroblock и bNumCoef.

MBdataLocation — это индекс в буфере данных блока остаточной разницы IDCT, указывающий расположение данных остаточной разницы для блоков текущего макроблока, выраженное кратным 32 битам. Значение должно быть равно нулю для первого макроблока в буфере команд управления макроблоком. MBdataLocation может содержать любое значение, если wPatternCode равно нулю. Если wPatternCode равно нулю, рекомендуется использовать декодеры, но не обязательно устанавливать это значение либо на ноль, либо на то же значение, что и в следующей команде управления макроблоком.

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

Допустимые сочетания IntraMacroblock, MotionForward, MotionBackward, MotionType, MvertFieldSel и MVector показаны в таблицах в первой части структуры команд управления Макроблоком.

Требования

Требование Значение
Заголовок dxva.h (включая Dxva.h)

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

DXVA_ConfigPictureDecode

DXVA_MBctrl_P_HostResidDiff_1

DXVA_MVvalue

DXVA_PictureParameters

DXVA_TCoefSingle