CRI Sofdec  Last Updated: 2024-09-25 20:36 p
サンプル: キューポイント
このサンプルでは、CRI Movieのキューポイント機能の紹介をしています。 キューポイントに関する概要は、キューポイントとは をご参照ください。

プログラムの流れ

キューポイント再生に必要な基本手順は下記のようになります。
  1. メタデータ用メモリアロケーター関数の登録
  2. キューポイントコールバックの登録
  3. 再生開始

1.メタデータ用メモリアロケーター関数の登録
/* プレーヤーの作成 */
app_obj->player = criManaPlayer_Create(NULL, 0);
/* [キューポイント] */
/* キューポイントの取得にはメタデータ用のワークが必要 */
/* メタデータ用のワークには個別にアロケーターを登録します */
criManaPlayer_SetMetaDataWorkAllocator(app_obj->player, user_alloc, user_free, NULL, CRIMANA_META_FLAG_ALL);
CriManaPlayerHn criManaPlayer_Create(void *work, CriSint32 work_size)
Manaプレーヤーの作成(コンフィグ指定なし)
void criManaPlayer_SetMetaDataWorkAllocator(CriManaPlayerHn player, CriManaMetaMallocFunc allocfunc, CriManaMetaFreeFunc freefunc, void *obj, CriManaMetaFlag meta_flag)
メタデータ用アロケーターの登録
@ CRIMANA_META_FLAG_ALL
Definition: cri_mana.h:482


キューポイント再生を行うには、ヘッダー解析を行う前に criManaPlayer_SetMetaDataWorkAllocator 関数でメタデータ用の アロケーターを、通常のアロケーターとは別に必ず登録します。アロケーターは criMana_SetUserAllocator 関数で登録するアロケーターと同じ ものでも問題ありません。ただし、マルチスレッド動作時にはメタデータ用のアロケーターが別スレッドから呼び出されることに注意してください。


アロケーターを登録しない場合はキューポイント再生は行えませんの注意してください。

2.キューポイントコールバックの登録
/* [キューポイント] */
/* キューポイントリストの取得 */
app_obj->cueinf = criManaPlayer_GetCuePointInfo(app_obj->player);
if (app_obj->cueinf != NULL) {
user_print_cuepoint_list(app_obj->cueinf);
/* キューポイント通知コールバックをセット */
criManaPlayer_SetCuePointCallback(app_obj->player, user_cuepoint_callback, (void*)app_obj);
} else {
criFwPrt_DebugPrintf("<NO CUEPOINT INFO FOUND>");
}
CriManaCuePointInfo * criManaPlayer_GetCuePointInfo(CriManaPlayerHn player)
キューポイント情報の一覧取得
void criManaPlayer_SetCuePointCallback(CriManaPlayerHn player, CriManaPlayerCuePointCbFunc func, void *obj)
キューポイントコールバックの設定


ムービーにキューポイント情報が含まれていれば、ヘッダー解析終了後に criManaPlayer_GetCuePointInfo 関数でキューポイント リスト情報が取得できます。キューポイントが存在することを確認したら criManaPlayer_SetCuePointCallback 関数でイベント コールバックを登録します。


3.再生開始
以降は通常再生と同じ手順でムービー再生を開始します。ムービー再生が進み、再生時刻がキューポイント時刻に達すると criMana_ExecuteMain 関数内からイベントコールバックがキックされます。このイベントをトリガーにして アプリケーション側で必要な処理を行います。
/* [キューポイント] キューポイント通知コールバック */
static void user_cuepoint_callback(void* obj, CriManaPlayerHn player, CriManaEventPoint *eventinfo)
{
CriUint64 tcount, tunit;
AppObj *app_obj = (AppObj*)obj;
/* [NOTE] コールバック内の処理について */
/* キューポイントコールバック内では、Manaプレーヤーの再生制御APIは呼び出さないで下さい */
/* (例えば、Start, DecodeHeader, Stop, Create, Destroyなど。) */
/* もしこのコールバックをトリガーにしてプレーヤーを操作したい場合は、コマンドを記録し */
/* このコールバック発生後にメインループで呼び出して下さい */
/* このイベント情報を元に、アプリケーション側で必要な処理をキックする */
}
CriManaPlayerObj * CriManaPlayerHn
プレーヤーハンドル
Definition: cri_mana.h:841
イベントポイント情報
Definition: cri_mana.h:707