KS_FRAME_INFO结构 (ksmedia.h)
KS_FRAME_INFO 结构扩展了视频流的 KSSTREAM_HEADER 结构。
语法
typedef struct tagKS_FRAME_INFO {
ULONG ExtendedHeaderSize;
DWORD dwFrameFlags;
LONGLONG PictureNumber;
LONGLONG DropCount;
HANDLE hDirectDraw;
HANDLE hSurfaceHandle;
RECT DirectDrawRect;
union {
LONG lSurfacePitch;
DWORD Reserved1;
};
DWORD Reserved2;
union {
struct {
DWORD Reserved3;
DWORD Reserved4;
};
ULONGLONG FrameCompletionNumber;
};
} KS_FRAME_INFO, *PKS_FRAME_INFO;
成员
ExtendedHeaderSize
指定此结构的大小(以字节为单位)。
dwFrameFlags
指定指示捕获帧的其他信息的标志。 在捕获期间,微型驱动程序将此成员设置为在 ksmedia.h中定义的以下值之一:
旗 | 意义 |
---|---|
KS_VIDEO_FLAG_FRAME | 指示完整的帧。 |
KS_VIDEO_FLAG_FIELD1 | 指示双字段序列的字段 1。 |
KS_VIDEO_FLAG_FIELD2 | 指示双字段序列的字段 2。 |
KS_VIDEO_FLAG_I_FRAME | 指示无需引用任何其他帧即可完全解码此帧。 |
KS_VIDEO_FLAG_P_FRAME | 指示这是预测的帧。 |
KS_VIDEO_FLAG_B_FRAME | 指示这是双向帧。 |
PictureNumber
指定表示当前图片编号的计数。 在转换为KSSTATE_ACQUIRE时初始化或更新此值。
DropCount
指定未捕获的图片数。 在捕获期间,微型驱动程序设置此成员。 每当应捕获帧但未捕获帧时,应递增此计数器;当捕获期间没有可用的缓冲区时,通常会出现此情况。 在转换为KSSTATE_ACQUIRE时初始化或更新此值。
hDirectDraw
指定 DirectDraw 的用户模式句柄。 仅当捕获到 DirectDraw 图面以进行预览或覆盖时,此句柄才提供给微型驱动程序。
hSurfaceHandle
指定 DirectDraw 图面的用户模式句柄。 仅当捕获到 DirectDraw 图面以进行预览或覆盖时,此句柄才提供给微型驱动程序。
DirectDrawRect
指定已锁定的 DirectDraw 图面的部分。 这通常是整个图面。
lSurfacePitch
包含图面间距(也称为步幅)。
Reserved1
保留且不应由微型驱动程序使用。
Reserved2
保留且不应由微型驱动程序使用。
Reserved3
保留且不应由微型驱动程序使用。
Reserved4
保留且不应由微型驱动程序使用。
FrameCompletionNumber
已完成队列中帧的标识序列号。 此数字用于验证正确的帧顺序。 如果此值为 0,则帧已取消。
此成员从 Windows 8.1 开始可用。
言论
KS_FRAME_INFO 结构提供了一种返回有关捕获帧的信息的方法,以及将捕获到 DirectDraw 图面时使用的 Microsoft DirectDraw 句柄传递的方法。
PictureNumber 成员计数表示当前图片的计数,该计数按两种方式之一计算,具体取决于设备:
测量流启动后的时间,并除以帧持续时间。 此方法适用于不提供自己的时钟的设备。 例如:
PictureNumber = ElapsedTime / FrameDuration;
将捕获的帧计数和删除的帧计数加在一起。 此方法适用于提供其自己的时钟的设备。 例如:
PictureNumber = FramesCaptured + FramesDropped;
计算 PictureNumber 和 DropCount时,请务必使用在打开流时指定的帧持续时间,这可能不一定与设备实际生成图像的速率匹配。 例如,USB 相机只能以 7.5 fps 的速度生成图像,但客户端可以以 8 fps 的速度打开流。 在这种情况下,所有计算都应使用 8 fps 数字。
有关更新 PictureNumber 和 DropCount 的详细信息,请参阅 捕获视频。
要求
要求 | 价值 |
---|---|
标头 | ksmedia.h (包括 Ksmedia.h) |