структура 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) |