CRI ADX  Last Updated: 2024-03-21 14:32 p
ワーク領域渡しによる初期化

サンプルのディレクトリ

/cri/pc/samples/criatomex/memory_management

サンプルで使用しているデータ

/cri/common/smpdata/criatomex/
  • SampleProject.acf
  • AtomCueSheet.acb
  • AtomCueSheet.awb

サンプルの解説

CRI Atomは独自のメモリアロケーション機能を持っていません。
アプリケーションが指定したメモリアロケータを利用するか、アプリケーションから渡されたワーク領域を使用します。
以下のコードは、アプリケーション側でワーク領域を確保し、CRI Atomに渡して初期化、ハンドルの作成を行う例です。
CriAtomExPlayerConfig player_config;
CriAtomExConfig atomex_config;
CriSint32 atomex_work_size;
void *atomex_work;
CriSint32 acf_work_size;
void *acf_work;
CriSint32 acb_work_size;
void *acb_work;
CriSint32 vp_work_size;
void *vp_work;
CriSint32 player_work_size;
void *player_work;
/* エラーコールバック関数の登録 */
criErr_SetCallback(user_error_callback_func);
/* ライブラリ設定パラメーターの初期化 */
/* ライブラリワークサイズの計算 */
atomex_work_size = criAtomEx_CalculateWorkSize(&atomex_config);
/* アプリケーション側でメモリを確保 */
atomex_work = user_alloc(NULL, atomex_work_size);
/* アプリケーションから明示的にワーク領域を渡して初期化 */
smputl_initialize(&atomex_config, atomex_work, atomex_work_size);
/* ACFファイルの読み込みと登録 */
acf_work_size = criAtomEx_CalculateWorkSizeForRegisterAcfFile(NULL, PATH ACF_FILE);
acf_work = user_alloc(NULL, acf_work_size);
criAtomEx_RegisterAcfFile(NULL, PATH ACF_FILE, acf_work, acf_work_size);
/* ACBファイルを読み込み、ACBハンドルを作成 */
acb_work_size = criAtomExAcb_CalculateWorkSizeForLoadAcbFile(NULL, PATH ACB_FILE, NULL, PATH AWB_FILE);
acb_work = user_alloc(NULL, acb_work_size);
NULL, PATH ACB_FILE, NULL, PATH AWB_FILE, acb_work, acb_work_size);
/* ADXオンメモリボイスプールの作成 */
vp_work = user_alloc(NULL, vp_work_size);
&adxvp_config, vp_work, vp_work_size);
/* プレーヤーの作成 */
player_work_size = criAtomExPlayer_CalculateWorkSize(&player_config);
player_work = user_alloc(NULL, player_work_size);
&player_config, player_work, player_work_size);
CriAtomExAcbObj * CriAtomExAcbHn
ACBハンドル
Definition: cri_atom_ex.h:3067
CriAtomExAcbHn criAtomExAcb_LoadAcbFile(CriFsBinderHn acb_binder, const CriChar8 *acb_path, CriFsBinderHn awb_binder, const CriChar8 *awb_path, void *work, CriSint32 work_size)
ACBファイルのロード
CriSint32 criAtomExAcb_CalculateWorkSizeForLoadAcbFile(CriFsBinderHn acb_binder, const CriChar8 *acb_path, CriFsBinderHn awb_binder, const CriChar8 *awb_path)
ACBファイルのロードに必要なワーク領域サイズの計算
CriSint32 criAtomEx_CalculateWorkSize(const CriAtomExConfig *config)
ライブラリ初期化用ワーク領域サイズの計算
CriSint32 criAtomEx_CalculateWorkSizeForRegisterAcfFile(CriFsBinderHn binder, const CriChar8 *path)
ACFファイルの登録に必要なワーク領域サイズの計算
#define criAtomEx_SetDefaultConfig(p_config)
ライブラリ初期化用コンフィグ構造体にデフォルト値をセット
Definition: cri_atom_ex.h:326
CriBool criAtomEx_RegisterAcfFile(CriFsBinderHn binder, const CriChar8 *path, void *work, CriSint32 work_size)
ACFファイルの登録
CriAtomExPlayerObj * CriAtomExPlayerHn
プレーヤーハンドル
Definition: cri_atom_ex.h:3656
CriAtomExPlayerHn criAtomExPlayer_Create(const CriAtomExPlayerConfig *config, void *work, CriSint32 work_size)
AtomExPlayerの作成
CriSint32 criAtomExPlayer_CalculateWorkSize(const CriAtomExPlayerConfig *config)
AtomExPlayer用ワーク領域サイズの計算
#define criAtomExPlayer_SetDefaultConfig(p_config)
プレーヤー作成用コンフィグ構造体にデフォルト値をセット
Definition: cri_atom_ex.h:713
#define criAtomExVoicePool_SetDefaultConfigForAdxVoicePool(p_config)
ADXボイスプール作成用コンフィグ構造体にデフォルト値をセット
Definition: cri_atom_ex.h:585
CriSint32 criAtomExVoicePool_CalculateWorkSizeForAdxVoicePool(const CriAtomExAdxVoicePoolConfig *config)
ADXボイスプール作成用ワーク領域サイズの計算
struct CriAtomExVoicePoolTag * CriAtomExVoicePoolHn
ボイスプールハンドル
Definition: cri_atom_ex.h:3254
CriAtomExVoicePoolHn criAtomExVoicePool_AllocateAdxVoicePool(const CriAtomExAdxVoicePoolConfig *config, void *work, CriSint32 work_size)
ADXボイスプールの作成
void criErr_SetCallback(CriErrCbFunc cbf)
エラーコールバック関数の登録
ADXボイスプール作成用コンフィグ構造体
Definition: cri_atom_ex.h:3311
Atomライブラリ初期化用コンフィグ構造体CRI Atomライブラリの動作仕様を指定するための構造体です。 criAtomEx_Initialize 関数の引数に指定します。 CRI Atomラ...
Definition: cri_atom_ex.h:1465
プレーヤー作成用コンフィグ構造体
Definition: cri_atom_ex.h:3518


任意サイズの動的メモリアロケーションを使うと、広い意味でのメモリフラグメンテーションを回避することが技術的に困難になります。
ワーク領域渡しによりライブラリの初期化やハンドル生成は、メモリを確保するタイミングや確保順序をアプリケーション側で制御し、 メモリフラグメンテーションの問題を回避する点で有効です。