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,这必须是 8 个倍数。 它还必须处于 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 | 切片开头的位不在相应的位流数据缓冲区中(因为以前的位流数据缓冲区已满),切片末尾的位也不在相应的位流数据缓冲区中(因为相应的位流数据缓冲区也已满)。 |
[!注意] 主机软件解码器通常应避免 wBadSliceChopping 的非零值。
言论
提供切片控制缓冲区来指导非主机 VLD 位流处理的作。 仅当 bConfigBitstreamRawDXVA_ConfigPictureDecode 成员为 1 时,才会发送切片控制缓冲区。 主机软件解码器必须确定位流中切片级重新同步点的位置。 切片 定义为多块层,其中包含位流数据中的重新同步点。
在 H.261 位流中,GOB 被视为切片。 在 H.263 位流中,一系列以 GOB 开始代码开头且不含其他 GOB 起始代码的 GOB 序列被视为切片。 切片控制缓冲区必须包含一个或多个DXVA_SliceInfo结构,根据相应的位流数据缓冲区的内容。
要求
要求 | 价值 |
---|---|
标头 | dxva.h (包括 Dxva.h) |