dxva.h) (DXVA_SliceInfo 结构

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,这必须是 8 的倍数。 它还必须处于 H.263 的切片结构化模式,因为在这些情况下,切片起始代码是字节对齐的。

dwSliceDataLocation

指定包含切片数据的第一个字节的位置 (例如,切片开始代码) 位流数据缓冲区中的位置。 如果切片的开头不在相应的位流数据缓冲区内,则必须为零。

bStartCodeBitOffset

指定 dwSliceDataLocation 中不包含切片数据的字节的最有效位的数目。 bStartCodeBitOffset 对于 MPEG-1、MPEG-2 和 MPEG-4 必须为零,因为这些规范中的切片开始代码是字节对齐的。 bStartCodeBitOffset 对于 H.261 和 H.263 可能是非零值,因为这些标准不会强制 GOB (组块的字节对齐) 开始代码。 此成员必须在 0 到 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 切片开头的位不在相应的位流数据缓冲区 (内,因为以前的位流数据缓冲区已满) ,而切片末尾的位也不在相应的位流数据缓冲区 (因为相应的位流数据缓冲区也已满) 。

[!注意] 主机软件解码器通常应避免 wBadSliceChopping 的非零值。

注解

切片控制缓冲区用于指导主机外 VLD 位流处理的操作。 仅当 DXVA_ConfigPictureDecodebConfigBitstreamRaw 成员为 1 时,才会发送切片控制缓冲区。 主机软件解码器必须确定切片级重新同步点在位流中的位置。 切片定义为多块层,该层在位流数据中包含重新同步点。

在 H.261 位流中,GOB 被视为切片。 在 H.263 位流中,一个或多个 GOB 的序列以 GOB 开始代码开头,且不含其他 GOB 启动代码,被视为切片。 根据相应位流数据缓冲区的内容,切片控制缓冲区必须包含一个或多个DXVA_SliceInfo结构。

要求

要求
Header dxva.h (包括 Dxva.h)

另请参阅

DXVA_ConfigPictureDecode