IMiniportWaveRTInputStream::GetReadPacket 方法 (portcls.h)

傳回所擷取數據的相關信息。

語法

NTSTATUS GetReadPacket(
  [out] ULONG   *PacketNumber,
  [out] DWORD   *Flags,
  [out] ULONG64 *PerformanceCounterValue,
  [out] BOOL    *MoreData
);

參數

[out] PacketNumber

傳回相對於擷取開始的封包編號。

[out] Flags

保留供未來使用。 必須設定為 0。

[out] PerformanceCounterValue

傳回性能計數器值,對應至封包中第一個樣本的取樣瞬間。

[out] MoreData

如果立即備妥更多數據,則會傳回 TRUE 。 OS 可以選擇性地在處理封包后再次呼叫此例程,以取得下一個封包資訊。 如果驅動程式傳回 FALSE,則擷取會實時運作。

傳回值

GetReadPacket 如果呼叫成功,會傳回STATUS_SUCCESS。 否則,函式會傳回適當的錯誤狀態代碼。

STATUS_DEVICE_NOT_READY - 如果沒有任何可用的新資料,驅動程式會傳回此錯誤。

備註

從 WaveRT 緩衝區讀取擷取的音訊數據之前,OS 會呼叫此例程以取得可用數據的相關信息。

封包編號會識別數據流內的封包。 當數據流處於KSSTATE_STOP時,這會重設為零。 數位會隨著每個擷取的緩衝區前進。 從封包編號中,OS 可以在 WaveRT 緩衝區內衍生封包位置,也可以衍生封包相對於數據流開頭的數據流位置。

封包大小是 WaveRT 緩衝區大小除以傳遞至 IMiniportWaveRTStreamNotification::AllocateBufferWithNotification 的 NotificationCount。 OS 可以隨時呼叫此例程。 在正常作業中,OS 會在驅動程式設定緩衝區通知事件或先前的呼叫針對MoreData傳回 true 之後呼叫這個例程。 當OS呼叫此例程時,驅動程式可能會假設操作系統已完成讀取所有先前的封包。 如果硬體已擷取足夠的數據,驅動程式可能會立即將下一個完整封包高載至 WaveRT 緩衝區,並再次設定緩衝區事件。在擷取溢位 (當OS未快速讀取數據時,) 音訊驅動程式可能會卸除或覆寫某些音訊數據。 音訊驅動程式會先卸除或覆寫最舊的數據,即使OS可能沒有讀取數據,音訊驅動程式仍可能會繼續前進其內部封包計數器。

規格需求

需求
最低支援的用戶端 可在 Windows 10 和更新版本中使用。
目標平台 Windows
標頭 portcls.h
IRQL 被動層級

另請參閱

IMiniportWaveRTInputStream