ksmedia.h) (KS_FRAME_INFO 结构
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 的详细信息,请参阅 捕获视频。
要求
要求 | 值 |
---|---|
Header | ksmedia.h (包括 Ksmedia.h) |