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