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 結構 的信息成員包含 實際寫入的位元組總數。 對於讀取作業,將框架提交至較低層級驅動程式時,不會使用此成員,而且必須設定為零。 傳回時,此成員包含實際填入此框架的位元組數目,而IO_STATUS_BLOCK結構 的信息成員包含 實際使用的標頭清單大小。 請注意,如果 minidriver 在KSPIN_DESCRIPTOR_EX中指定KSPIN_FLAG_GENERATE_MAPPINGS,當數據流指標超過框架時,DataUsed 會設定為 Count 減去 KSSTREAM_POINTER_OFFSET) 剩餘 (成員。 如果驅動程式未指定此旗標,minidriver 會負責設定 DataUsed

Data

指定數據緩衝區的虛擬位址。

OptionsFlags

指定數據流的各種屬性。 OptionsFlags 成員可以有下表所列的值。

Description
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 表示此數據流的數據格式已變更。 如果設定此旗標, 數據 成員會包含包含新格式的 KSDATAFORMAT 結構。 此旗標僅適用於先前交涉動態類型變更的數據流。 針對寫入作業,請包含新的數據格式來取代媒體範例。 如果修改媒體特定的擴充功能大小,這個標頭必須是指定數據流要求標頭清單中的最後一個標頭。 在讀取要求期間,直到透過KSPROPERTY_CONNECTION_DATAFORMAT擷取新格式之前,任何進一步的 I/O 都會維持擱置狀態。 對於寫入作業,標頭不得擴充,而且必須是寫入作業中唯一的標頭。
KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER 指定數據流標頭的 Data 成員指向類型 VRAM_SURFACE_INFO的結構。 系統提供的 KS Proxy 模組會設定此旗標,指出它 正直接擷取至 VRAM
KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER 指定KSSTREAM_HEADER 的數據成員包含 原始緩衝區的核心模式複本。 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> 元素包含要傳回之標頭數據的總大小,這是至少一 個 sizeof (KSSTREAM_HEADER) 。

在IOCTL_KS_WRITE_STREAM上,成員元素必須初始化,而且每個KSSTREAM_HEADER。DataUsed 元素包含要寫入的位元組數目。 寫入的實際位元組總數會在 pIrp-IoStatus.Information> 中傳回。 這小於或等於所有KSSTREAM_HEADER總數。標頭中的DataUsed元素。

如果您使用 IKsReferenceClock 介面來取得時間戳,以放在 KSSTREAM_HEADER 的 PresentationTime 成員中,請參閱 AVStream Clocks 以取得詳細資訊。

規格需求

需求
標頭 ks.h (包含 Ks.h)

另請參閱

KSDATAFORMAT