CRI Sofdec  Last Updated: 2024-09-25 20:36 p
サンプル:ワークバッファー渡しによる再生
このサンプルプログラムでは、ユーザーアロケーターを登録せずに、再生に必要なワークバッファーをアプリケーションから 直接もらって再生する場合のコード例を紹介していいます。


ワーク渡しによる再生のポイント

ユーザーアロケーターを登録しない場合、以下の3つのタイミングでアプリケーションはManaライブラリが必要とする ワークバッファーサイズ分のメモリ領域を渡す必要があります。
  1. ライブラリ初期化時
  2. ハンドル作成時
  3. 再生開始直前 (再生用ワークバッファー指定)
上記のタイミングでそれぞれ渡すべきワークバッファーのサイズは、対応するワークバッファーサイズ計算関数を使用します。 得られたワークバッファーサイズ分のメモリを確保し、CRI Manaライブラリに渡してください。CRI Manaライブラリの 詳しいメモリ管理に関する情報は、メモリ管理 を参照してください。


1.ライブラリ初期化時
/* CRI Manaライブラリの初期化(デフォルトでマルチスレッドモデル) */
app_obj->size_mana_libwork = criMana_CalculateLibWorkSize(NULL);
criFwPrt_DebugPrintf("[Work: Mana Lib]\n");
app_obj->buf_mana_libwork = criFwMem_Alloc(app_obj->size_mana_libwork, SMPUTL_MEM_ALIGN);
criMana_Initialize(NULL, app_obj->buf_mana_libwork, app_obj->size_mana_libwork);
void criMana_Initialize(const CriManaLibConfig *config, void *work, CriSint32 work_size)
ライブラリの初期化
CriSint32 criMana_CalculateLibWorkSize(const CriManaLibConfig *config)
ライブラリ初期化用ワーク領域サイズの計算


ライブラリの初期化に必要なワークバッファーサイズは、 CriManaLibConfig 構造体のパラメーターによって決まります。 構造体の代わりに、NULLを指定すると、内部で criMana_SetDefaultLibConfig で初期化した値が適用されます。



2.ハンドル作成時
/* プレーヤーの作成 */
app_obj->size_mana_hnwork = criManaPlayer_CalculateHanldeWorkSize();
criFwPrt_DebugPrintf("[Work: Mana Player]\n");
app_obj->buf_mana_hnwork = criFwMem_Alloc(app_obj->size_mana_hnwork, SMPUTL_MEM_ALIGN);
app_obj->player = criManaPlayer_Create(app_obj->buf_mana_hnwork, app_obj->size_mana_hnwork);
CriManaPlayerHn criManaPlayer_Create(void *work, CriSint32 work_size)
Manaプレーヤーの作成(コンフィグ指定なし)


プレーヤーハンドル作成時に必要なパラメーターはありません。ハンドルの作成に必要な必要最小限のワークバッファーを渡します。



3.再生開始直前 (再生用ワークバッファー指定)
/* 再生用ワークバッファーの設定 */
{
criManaPlayer_GetPlaybackWorkParam(app_obj->player, &config_basic, &config_ex);
/* 必要ならここでパラメーター調整 */
app_obj->size_mana_playwork = criManaPlayer_CalculatePlaybackWorkSize(app_obj->player, &config_basic, &config_ex);
criFwPrt_DebugPrintf("[Work: Mana Playback]\n");
app_obj->buf_mana_playwork = criFwMem_Alloc(app_obj->size_mana_playwork, SMPUTL_MEM_ALIGN);
criManaPlayer_SetPlaybackWork(app_obj->player, &config_basic, &config_ex, app_obj->buf_mana_playwork, app_obj->size_mana_playwork);
}
CriSint32 criManaPlayer_CalculatePlaybackWorkSize(CriManaPlayerHn player, const CriManaPlaybackBasicWorkConfig *config_basic, const CriManaPlaybackExWorkConfig *config_ex)
再生用ワーク領域のサイズ計算
void criManaPlayer_SetPlaybackWork(CriManaPlayerHn player, const CriManaPlaybackBasicWorkConfig *config_basic, const CriManaPlaybackExWorkConfig *config_ex, void *work, CriSint32 work_size)
再生ワーク領域の設定
CriBool criManaPlayer_GetPlaybackWorkParam(CriManaPlayerHn player, CriManaPlaybackBasicWorkConfig *config_basic, CriManaPlaybackExWorkConfig *config_ex)
再生ワークパラメーター構造体の取得
再生ワーク用パラメーター構造体 (基本)
Definition: cri_mana.h:1019
再生ワーク用パラメーター構造体(拡張)
Definition: cri_mana.h:1050


アプリケーションが再生したいムービーファイルのスペックと再生パラメーターから必要な再生用ワークバッファーを計算し、Manaプレーヤーハンドルに渡します。


ヘッダー解析が終了している状態であれば、criManaPlayer_GetPlaybackWorkParam 関数でヘッダー情報とプレーヤーハンドルに設定された再生情報(オーディオトラック番号など)をもとに、適切な再生用ワークパラメーターをアプリケーションが取得できます。 ヘッダー解析を行わずにすぐにムービー再生を開始したい場合は、アプリケーションが自前で::CriManaPlaybackExWorkConfig構造体のパラメーターを調整し、再生用ワークバッファーを指定してください。


再生ワークバッファーサイズを削減したい場合、 CriManaPlaybackBasicWorkConfig 構造体や CriManaPlaybackExWorkConfig 構造体のパラメーターを調整し、不要な機能を使用しないようにしてサイズ調節が可能です。



ワークバッファーの解放について

CRI Manaライブラリ/プレーヤーハンドルに渡したワークバッファーの解放は、それぞれプレーヤーハンドルの破棄後とライブラリの終了後に解放してください。ムービー再生中やライブラリ初期済みの状態でワークバッファーの解放を行うと、動作の保証ができません。