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


структура 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 Биты для начала среза находятся в соответствующем буфере данных битового потока, а биты для конца среза не являются (так как буфер данных битов заполнен).
2 Биты для начала среза не находятся в соответствующем буфере данных битового потока (так как предыдущий буфер данных битов был заполнен), но биты для конца среза находятся в соответствующем буфере данных битового потока.
3 Биты для начала среза не находятся в соответствующем буфере данных bitstream (так как предыдущий буфер данных битов был заполнен), а биты для конца среза также не находятся в соответствующем буфере данных битов (так как соответствующий буфер данных битов также заполнен).

[! NOTES] Ненулевое значение wBadSliceChopping, как правило, следует избегать декодирования программного обеспечения узла.

Замечания

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

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

Требования

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

См. также

DXVA_ConfigPictureDecode