libav のラッパーである ffms2(ffmpegsource) を使用して、ファイルからビデオとオーディオのフレームを取得しています。ビデオのデコードは正常に機能しています。ただし、オーディオのデコードでいくつかの問題に直面しています。FFMS2 はFFMS_GetAudio(FFMS_AudioSource *A, void *Buf, int64_t Start, int64_t Count, FFMS_ErrorInfo *ErrorInfo);
、デコードされたバッファを取得するための単純な関数 API を提供します。デコードされたデータは、ユーザーが提供するバッファに返されます。
単一チャネルの場合、データの解釈は、ユーザー バッファの最初の位置から始まるデータ バイトで簡単に行われます。ただし、2 チャンネルになると、FFMS_GetAudioProperties によって返されるサンプル形式に応じて、デコードされたデータが平面またはインターリーブされる可能性が 2 つあります。私の場合、サンプル形式は常に平面です。つまり、デコードされたデータは、データ [0] とデータ [1] の 2 つの別個のデータ プレーンになります。これは libav/ffmpeg と portaudio によって説明されており、平面データは 2 つの別個のデータ プレーンにあると見なされます。
ただし、FFMS_GetAudio はユーザーから単一のバッファーを取得するだけです。したがって、平面データの場合、data[0] = buf、data[1] = buf + offset と仮定できます。ここで、offset は、FFMS_GetAudio によって返されるバッファーの長さの半分です。
FFMS は、この解釈に関する適切な文書を提供していません。これについてより多くの情報を提供できる人がいれば、それは大きな助けになるでしょう。