структура 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 Эта переменная не имеет смысла, и в этой структуре для этих битов должно быть задано значение 0. |
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-разрядных целых чисел в выходных данных процесса 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
Указывает, отправляются ли данные остаточной разницы для каждого блока в текущем макроблоке.
Бит (11–i) wPatternCode (где ноль бита — наименее значимые биты) указывает, отправляются ли данные остаточной разницы для блока i, где i — индекс блока в макроблоке, как указано в mpeg-2 рис. 6–10, 6–11 и 6–12 (порядок растрового сканирования для Y, за которым следуют блоки Cb 4:2:0 в порядке растрового сканирования, затем 4:2:0 блоки Cr, 4:2:2 блоки Cb, 4:2:2 блоки Cr, 4:4:4 блоки Cb, а затем 4:4:4 блоков Cr). Данные для закодированных блоков (блоки с битами (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 , равным нулю.
wPC_Overflow
Указывает, какие блоки макроблока используют данные остаточной разницы переполнения.
При использовании декодирования остаточных различий на основе узла с элементом bPicOverflowBlocksDXVA_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 (включая Dxva.h) |