IMiniportWaveRTOutputStream::SetWritePacket メソッド (portcls.h)
SetWritePacket は、OS が WaveRT バッファーに有効なデータを書き込んだことをドライバーに通知します。
構文
NTSTATUS SetWritePacket(
[in] ULONG PacketNumber,
[in] DWORD Flags,
[in] ULONG EosPacketLength
);
パラメーター
[in] PacketNumber
OS によって WaveRT バッファーに書き込まれたパケットの数。
[in] Flags
パケットまたはストリームに関連する追加の属性。
KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM - このフラグは、このパケットがデータ ストリームの末尾を表していることを示します。
[in] EosPacketLength
KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAMがフラグで指定されている場合の EOS パケットの長さ。 ゼロは有効な値です。 フラグでKSSTREAM_HEADER_OPTIONSF_ENDOFSTREAMが指定されていない場合、このパラメーターは無視されます。
戻り値
SetWritePacket
は、呼び出しが成功した場合にSTATUS_SUCCESSを返します。 それ以外の場合、関数は適切なエラー状態コードを返します。
STATUS_DATA_LATE_ERROR – OS が既に転送済みまたは現在転送中のパケット番号を渡した場合、ドライバーはこのエラーを返します。 この場合、グリッチ状態が発生しました。 必要に応じて、ドライバーは、パケットからのデータの一部を使用するか、このパケット番号に書き込まれたデータの再生を続行できます。
STATUS_DATA_OVERRUN – ドライバーは、OS が WaveRT バッファーに格納できるよりも大きいパケット番号を渡した場合に、このエラーを返します。 この場合、グリッチ状態が発生しました。 ドライバーは、必要に応じてパケット内のデータを無視できます。
STATUS_INVALID_DEVICE_STATE – 以前に KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM フラグを設定した後に OS がこのルーチンを呼び出した場合、ドライバーはこのエラーを返します。
STATUS_INVALID_PARAMETER – ドライバーは、他のエラー状態の特定のケースを除いて、無効な他のパラメーターが見つかると、このエラーを返します。 これには、上記で特に定義されていないフラグ値が含まれます。
備考
OS がこのルーチンを呼び出した後、ドライバーは必要に応じて提供された情報を使用してハードウェア転送を最適化できます。 たとえば、ドライバーは DMA 転送を最適化したり、OS が別のパケットをドライバーに通知するためにこのルーチンを再度呼び出さない場合に、指定されたパケットの最後に転送を停止するようにハードウェアをプログラムする場合があります。 これにより、循環バッファーを繰り返すのではなく、可聴ギャップを導入するなど、アンダーフローの可聴効果を軽減できます。 ただし、ドライバーは、内部パケット カウンターを増やし、通知イベントをわずかなリアルタイム レートで通知する義務を引き続き負います。
OS が KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM フラグを指定する場合を除き、パケット サイズは、IMiniportWaveRTStreamNotification::AllocateBufferWithNotificationに渡される NotificationCount で割った WaveRT バッファー サイズです。
ハードウェアの機能によっては、KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM フラグが指定されている場合、ハードウェアが EOS 位置を超えてデータを転送する場合に備えて、ドライバーは EOS パケットに続く WaveRT バッファーの一部を無音にする場合があります。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 10 以降で使用できます。 |
ターゲット プラットフォーム の | ウィンドウズ |
ヘッダー | portcls.h |
IRQL | パッシブ レベル |
関連項目
IMiniportWaveRTOutputStream を する