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


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

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

Синтаксис

typedef struct _DXVA_MBctrl_P_HostResidDiff_1 {
  WORD         wMBaddress;
  WORD         wMBtype;
  DWORD        dwMB_SNL;
  WORD         wPatternCode;
  WORD         wPC_Overflow;
  DWORD        dwReservedBits2;
  DXVA_MVvalue MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off];
} DXVA_MBctrl_P_HostResidDiff_1;

Члены

wMBaddress

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

wMBtype

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

Биты описание
От 15 до 12 MvertFieldSel_3 (бит 15, самый значительный бит) до MvertFieldSel_0 (бит 12)
Задает выбор вертикального поля для соответствующих векторов движения, отправленных позже в команде элемента управления макроблока. Для движения на основе кадра с структурой рисунка кадра (например, для H.261 и H.263) эти биты должны быть равны нулю. Использование этих битов совпадает с тем, что указано для соответствующих битов в разделе 6.3.17.2 MPEG-2.
11 Зарезервированный бит. Должно быть равно нулю.
10 HostResidDiff
Указывает, отправляются ли декодированные блоки остаточного значения пространственного домена или отправляются ли коэффициенты преобразования для внеузлового идентификатора IDCT для текущего макроблока.
Флаг HostResidDif всегда равен 1 в этой структуре. Этот флаг должен быть равен нулю, если bConfigResidDiffHost равно нулю. Этот флаг должен иметь значение 1, если bConfigResidDiffAccelerator равно нулю.
9 и 8 MotionType
Указывает тип движения на рисунке. Например, для движения на основе кадра со структурой рисунка кадра (как в H.261), бит 9 должен быть 1, а бит 8 должен быть равен нулю.
Использование этих битов соответствует непосредственно использованию frame_motion_type или field_motion_type битов в разделе 6.3.17.1 и Таблицах 6-17 и 6-18 видео MPEG-2, когда эти биты присутствуют в MPEG-2. Использование этих битов более подробно описано в следующем разделе примечания.
7 и 6 MBscanMethod
Эта переменная не имеет значения, и эти биты должны иметь значение нулю в этой структуре.
5 FieldResidual
Указывает, используют ли блоки остаточного различия структуру IDCT поля, как указано в MPEG-2.
Должно быть 1, если элемент bPicStructure DXVA_PictureParameters равен 1 или 2. При использовании для MPEG-2 полеResidual должно быть равно нулю, если переменная 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-разрядных целых чисел в выходных данных процесса фильтрации 2-D (полу целочисленное или более высокое значение округляется).
3 Motion4MV
Переменная, указывающая, что движение вперед использует отдельный вектор движения для каждого из четырех блоков света в макроблоке, как используется в приложениях H.263 F и J. Motion4MV, должно быть равно нулю, если MotionForward равен нулю или если элемент bPic4MVallowed DXVA_PictureParameters равен нулю.
2 MotionBackward
Используется таким образом для соответствующей переменной macroblock_motion_backward в 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 — это индекс в буфер данных блока остатков. Этот индекс указывает расположение данных остаточной разницы для блоков текущего макроблока, выраженных как 32 бита.

wPatternCode

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

Bit (11-i) wPatternCode (где бит нуля является наименее значительными битами) указывает, отправляются ли данные остаточной разницы для блокных 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 блоков Cb, за которым следует 4:4:4 блока Cr). Данные для закодированных блоков (эти блоки имеют бит (11-i) равны 1) находятся в буфере остаточного кодирования в том же порядке индексирования (увеличивая i). Для данных 4:2:0 MPEG-2 значение wPatternCode соответствует перемещению декодированного значения CBP (закодированного шаблона блока) влево на шесть битовых позиций (эти нижние битовые позиции используются для форматов 4:2 и 4:4:4).

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

wPC_Overflow

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

При использовании декодирования остатков на основе узла с bPicOverflowBlocks член DXVA_PictureParameters равным 1 и IntraMacroblock равны нулю (метод переполнения 8–8), wPC_Overflow содержит код шаблона блоков переполнения. (Код шаблона указывается таким же образом, как для wPatternCode.) Данные для закодированных блоков переполнения (эти блоки с битом (11-i) равны 1) находятся в буфере остаточного кодирования в том же порядке индексирования (увеличение i).

dwReservedBits2

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

MVector[DXVA_NumMV_OBMC_off_BinPBwith4MV_off]

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

Замечания

Каждый пропущенный макроблок, указанный MBskipsFollowing , должен быть создан математически эквивалентно добавочному значению wMBaddress, а затем повторять ту же команду управления макроблоком.

Содержимое команды управления макроблоком с ненулевое значение для MBskipsFollowing эквивалентно (за исключением значения MBskipsFollowing) содержимому первой серии пропущенных макроблоков. Таким образом, каждый раз, когда MBskipsFollowing не равно нулю, следующие элементы структуры и переменные должны быть равны нулю: Motion4MV, IntraMacroblock, wPatternCodeи wPC_Overflow. Затем каждый последующий пропущенный макроблок создается так же, как и первый, за исключением увеличения значения wMBaddress.

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

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

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

Требования

Требование Ценность
заголовка dxva.h (include Dxva.h)

См. также

DXVA_ConfigPictureDecode

DXVA_MBctrl_P_OffHostIDCT_1

DXVA_MVvalue

DXVA_PictureParameters