KSSTREAM_HEADER 结构 (ks.h)

KSSTREAM_HEADER 结构是一种长度可变的结构,用于描述要从流式驱动程序引脚读取或写入的数据包。

语法

typedef struct {
  ULONG    Size;
  ULONG    TypeSpecificFlags;
  KSTIME   PresentationTime;
  LONGLONG Duration;
  ULONG    FrameExtent;
  ULONG    DataUsed;
  PVOID    Data;
  ULONG    OptionsFlags;
  ULONG    Reserved;
} KSSTREAM_HEADER, *PKSSTREAM_HEADER;

成员

Size

指定结构的大小(以字节为单位)。 这至少应 为大小 (KSSTREAM_HEADER)

TypeSpecificFlags

指定特定于数据格式的标志。 TypeSpecificFlags 当前支持的唯一标志是 KS_AM_UseNewCSSKey。 此标志指示硬件解码器应切换到下一个排队的 CSS (Content Scramble System) 解密密钥,因为紧跟在标头后面的数据示例是应用新游戏密钥的第一个数据示例。

PresentationTime

KSTIME 结构,指定相关流缓冲区的呈现时间(以 100 纳秒为单位)。 有关详细信息,请参阅备注部分。

Duration

以与演示时间相同的单位指定此流段的持续时间 (100 纳秒) 。 不使用时设置为零。

FrameExtent

指定整个帧的大小。 帧范围中的区域可供筛选器使用,流操作产生的有效数据大小反映在 DataUsed 成员中。

DataUsed

对于写入操作,此成员指定将帧提交到较低级别的驱动程序时帧内有效的字节数。 标头不会在写入操作上修改;但是,IO_STATUS_BLOCK 结构的 Information 成员包含实际写入的字节总数。 对于读取操作,将帧提交到较低级别的驱动程序时,不会使用此成员,并且必须设置为零。 返回时,此成员包含此帧中实际填充的字节数,IO_STATUS_BLOCK 结构的 Information 成员包含实际使用的标头列表的大小。 请注意,如果微型驱动程序在 KSPIN_DESCRIPTOR_EX 中指定KSPIN_FLAG_GENERATE_MAPPINGS,则当流指针超过帧时,DataUsed 将设置为“计数”减去KSSTREAM_POINTER_OFFSET) 的剩余 (成员。 如果驱动程序未指定此标志,微型驱动程序负责设置 DataUsed

Data

指定数据缓冲区的虚拟地址。

OptionsFlags

指定数据流的各种属性。 OptionsFlags 成员可以具有下表中列出的值。

说明
KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 指定在此数据包中包含的数据之前,数据流中存在不连续。 这意味着筛选器可能需要在处理数据之前重置其内部状态。 无需附加实际数据缓冲区。
KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 指定此结构的 Duration 成员有效。
KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE 指示此帧表示照片序列的末尾。
KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 指示此帧表示数据流的末尾。
KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 如果流暂停,则应刷新此缓冲区。 例如,实时数据源使用此标志,其中暂停呈现当前数据过时。
KSSTREAM_HEADER_OPTIONSF_FRAMEINFO 指示KSSTREAM_HEADER后有一个KS_FRAME_INFO结构。
KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 此数据缓冲区是循环数据的开始。 驱动程序应循环访问此数据,直到显式停止。
KSSTREAM_HEADER_OPTIONSF_METADATA 指示KSSTREAM_HEADER后跟KS_FRAME_INFO KSSTREAM_METADATA_INFO。 仅当支持KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA时才存在此标志。
KSSTREAM_HEADER_OPTIONSF_PREROLL 此缓冲区中的数据用于设置设备状态。 这是特定于流的选项。
KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 数据流处于进行拼接的自然点。 例如,当发送使用帧间压缩的数据(如 MPEG 视频)时,客户端使用此来指示此时可以安全地进行拼接。
KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 此数据包之后的数据流中存在中断。 此标志可用于面向位置的接口,以指示流数据的结束。 无需附加实际数据缓冲区。
KSSTREAM_HEADER_OPTIONSF_TIMEVALID 指定此结构的 PresentationTime 成员有效。 指示此缓冲区具有与之关联的有效时间戳。
KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 表示此流的数据格式已更改。 如果设置了此标志, 则 Data 成员包含包含新格式的 KSDATAFORMAT 结构。 此标志仅适用于以前协商动态类型更改的流。 对于写入操作,请包含新的数据格式来代替媒体示例。 如果修改了特定于媒体的扩展大小,则此标头必须是给定流请求的标头列表中的最后一个标头。 在读取请求期间,任何其他 I/O 将保持挂起状态,直到通过KSPROPERTY_CONNECTION_DATAFORMAT检索新格式。 对于写入操作,标头不得扩展,并且必须是写入操作中唯一的标头。
KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER 指定流标头 的数据 成员指向 VRAM_SURFACE_INFO类型的结构。 系统提供的 KS 代理模块设置此标志以指示它 正在直接捕获到 VRAM
KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER 指定 KSSTREAM_HEADER 的 Data 成员包含原始缓冲区的内核模式副本。 Ksproxy 在 WVDDM (Windows Vista 显示驱动程序模型) 捕获期间为小型数据传输设置此标志。 如果未设置此标志,KS 将使用直接 I/O 进入 数据 缓冲区。

Reserved

保留以供内部使用。

注解

此结构可以在内存中后跟数据包中特定于数据类型的其他信息。

呈现时间通常为 100 纳秒单位:但是,这次的标准格式基于数据格式。 可以通过将 用作KSSTREAM_HEADER的缩放小数来规范化呈现时间。PresentationTime.Numerator 除以KSSTREAM_HEADER。PresentationTime.分母 。

转换应首先使用分子,然后使用分母,以减少舍入误差。 例如,音频流可能会将当前时间显示为数据流中的字节偏移量:

#define BITS_PER_BYTE8
#define NANOSECONDS10000000

StreamHdr->PresentationTime.Numerator = BITS_PER_BYTE * NANOSECONDS;
StreamHdr->PresentationTime.Denominator = BitsPerSample * Channels * Frequency;
StreamHdr->PresentationTime.Time = ByteOffset;
StreamHdr->Duration = ByteLength;

在IOCTL_KS_READ_STREAM,由调用填充流标头的部分。 每个KSSTREAM_HEADER。DataUsed 元素包含读取的实际字节数,小于或等于每个KSSTREAM_HEADER。FrameExtent。 pIrp-IoStatus.Information> 元素包含要返回的标头数据的总大小,即至少一个 大小 (KSSTREAM_HEADER) 。

在IOCTL_KS_WRITE_STREAM上,必须初始化成员元素,并且每个元素KSSTREAM_HEADER。DataUsed 元素包含要写入的字节数。 写入的实际总字节数以 pIrp-IoStatus.Information> 的形式返回。 这小于或等于所有KSSTREAM_HEADER总数。标头中的 DataUsed 元素。

如果使用 IKsReferenceClock 接口获取要放置在 KSSTREAM_HEADER PresentationTime 成员中的时间戳,请参阅 AVStream Clocks 了解详细信息。

要求

要求
Header ks.h (包括 Ks.h)

另请参阅

KSDATAFORMAT