CRI Sofdec
Last Updated: 2024-09-25 20:36 p
|
Sofdec でビデオフレームを取得して表示する際の処理の流れについて説明します。
Sofdec ライブラリはビデオフレームの描画処理は一切行いません。
表示すべきビデオフレームをデコードしてメインメモリに展開するだけです。
これにより、アプリケーションはムービーをフル画面に表示したり、テクスチャに貼り付けたりといった自由な描画を行うことが出来ます。
ムービーのスムーズな再生を行うためには、アプリケーションがメインループから定期的に(毎Vsync)ビデオフレームの取得処理を行って、 表示時刻になったビデオフレームは即座に表示する必要があります。
メインループが定期的に動いてさえいれば、PAL/NTSCの画面更新周期の違いやムービーのフレームレートの違いによって、アプリケーションが 描画タイミングを調整する必要はありません。
Sofdec のビデオフレーム取得は次の手順で行ってください。
手順 | 説明 |
---|---|
(1) デコード結果の参照 criManaPlayer_ReferFrame | 新しいデコード結果があれば表示時刻とは無関係に参照に成功します。 |
(2) 表示時刻の判定 criManaPlayer_IsFrameOnTime | 参照に成功したフレーム情報を指定して、そのフレームが表示時刻になっているかを確認します。 表示時刻になっていた場合は、すみやかに表示処理を行ってください。 |
(3) デコード結果の変換/コピー criManaPlayer_CopyFrame***** | 描画にしようしたフォーマットにデコード結果を変換します。ピクセルシェーダーを使用する場合はYUVそれぞれのテクスチャ領域へのコピーを行います。この変換結果は次のフレームが取得できるまで描画を継続できるように、内容を保持してください。 |
(4) 変換済みビデオフレームの破棄 criManaPlayer_DiscardFrame | 描画用の変換が終わったフレームを破棄します。破棄しない限り、次の新しいフレームは取得できません。 |
なお、(2)の表示時刻判定は、アプリケーションが表示タイミングを管理する場合は呼び出す必要はありません。
何らかの理由で取得したフレームを表示せずに破棄したい場合は、処理(3)を省略して、いきなりフレームを破棄してください。
本マニュアルではこの処理を「表示スキップ」と呼びます。
例えば以下のような場合には、目的の再生速度に合わせたフレーム表示を行うために表示スキップが必要になります。
なお表示スキップを行う際はデコード済みフレームを多く貯める必要があるため、フレームプール数を大きい値に設定する必要があります。
Sofdec ライブラリのデコード結果は、YUV420形式の独自フォーマットで保持されています。
デコード結果を描画するためには、テクスチャフォーマットやシェーダーの入力に適した形式へ変換/コピーを行う必要があります。
サポートしている出力フォーマットは、プラットフォームごとに異なります。
主な例としては以下のようなものがあります。
実際に使用可能な出力フォーマットについては機種固有マニュアルを参照してください。