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

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

Синтаксис

typedef struct _DXVA_SliceInfo {
  WORD  wHorizontalPosition;
  WORD  wVerticalPosition;
  DWORD dwSliceBitsInBuffer;
  DWORD dwSliceDataLocation;
  BYTE  bStartCodeBitOffset;
  BYTE  bReservedBits;
  WORD  wMBbitOffset;
  WORD  wNumberMBsInSlice;
  WORD  wQuantizerScaleCode;
  WORD  wBadSliceChopping;
} DXVA_SliceInfo, *LPDXVA_SliceInfo;

Члены

wHorizontalPosition

Задает горизонтальное положение первого макроблока среза, выраженное в единицах макроблоков, при этом нуль указывает на самый левый или самый верхний макроблок рисунка.

wVerticalPosition

Задает вертикальную позицию первого макроблока среза, выраженную в единицах макроблоков, с нулем, указывающим самый левый или самый верхний макроблок рисунка.

dwSliceBitsInBuffer

Задает общее количество битов в соответствующем буфере данных битового потока, содержащих данные для текущего среза. Это значение должно быть кратно восьми для MPEG-1, MPEG-2, MPEG-4. Он также должен находиться в режиме H.263, так как коды начала среза в таких случаях выравниваются по байтам.

dwSliceDataLocation

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

bStartCodeBitOffset

Указывает количество наиболее значимых битов байта в dwSliceDataLocation , которые не содержат данных для среза. Параметр bStartCodeBitOffset должен иметь нулевое значение для MPEG-1, MPEG-2 и MPEG-4, так как коды начала среза в этих спецификациях выровнены по байтам. bStartCodeBitOffset может быть ненулевой для H.261 и H.263, так как эти стандарты не принудительно выравнивают байты кодов начала GOB (группы блоков). Этот элемент должен находиться в диапазоне от нуля до 7 и должен быть равен нулю, если начало среза не находится в соответствующем буфере данных битового потока. Наиболее значимые биты, помеченные как не относящиеся к текущему срезу bStartCodeBitOffset , могут содержать данные для предыдущего среза в случае кодов запуска, которые не выровнены по байтам (например, в базовом режиме H.263).

bReservedBits

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

wMBbitOffset

Указывает количество битов данных заголовка среза до первого бита данных уровня макроблока в буфере битового потока. Например, если wMBbitOffset имеет значение 83, данные уровня макроблока для среза начинаются после 83 битов данных заголовка среза. Значение должно быть равно нулю, если начало среза не находится в соответствующем буфере данных битового потока.

wNumberMBsInSlice

Указывает количество макроблоков данных в срезе, включая пропущенные макроблоки. Может быть равно нулю, если это число не может быть легко определено из заголовка рисунка, заголовков и исходных данных макроблока текущего и следующего среза в битовом потоке, например в подмодах прямоугольного среза и произвольного среза в режиме среза H.263. Не должен быть равен нулю для H.261, MPEG-1, MPEG-2, MPEG-4 или при использовании прямоугольного среза или произвольных подмодов среза в режиме структуры среза в H.263.

wQuantizerScaleCode

Код масштабирования квантайзера на уровне среза битового потока, как указано в конкретной спецификации кодирования видео (от 1 до 31 для H.261, H.262/MPEG-2, H.263, MPEG-1 и MPEG-4).

wBadSliceChopping

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

Значение Описание
1 Биты для начала среза находятся в соответствующем буфере данных bitstream, а биты для конца среза — нет (так как буфер данных bitstream заполнен).
2 Биты для начала среза не находятся в соответствующем буфере данных битового потока (так как предыдущий буфер данных битового потока был заполнен), но биты для конца среза находятся в соответствующем буфере данных битового потока.
3 Биты для начала среза не находятся в соответствующем буфере данных битового потока (так как предыдущий буфер данных битового потока был заполнен), а биты для конца среза также не находятся в соответствующем буфере данных bitstream (так как соответствующий буфер данных bitstream также заполнен).

[! ПРИМЕЧАНИЕ. Ненулевое значение wBadSliceChopping обычно следует избегать декодером программного обеспечения узла.

Комментарии

Буферы управления срезом предоставляются для управления работой обработки битового потока VLD вне узла. Буферы элементов управления срезом отправляются только в том случае, если элемент bConfigBitstreamRawDXVA_ConfigPictureDecode равен 1. Декодер программного обеспечения узла должен определить расположение точек повторной синхронизации на уровне среза в битовом потоке. Срез определяется как слой multimacroblock, который включает точку повторной синхронизации в данных битового потока.

В битовых потоках H.261 GOB считается срезом. В битовых потоках H.263 последовательность из одной или нескольких ГОБ, начиная с кода запуска GOB и не содержащая дополнительных кодов запуска GOB, считается срезом. Буфер управления срезом должен содержать одну или несколько DXVA_SliceInfo структур в соответствии с содержимым соответствующего буфера данных битового потока.

Требования

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

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

DXVA_ConfigPictureDecode