Skip to main content
このトピックでは、Microsoft Game Development Kit (GDK) に含まれているサンプルの 1 つを使用して、XBOX Series X デバイスでハードウェア アクセラレーションによる Opus デコードを使用する方法についての想定されるコード フローを説明します。このサンプルは DecodeOne.cpp と呼ばれ、1 つのクライアントによるシングル ストリーム デコード シナリオを扱います。

オーディオ ハードウェアの接続と起動

デコードは、XApuConnect を介したハードウェア アクセラレーション ユニットとの接続の確立から始まります。呼び出し元は、XApuConnectInputParameters を使用して接続の要件を設定し、以下を設定します。
  1. 処理タイプ (この場合、XApuProcessType::DecodeOpus)。
  2. ストリームの数 (この場合、1)。
  3. 入力および出力データを渡したり取得したりするために必要な合計メモリ。この場合、MaxInputBufferLength に 1024 (ストリーム内の最大の Opus パケット以上である必要があり、16 の倍数である必要があります) と 7680 を指定します。これは、48 K での 20 ms のデータで、MaxOutputBufferLength の場合は 960 × 2 × sizeof(float) = 7680 です。出力も 16 の倍数である必要があります。
この呼び出しが成功すると、XApuConnectOutputParameters::baseData パラメーターは、ハードウェア アクセラレーション ユニットが追加のマーシャリングまたはコピーなしで直接アクセスできるようにオペレーティング システムによって割り当てられたメモリ位置を指します。このメモリは、呼び出し元が入力データを渡し、出力データを取得するために使用するべきです。次の単純なメモリ マネージャーの例を使用して、XApuConnectInputParameters を設定し、XApuConnectOutputParameters::baseData を 2 つのポインター (入力データ用と出力データ用) に分割できます。
接続を確立する最初のステップのコード例を以下に示します。

ストリームのアクティブ化と非アクティブ化

デバイスとの接続が確立された後、呼び出し元は、単一のデコード エンジンを起動するためにストリーム アクティブ化コマンドを送信する必要があります。呼び出し元は、ストリーム インデックスとチャネル数を指定する必要があります。モノラルまたはステレオ ストリームのみが許可されます。 呼び出し元は、XApuDequeueResult を呼び出してアクティブ化の結果を取得する必要があります。このサンプルでは XApuConnectInputParameters::maxQueuedCommandsPerStream が 1 に設定されているため、呼び出し元は次のコマンドを送信する前に各結果を待つ必要があります。これには、ActivateProcess、および Deactivate コマンドが含まれます (詳細については、XApuCommandType を参照してください)。 1 つのストリームをアクティブ化するコードを以下に示します。
アクティブ化の結果を受け取った後、呼び出し元はデコード用に Opus パケットを送信できます。これは XApuCommandType::Process コマンドを使用して行う必要があります。各 Process コマンドに対して、呼び出し元は以下を行う必要があります。
  1. 入力バッファーに正確に 1 つの Opus パケットを埋めます。
  2. パケットの長さを指定します。
  3. オーディオ ハードウェア アクセラレーション ユニットによってデコードされたデータで埋められる出力バッファーの場所を提供します。
  4. 出力バッファーの最大長を指定します。
また、呼び出し元は streamIndex および frameCount の値を指定する必要があります。デコードされたすべてのデータを出力バッファーにコピーする必要がある場合、frameCount 値は、パケットにエンコードされているフレーム数以上の任意の値に設定できます (たとえば、20 ms パケットの場合、frameCount は 960 から 0xFFFFFFFF の間で設定できます)。
次に、XApuDequeueResult を呼び出してパケットのデコード出力を取得する必要があります。XApuResult が正常に取得された後、出力データは result.outputData に格納されます。処理された後、次のパケットは XApuEnqueueCommandXApuCommandType::Process コマンドへの新しい呼び出しでデコード用に送信する必要があります。
ストリーム内のすべてのパケットがデコードされた後、XApuCommandType::Deactivate コマンドを送信する必要があります。

終了

非アクティブ化の結果を受け取った後、呼び出し元は、割り当てられたすべてのリソースを解放するために、XApuDisconnect を呼び出してオーディオ ハードウェア アクセラレーション ユニットから切断する必要があります。
最終更新日 2026年8月24日