DXVA_BufferDescription结构 (dxva.h)
主机解码器将DXVA_BufferDescription结构发送到加速器,以便向加速器提供有关当前正从主机传递到加速器的缓冲区的信息。
语法
typedef struct _DXVA_BufferDescription {
DWORD dwTypeIndex;
DWORD dwBufferIndex;
DWORD dwDataOffset;
DWORD dwDataSize;
DWORD dwFirstMBaddress;
DWORD dwNumMBsInBuffer;
DWORD dwWidth;
DWORD dwHeight;
DWORD dwStride;
DWORD dwReservedBits;
} DXVA_BufferDescription, *LPDXVA_BufferDescription;
成员
dwTypeIndex
标识传递给加速器的缓冲区类型。 下表列出了数字标识符和关联的缓冲区类型。
值 | 缓冲区类型 |
---|---|
1 | 图片解码参数缓冲区。 |
2 | Macroblock 控制命令缓冲区(与残差块数据缓冲区有一个 1:1 的对应关系密切)。 |
3 | 残差块数据缓冲区。 有关详细信息,请参阅 Macroblock-Oriented 图片解码。 |
4 | 取消阻止筛选器控制命令缓冲区(对筛选器的效果有限制或不受限制)。 |
5 | 反量子化矩阵缓冲区(仅用于主机外 VLD 处理)。 |
6 | 切片控制缓冲区(与位流数据缓冲区紧密关联并具有 1:1 对应)。 |
7 | 位流数据缓冲区。 |
8 | AYUV alpha 混合示例缓冲区。 |
9 | IA44/AI44 alpha 混合图面缓冲区。 |
10 | DPXD alpha 混合图面缓冲区。 |
11 | 突出显示数据缓冲区。 |
12 | DCCMD 数据缓冲区。 |
13 | Alpha 混合组合缓冲区。 |
14 | 图片重新采样控件缓冲区。 |
15 | 包含命令的读回命令缓冲区,用于将生成的图片的宏块读取回主机。 |
dwBufferIndex
指定在同一 缓冲区说明列表中传递的相同类型的缓冲区的序列号。
dwDataOffset
指定缓冲区开头的相关数据的偏移量(以字节为单位)。 此成员的使用当前限制为值零。
dwDataSize
指定缓冲区中相关数据量(以字节为单位)。 缓冲区中最后一个字节内容的位置 dwDataOffset,加上 dwDataSize 减 1。
dwFirstMBaddress
指定传递给加速器的缓冲区中第一个宏块的宏块的宏块地址。 宏块地址按光栅扫描顺序提供。 地址由 DXVA_PictureParameters的成员确定。 宏块地址的示例如下所示。
Macroblock | 地址 |
---|---|
top-left | 零 |
右上角 | wPicWidthInMBminus1 |
左下角 | wPicHeightInMBminus1 x (wPicWidthInMBminus1+1) |
右下角 | (wPicHeightInMBminus1+1) x (wPicWidthInMBminus1+1)-1 |
如果数据缓冲区属于以下类型之一,则此成员必须为零:图片解码参数、反量子化矩阵、切片控制、位流数据、AYUV、IA44/AI44、DPXD、Highlight 和 DCCMD。
如果数据缓冲区是残差块数据缓冲区,dwFirstMBaddress 必须具有与相应的宏块控制命令缓冲区相同的值。 有关详细信息,请参阅 Macroblock-Oriented 图片解码。
dwNumMBsInBuffer
指定缓冲区中数据的宏块数。 此计数包括跳过的宏块。 如果数据缓冲区属于以下类型之一,则必须为零:图片解码参数、反量子化矩阵、AYUV、IA44/AI44、DPXD、Highlight 或 DCCMD。
dwNumMBsInBuffer 的值取决于要使用的数据缓冲区的类型,如下表所示。
缓冲区类型 | dwNumMBsInBuffer 的 值 |
---|---|
Macroblock 控件命令 | 必须等于 MBskipsFollowing 的所有值的总和,并添加到宏块控件命令缓冲区中的宏块控件命令的数目。 |
残差块 | 必须具有与相应宏块控制命令缓冲区相同的值。 |
切片控制命令 | 必须等于切片控制缓冲区中 DXVA_SliceInfo 结构的 wNumberMBsInSlice 成员的值。 |
Bitstream | 必须具有与相应切片控制命令缓冲区相同的值。 |
dwWidth
将缓冲区中的数据宽度指定为以下类型的数据单位数:AYUV(数据以 32 位单位指定)、IA44/AI44(以 8 位单位指定数据)或 DPXD(数据以 2 位单位指定)。 如果数据缓冲区不在上述类型中,则此成员必须为零。
dwHeight
将缓冲区中的数据高度指定为以下类型的数据单位数:AYUV(数据以 32 位单位指定)、IA44/AI44(以 8 位单位指定数据)或 DPXD(数据以 2 位单位指定)。如果数据缓冲区不在上述类型中,则此成员必须为零。
dwStride
将缓冲区中的数据步幅指定为以下类型的数据单位数:AYUV(数据以 32 位单位指定)、IA44/AI44(以 8 位单位指定数据)或 DPXD(数据以 2 位单位指定)。 适用的缓冲区类型的步幅取决于加速器执行的缓冲区分配设置。 如果数据缓冲区不在上述类型中,则此成员必须为零。
dwReservedBits
用于打包和对齐的保留位。 必须为零。
言论
DXVA_BufferDescription结构的数组称为缓冲区说明列表。 将一组缓冲区从主机解码器发送到硬件加速器时,会发送一个缓冲区说明列表来描述缓冲区。 缓冲区说明列表包含此集中每个缓冲区的一个DXVA_BufferDescription结构。 缓冲区说明列表以第一种类型的第一个缓冲区的DXVA_BufferDescription结构开头,后跟同一类型的下一个缓冲区的DXVA_BufferDescription结构,依此类图。 然后,缓冲区说明列表继续执行下一类型的第一个缓冲区的DXVA_BufferDescription结构,依此类提。
要求
要求 | 价值 |
---|---|
标头 | dxva.h (包括 Dxva.h) |